Now exposing the key record types as metrics, updated the readme as well
This commit is contained in:
parent
fb043cb4b1
commit
db222e778b
15
README.md
15
README.md
@ -11,8 +11,15 @@ $ go run main.go
|
||||
## Reading metrics
|
||||
|
||||
```bash
|
||||
$ curl -s localhost:8080/metrics |grep ont |grep -v "#"
|
||||
ont_covid_data_days_left 84
|
||||
ont_covid_data_previous_day_doses_administered 108563
|
||||
ont_covid_data_total_doses_administered 2.834784e+06
|
||||
$ curl -s localhost:8080/metrics |grep records
|
||||
|
||||
# HELP records_previous_day_doses_administered Previous Day Doses Administered
|
||||
# TYPE records_previous_day_doses_administered gauge
|
||||
records_previous_day_doses_administered 105382
|
||||
# HELP records_total_doses_administered Total Doses Administered
|
||||
# TYPE records_total_doses_administered gauge
|
||||
records_total_doses_administered 2.940166e+06
|
||||
# HELP records_total_doses_in_fully_vaccinated_individuals Total Doses In Fully Vaccinated Individuals
|
||||
# TYPE records_total_doses_in_fully_vaccinated_individuals gauge
|
||||
records_total_doses_in_fully_vaccinated_individuals 328598
|
||||
```
|
34
main.go
34
main.go
@ -52,19 +52,20 @@ type OntCovidData struct {
|
||||
} `json:"result"`
|
||||
}
|
||||
|
||||
var metrics struct {
|
||||
var records struct {
|
||||
TotalDosesAdministered func() prometheus.Gauge `name:"total_doses_administered" help:"Total Doses Administered"`
|
||||
PreviousDayDosesAdministered func() prometheus.Gauge `name:"previous_day_doses_administered" help:"Previous Day Doses Administered"`
|
||||
DaysLeft func() prometheus.Gauge `name:"days_left" help:"Days Left"`
|
||||
TotalDosesInFullyVaccinatedIndividuals func() prometheus.Gauge `name:"total_doses_in_fully_vaccinated_individuals" help:"Total Doses In Fully Vaccinated Individuals"`
|
||||
TotalIndividualsFullyVaccinated func() prometheus.Gauge `name:"total_individuals_fully_vaccinated" help:"Total Individuals Fully Vaccinated"`
|
||||
}
|
||||
|
||||
func init() {
|
||||
gotoprom.MustInit(&metrics, "ont_covid_data")
|
||||
gotoprom.MustInit(&records, "records")
|
||||
}
|
||||
|
||||
func updateMetrics() {
|
||||
data_url := "https://data.ontario.ca/api/3/action/datastore_search?sort=report_date+desc&limit=1&resource_id=8a89caa9-511c-4568-af89-7f2174b4378c"
|
||||
population := int64(11971129)
|
||||
// population := int64(11971129)
|
||||
resp, getErr := http.Get(data_url)
|
||||
if getErr != nil {
|
||||
log.Fatalln(getErr)
|
||||
@ -78,27 +79,32 @@ func updateMetrics() {
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
totalString := strings.Replace(data.Result.Records[0].TotalDosesAdministered, ",", "", -1)
|
||||
total, _ := strconv.ParseInt(totalString, 0, 64)
|
||||
prevDayString := strings.Replace(data.Result.Records[0].PreviousDayDosesAdministered, ",", "", -1)
|
||||
prevDay, _ := strconv.ParseInt(prevDayString, 0, 64)
|
||||
// reportDate := data.Result.Records[0].ReportDate
|
||||
totalDosesAdministeredString := strings.Replace(data.Result.Records[0].TotalDosesAdministered, ",", "", -1)
|
||||
totalDosesAdministered, _ := strconv.ParseInt(totalDosesAdministeredString, 0, 64)
|
||||
records.TotalDosesAdministered().Set(float64(totalDosesAdministered))
|
||||
|
||||
days := (population - total) / prevDay
|
||||
previousDayDosesAdministeredString := strings.Replace(data.Result.Records[0].PreviousDayDosesAdministered, ",", "", -1)
|
||||
previousDayDosesAdministered, _ := strconv.ParseInt(previousDayDosesAdministeredString, 0, 64)
|
||||
records.PreviousDayDosesAdministered().Set(float64(previousDayDosesAdministered))
|
||||
|
||||
metrics.TotalDosesAdministered().Set(float64(total))
|
||||
metrics.PreviousDayDosesAdministered().Set(float64(prevDay))
|
||||
metrics.DaysLeft().Set(float64(days))
|
||||
totalDosesInFullyVaccinatedIndividualsString := strings.Replace(data.Result.Records[0].TotalDosesInFullyVaccinatedIndividuals, ",", "", -1)
|
||||
totalDosesInFullyVaccinatedIndividuals, _ := strconv.ParseInt(totalDosesInFullyVaccinatedIndividualsString, 0, 64)
|
||||
records.TotalDosesInFullyVaccinatedIndividuals().Set(float64(totalDosesInFullyVaccinatedIndividuals))
|
||||
|
||||
totalIndividualsFullyVaccinatedString := strings.Replace(data.Result.Records[0].TotalIndividualsFullyVaccinated, ",", "", -1)
|
||||
totalIndividualsFullyVaccinated, _ := strconv.ParseInt(totalIndividualsFullyVaccinatedString, 0, 64)
|
||||
records.TotalDosesInFullyVaccinatedIndividuals().Set(float64(totalIndividualsFullyVaccinated))
|
||||
}
|
||||
|
||||
func main() {
|
||||
c := cron.New()
|
||||
c.AddFunc("@hourly", func() { updateMetrics() })
|
||||
c.AddFunc("@daily", func() { updateMetrics() })
|
||||
c.Start()
|
||||
|
||||
updateMetrics()
|
||||
|
||||
flag.Parse()
|
||||
http.Handle("/metrics", promhttp.Handler())
|
||||
fmt.Println("Listening on port 8080")
|
||||
log.Fatal(http.ListenAndServe(*addr, nil))
|
||||
}
|
||||
|
Reference in New Issue
Block a user