main.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io"
  6. "net/http"
  7. "github.com/prometheus/client_golang/prometheus"
  8. "github.com/prometheus/client_golang/prometheus/promhttp"
  9. )
  10. type Weather struct{
  11. Temperature float32 `json:"temperature_c"`
  12. Humidity float32 `json:"humidity_p"`
  13. }
  14. var (
  15. temperature = prometheus.NewGauge(
  16. prometheus.GaugeOpts {
  17. Name: "temperature_in_celsius",
  18. Help: "Current temperature in celsius.",
  19. },
  20. )
  21. humidity = prometheus.NewGauge(
  22. prometheus.GaugeOpts {
  23. Name: "humidity_percentage",
  24. Help: "Percentage of atmospheric humidity.",
  25. },
  26. )
  27. )
  28. func handle_temp_requests(w http.ResponseWriter, r *http.Request) {
  29. var temp Weather
  30. dec := json.NewDecoder(r.Body)
  31. err := dec.Decode(&temp)
  32. if err != nil {
  33. http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
  34. fmt.Printf("could not decode message %v", err)
  35. return
  36. }
  37. temperature.Set(float64(temp.Temperature))
  38. humidity.Set(float64(temp.Humidity))
  39. fmt.Printf("%+v\n", temp)
  40. w.WriteHeader(http.StatusOK)
  41. }
  42. func handle_prom_health_check(w http.ResponseWriter, r *http.Request) {
  43. w.WriteHeader(http.StatusOK)
  44. io.WriteString(w, "OK")
  45. }
  46. func main() {
  47. prometheus.MustRegister(temperature)
  48. prometheus.MustRegister(humidity)
  49. http.HandleFunc("/temp", handle_temp_requests)
  50. http.HandleFunc("/healthcheck", handle_prom_health_check)
  51. http.Handle("/metrics", promhttp.Handler())
  52. http.ListenAndServe("0.0.0.0:8080", nil)
  53. }