server_metrics.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package server
  2. import (
  3. "github.com/prometheus/client_golang/prometheus"
  4. )
  5. var (
  6. metrics = newMetrics()
  7. )
  8. type serverMetrics struct {
  9. messagesPublishedSuccess prometheus.Counter
  10. messagesPublishedFailure prometheus.Counter
  11. messagesCached prometheus.Gauge
  12. firebasePublishedSuccess prometheus.Counter
  13. firebasePublishedFailure prometheus.Counter
  14. emailsPublishedSuccess prometheus.Counter
  15. emailsPublishedFailure prometheus.Counter
  16. visitors prometheus.Gauge
  17. subscribers prometheus.Gauge
  18. topics prometheus.Gauge
  19. httpRequests *prometheus.CounterVec
  20. }
  21. func newMetrics() *serverMetrics {
  22. m := &serverMetrics{
  23. messagesPublishedSuccess: prometheus.NewCounter(prometheus.CounterOpts{
  24. Name: "ntfy_messages_published_success",
  25. }),
  26. messagesPublishedFailure: prometheus.NewCounter(prometheus.CounterOpts{
  27. Name: "ntfy_messages_published_failure",
  28. }),
  29. messagesCached: prometheus.NewGauge(prometheus.GaugeOpts{
  30. Name: "ntfy_messages_cached_total",
  31. }),
  32. firebasePublishedSuccess: prometheus.NewCounter(prometheus.CounterOpts{
  33. Name: "ntfy_firebase_published_success",
  34. }),
  35. firebasePublishedFailure: prometheus.NewCounter(prometheus.CounterOpts{
  36. Name: "ntfy_firebase_published_failure",
  37. }),
  38. emailsPublishedSuccess: prometheus.NewCounter(prometheus.CounterOpts{
  39. Name: "ntfy_emails_sent_success",
  40. }),
  41. emailsPublishedFailure: prometheus.NewCounter(prometheus.CounterOpts{
  42. Name: "ntfy_emails_sent_failure",
  43. }),
  44. visitors: prometheus.NewGauge(prometheus.GaugeOpts{
  45. Name: "ntfy_visitors_total",
  46. }),
  47. subscribers: prometheus.NewGauge(prometheus.GaugeOpts{
  48. Name: "ntfy_subscribers_total",
  49. }),
  50. topics: prometheus.NewGauge(prometheus.GaugeOpts{
  51. Name: "ntfy_topics_total",
  52. }),
  53. httpRequests: prometheus.NewCounterVec(prometheus.CounterOpts{
  54. Name: "ntfy_http_requests_total",
  55. }, []string{"http_code", "ntfy_code", "http_method"}),
  56. }
  57. prometheus.MustRegister(
  58. m.messagesPublishedSuccess,
  59. m.messagesPublishedFailure,
  60. m.messagesCached,
  61. m.firebasePublishedSuccess,
  62. m.firebasePublishedFailure,
  63. m.emailsPublishedSuccess,
  64. m.emailsPublishedFailure,
  65. m.visitors,
  66. m.subscribers,
  67. m.topics,
  68. m.httpRequests,
  69. )
  70. return m
  71. }