first test
This commit is contained in:
parent
1f6aba0e74
commit
4b7ae0ef92
|
@ -0,0 +1,132 @@
|
|||
// vi:ts=4:sts=4:sw=4:noet:tw=72
|
||||
//
|
||||
// covid-exporter
|
||||
//
|
||||
// Copyright (c) 2021 Andreas Neue <an@dnix.de>
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
type CovidRecord struct {
|
||||
Updated int
|
||||
Country string
|
||||
CountryInfo interface{}
|
||||
Cases int
|
||||
TodayCases int
|
||||
Deaths int
|
||||
TodayDeaths int
|
||||
Recovered int
|
||||
TodayRecovered int
|
||||
Active int
|
||||
Critical int
|
||||
CasesPerOneMillion float32
|
||||
DeathsPerOneMillion float32
|
||||
Tests int
|
||||
TestsPerOneMillion int
|
||||
Population int
|
||||
Continent string
|
||||
OneCasePerPeople int
|
||||
OneDeathPerPeople int
|
||||
OneTestPerPeople int
|
||||
ActivePerOneMillion float32
|
||||
RecoveredPerOneMillion float32
|
||||
CriticalPerOneMillion float32
|
||||
}
|
||||
|
||||
var (
|
||||
gaugeCases *prometheus.GaugeVec
|
||||
gaugeActive *prometheus.GaugeVec
|
||||
gaugeCritical *prometheus.GaugeVec
|
||||
gaugePopulation *prometheus.GaugeVec
|
||||
)
|
||||
|
||||
func main() {
|
||||
url := "https://corona.lmao.ninja/v3/covid-19/countries"
|
||||
|
||||
go getCovidStats(url)
|
||||
serveMetrics()
|
||||
}
|
||||
|
||||
func getCovidStats(url string) {
|
||||
for {
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
fmt.Printf("%v\n", err)
|
||||
continue
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
data, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
fmt.Printf("%v\n", err)
|
||||
continue
|
||||
}
|
||||
var cr []CovidRecord
|
||||
err = json.Unmarshal(data, &cr)
|
||||
if err != nil {
|
||||
fmt.Printf("%v\n", err)
|
||||
continue
|
||||
}
|
||||
for i := range cr {
|
||||
gaugeCases.WithLabelValues(cr[i].Country).Set(float64(cr[i].Cases))
|
||||
gaugeActive.WithLabelValues(cr[i].Country).Set(float64(cr[i].Active))
|
||||
gaugeCritical.WithLabelValues(cr[i].Country).Set(float64(cr[i].Critical))
|
||||
gaugePopulation.WithLabelValues(cr[i].Country).Set(float64(cr[i].Population))
|
||||
}
|
||||
time.Sleep(15 * time.Minute)
|
||||
}
|
||||
}
|
||||
|
||||
func serveMetrics() {
|
||||
gaugeCases = prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Name: "covid_cases",
|
||||
Help: "Covid-19 cases",
|
||||
},
|
||||
[]string{
|
||||
"country",
|
||||
},
|
||||
)
|
||||
prometheus.MustRegister(gaugeCases)
|
||||
gaugeActive = prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Name: "covid_active",
|
||||
Help: "Covid-19 active cases",
|
||||
},
|
||||
[]string{
|
||||
"country",
|
||||
},
|
||||
)
|
||||
prometheus.MustRegister(gaugeActive)
|
||||
gaugeCritical = prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Name: "covid_critical",
|
||||
Help: "Covid-19 critical cases",
|
||||
},
|
||||
[]string{
|
||||
"country",
|
||||
},
|
||||
)
|
||||
prometheus.MustRegister(gaugeCritical)
|
||||
gaugePopulation = prometheus.NewGaugeVec(
|
||||
prometheus.GaugeOpts{
|
||||
Name: "covid_population",
|
||||
Help: "Population",
|
||||
},
|
||||
[]string{
|
||||
"country",
|
||||
},
|
||||
)
|
||||
prometheus.MustRegister(gaugePopulation)
|
||||
|
||||
http.Handle("/metrics", prometheus.Handler())
|
||||
http.ListenAndServe(":9099", nil)
|
||||
}
|
Loading…
Reference in New Issue