package main import ( "encoding/json" "flag" "fmt" "io/ioutil" "log" "net/http" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) func errorOccured(e error) bool { return e != nil } func main() { var ( addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests.") checkInterval = flag.Int("check-interval", 60, "The interval to wait between Kaifu API requests") ) flag.Parse() visitors := prometheus.NewGauge( prometheus.GaugeOpts{ Name: "visitors", Help: "Current number of visitors at Kaifu-Lodge", }, ) prometheus.MustRegister(visitors) go func() { for { fmt.Printf("Checking...\n") visitorNum, err := getCurrentNumberOfVisitors() if errorOccured(err) { fmt.Printf("Error while checking... %v\n", err) } else { fmt.Printf("New visitor num: %d\n", visitorNum) visitors.Set(float64(visitorNum)) } time.Sleep(time.Duration(*checkInterval) * time.Second) } }() http.Handle("/metrics", promhttp.Handler()) log.Fatal(http.ListenAndServe(*addr, nil)) } func getCurrentNumberOfVisitors() (int32, error) { client := &http.Client{} req, err := http.NewRequest("GET", "https://clubconnector.sovd.cloud/api/anwesende/d371bf89-57e5-41d8-9989-440a061157c9-076015/1", nil) if errorOccured(err) { return 0, err } resp, err := client.Do(req) if errorOccured(err) { return 0, err } // Read Response Body respBody, _ := ioutil.ReadAll(resp.Body) var dat map[string]interface{} err = json.Unmarshal(respBody, &dat) if errorOccured(err) { return 0, err } visitors := int32(dat["count"].(float64)) return visitors, nil }