server_metrics.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package server
  2. import (
  3. "github.com/prometheus/client_golang/prometheus"
  4. )
  5. var (
  6. metricMessagesPublishedSuccess prometheus.Counter
  7. metricMessagesPublishedFailure prometheus.Counter
  8. metricMessagesCached prometheus.Gauge
  9. metricMessagePublishDurationMillis prometheus.Gauge
  10. metricFirebasePublishedSuccess prometheus.Counter
  11. metricFirebasePublishedFailure prometheus.Counter
  12. metricEmailsPublishedSuccess prometheus.Counter
  13. metricEmailsPublishedFailure prometheus.Counter
  14. metricEmailsReceivedSuccess prometheus.Counter
  15. metricEmailsReceivedFailure prometheus.Counter
  16. metricUnifiedPushPublishedSuccess prometheus.Counter
  17. metricMatrixPublishedSuccess prometheus.Counter
  18. metricMatrixPublishedFailure prometheus.Counter
  19. metricAttachmentsTotalSize prometheus.Gauge
  20. metricVisitors prometheus.Gauge
  21. metricSubscribers prometheus.Gauge
  22. metricTopics prometheus.Gauge
  23. metricUsers prometheus.Gauge
  24. metricHTTPRequests *prometheus.CounterVec
  25. )
  26. func initMetrics() {
  27. metricMessagesPublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  28. Name: "ntfy_messages_published_success",
  29. })
  30. metricMessagesPublishedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  31. Name: "ntfy_messages_published_failure",
  32. })
  33. metricMessagesCached = prometheus.NewGauge(prometheus.GaugeOpts{
  34. Name: "ntfy_messages_cached_total",
  35. })
  36. metricMessagePublishDurationMillis = prometheus.NewGauge(prometheus.GaugeOpts{
  37. Name: "ntfy_message_publish_duration_ms",
  38. })
  39. metricFirebasePublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  40. Name: "ntfy_firebase_published_success",
  41. })
  42. metricFirebasePublishedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  43. Name: "ntfy_firebase_published_failure",
  44. })
  45. metricEmailsPublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  46. Name: "ntfy_emails_sent_success",
  47. })
  48. metricEmailsPublishedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  49. Name: "ntfy_emails_sent_failure",
  50. })
  51. metricEmailsReceivedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  52. Name: "ntfy_emails_received_success",
  53. })
  54. metricEmailsReceivedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  55. Name: "ntfy_emails_received_failure",
  56. })
  57. metricUnifiedPushPublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  58. Name: "ntfy_unifiedpush_published_success",
  59. })
  60. metricMatrixPublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  61. Name: "ntfy_matrix_published_success",
  62. })
  63. metricMatrixPublishedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  64. Name: "ntfy_matrix_published_failure",
  65. })
  66. metricAttachmentsTotalSize = prometheus.NewGauge(prometheus.GaugeOpts{
  67. Name: "ntfy_attachments_total_size",
  68. })
  69. metricVisitors = prometheus.NewGauge(prometheus.GaugeOpts{
  70. Name: "ntfy_visitors_total",
  71. })
  72. metricUsers = prometheus.NewGauge(prometheus.GaugeOpts{
  73. Name: "ntfy_users_total",
  74. })
  75. metricSubscribers = prometheus.NewGauge(prometheus.GaugeOpts{
  76. Name: "ntfy_subscribers_total",
  77. })
  78. metricTopics = prometheus.NewGauge(prometheus.GaugeOpts{
  79. Name: "ntfy_topics_total",
  80. })
  81. metricHTTPRequests = prometheus.NewCounterVec(prometheus.CounterOpts{
  82. Name: "ntfy_http_requests_total",
  83. }, []string{"http_code", "ntfy_code", "http_method"})
  84. prometheus.MustRegister(
  85. metricMessagesPublishedSuccess,
  86. metricMessagesPublishedFailure,
  87. metricMessagesCached,
  88. metricMessagePublishDurationMillis,
  89. metricFirebasePublishedSuccess,
  90. metricFirebasePublishedFailure,
  91. metricEmailsPublishedSuccess,
  92. metricEmailsPublishedFailure,
  93. metricEmailsReceivedSuccess,
  94. metricEmailsReceivedFailure,
  95. metricUnifiedPushPublishedSuccess,
  96. metricMatrixPublishedSuccess,
  97. metricMatrixPublishedFailure,
  98. metricAttachmentsTotalSize,
  99. metricVisitors,
  100. metricUsers,
  101. metricSubscribers,
  102. metricTopics,
  103. metricHTTPRequests,
  104. )
  105. }
  106. // minc increments a prometheus.Counter if it is non-nil
  107. func minc(counter prometheus.Counter) {
  108. if counter != nil {
  109. counter.Inc()
  110. }
  111. }
  112. // mset sets a prometheus.Gauge if it is non-nil
  113. func mset[T int | int64 | float64](gauge prometheus.Gauge, value T) {
  114. if gauge != nil {
  115. gauge.Set(float64(value))
  116. }
  117. }