server_metrics.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. metricSMSSentSuccess prometheus.Counter
  17. metricSMSSentFailure prometheus.Counter
  18. metricCallsMadeSuccess prometheus.Counter
  19. metricCallsMadeFailure prometheus.Counter
  20. metricUnifiedPushPublishedSuccess prometheus.Counter
  21. metricMatrixPublishedSuccess prometheus.Counter
  22. metricMatrixPublishedFailure prometheus.Counter
  23. metricAttachmentsTotalSize prometheus.Gauge
  24. metricVisitors prometheus.Gauge
  25. metricSubscribers prometheus.Gauge
  26. metricTopics prometheus.Gauge
  27. metricUsers prometheus.Gauge
  28. metricHTTPRequests *prometheus.CounterVec
  29. )
  30. func initMetrics() {
  31. metricMessagesPublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  32. Name: "ntfy_messages_published_success",
  33. })
  34. metricMessagesPublishedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  35. Name: "ntfy_messages_published_failure",
  36. })
  37. metricMessagesCached = prometheus.NewGauge(prometheus.GaugeOpts{
  38. Name: "ntfy_messages_cached_total",
  39. })
  40. metricMessagePublishDurationMillis = prometheus.NewGauge(prometheus.GaugeOpts{
  41. Name: "ntfy_message_publish_duration_ms",
  42. })
  43. metricFirebasePublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  44. Name: "ntfy_firebase_published_success",
  45. })
  46. metricFirebasePublishedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  47. Name: "ntfy_firebase_published_failure",
  48. })
  49. metricEmailsPublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  50. Name: "ntfy_emails_sent_success",
  51. })
  52. metricEmailsPublishedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  53. Name: "ntfy_emails_sent_failure",
  54. })
  55. metricEmailsReceivedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  56. Name: "ntfy_emails_received_success",
  57. })
  58. metricEmailsReceivedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  59. Name: "ntfy_emails_received_failure",
  60. })
  61. metricSMSSentSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  62. Name: "ntfy_sms_sent_success",
  63. })
  64. metricSMSSentFailure = prometheus.NewCounter(prometheus.CounterOpts{
  65. Name: "ntfy_sms_sent_failure",
  66. })
  67. metricCallsMadeSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  68. Name: "ntfy_calls_made_success",
  69. })
  70. metricCallsMadeFailure = prometheus.NewCounter(prometheus.CounterOpts{
  71. Name: "ntfy_calls_made_failure",
  72. })
  73. metricUnifiedPushPublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  74. Name: "ntfy_unifiedpush_published_success",
  75. })
  76. metricMatrixPublishedSuccess = prometheus.NewCounter(prometheus.CounterOpts{
  77. Name: "ntfy_matrix_published_success",
  78. })
  79. metricMatrixPublishedFailure = prometheus.NewCounter(prometheus.CounterOpts{
  80. Name: "ntfy_matrix_published_failure",
  81. })
  82. metricAttachmentsTotalSize = prometheus.NewGauge(prometheus.GaugeOpts{
  83. Name: "ntfy_attachments_total_size",
  84. })
  85. metricVisitors = prometheus.NewGauge(prometheus.GaugeOpts{
  86. Name: "ntfy_visitors_total",
  87. })
  88. metricUsers = prometheus.NewGauge(prometheus.GaugeOpts{
  89. Name: "ntfy_users_total",
  90. })
  91. metricSubscribers = prometheus.NewGauge(prometheus.GaugeOpts{
  92. Name: "ntfy_subscribers_total",
  93. })
  94. metricTopics = prometheus.NewGauge(prometheus.GaugeOpts{
  95. Name: "ntfy_topics_total",
  96. })
  97. metricHTTPRequests = prometheus.NewCounterVec(prometheus.CounterOpts{
  98. Name: "ntfy_http_requests_total",
  99. }, []string{"http_code", "ntfy_code", "http_method"})
  100. prometheus.MustRegister(
  101. metricMessagesPublishedSuccess,
  102. metricMessagesPublishedFailure,
  103. metricMessagesCached,
  104. metricMessagePublishDurationMillis,
  105. metricFirebasePublishedSuccess,
  106. metricFirebasePublishedFailure,
  107. metricEmailsPublishedSuccess,
  108. metricEmailsPublishedFailure,
  109. metricEmailsReceivedSuccess,
  110. metricEmailsReceivedFailure,
  111. metricSMSSentSuccess,
  112. metricSMSSentFailure,
  113. metricCallsMadeSuccess,
  114. metricCallsMadeFailure,
  115. metricUnifiedPushPublishedSuccess,
  116. metricMatrixPublishedSuccess,
  117. metricMatrixPublishedFailure,
  118. metricAttachmentsTotalSize,
  119. metricVisitors,
  120. metricUsers,
  121. metricSubscribers,
  122. metricTopics,
  123. metricHTTPRequests,
  124. )
  125. }
  126. // minc increments a prometheus.Counter if it is non-nil
  127. func minc(counter prometheus.Counter) {
  128. if counter != nil {
  129. counter.Inc()
  130. }
  131. }
  132. // mset sets a prometheus.Gauge if it is non-nil
  133. func mset[T int | int64 | float64](gauge prometheus.Gauge, value T) {
  134. if gauge != nil {
  135. gauge.Set(float64(value))
  136. }
  137. }