Now exposing the key record types as metrics, updated the readme as well

main
Ray Slakinski 2021-04-09 10:18:28 -04:00
parent fb043cb4b1
commit db222e778b
2 changed files with 33 additions and 20 deletions

View File

@ -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
```

38
main.go
View File

@ -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))
}