From db222e778ba8966ba948a8c5a1e1c307a0a02a77 Mon Sep 17 00:00:00 2001 From: Ray Slakinski Date: Fri, 9 Apr 2021 10:18:28 -0400 Subject: [PATCH] Now exposing the key record types as metrics, updated the readme as well --- README.md | 15 +++++++++++---- main.go | 38 ++++++++++++++++++++++---------------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 6e42bcc..07d9397 100644 --- a/README.md +++ b/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 ``` \ No newline at end of file diff --git a/main.go b/main.go index 7469a23..bb63c6f 100644 --- a/main.go +++ b/main.go @@ -52,19 +52,20 @@ type OntCovidData struct { } `json:"result"` } -var metrics 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"` +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"` + 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)) }