Metrics.kt

  1. package com.hexagontk.messaging.rabbitmq

  2. import com.codahale.metrics.ConsoleReporter
  3. import com.codahale.metrics.Meter
  4. import com.codahale.metrics.MetricRegistry
  5. import com.codahale.metrics.jmx.JmxReporter
  6. import com.hexagontk.core.debug
  7. import com.rabbitmq.client.impl.StandardMetricsCollector
  8. import java.lang.System.Logger
  9. import java.util.concurrent.TimeUnit
  10. import com.hexagontk.core.loggerOf

  11. internal class Metrics(private val metrics: StandardMetricsCollector) {

  12.     private val log: Logger = loggerOf(this::class)
  13.     private val reg: MetricRegistry = metrics.metricRegistry

  14.     fun setJmxReporter() {
  15.         val reporter = JmxReporter.forRegistry(reg)
  16.             .inDomain("com.rabbitmq.client.jmx")
  17.             .convertRatesTo(TimeUnit.SECONDS)
  18.             .convertDurationsTo(TimeUnit.MILLISECONDS)
  19.             .build()
  20.         reporter.start()
  21.     }

  22.     fun setConsoleReporter() {
  23.         val reporter: ConsoleReporter = ConsoleReporter.forRegistry(reg)
  24.             .convertRatesTo(TimeUnit.SECONDS)
  25.             .convertDurationsTo(TimeUnit.MILLISECONDS)
  26.             .build()
  27.         reporter.start(1, TimeUnit.SECONDS)
  28.     }

  29.     fun report() {
  30.         val publishedMessagesCount: Meter? = metrics.publishedMessages
  31.         val consumedMessagesCount: Meter? = metrics.consumedMessages
  32.         val acknowledgedMessagesCount: Meter? = metrics.acknowledgedMessages
  33.         val rejectedMessagesCount: Meter? = metrics.rejectedMessages
  34.         val failedToPublishMessagesCount: Meter? = metrics.failedToPublishMessages

  35.         log.debug { "Number of published messages ${publishedMessagesCount?.count}" }
  36.         log.debug { "Number of consumed messages ${consumedMessagesCount?.count}" }
  37.         log.debug { "Number of acknowledged messages ${acknowledgedMessagesCount?.count}" }
  38.         log.debug { "Number of rejected messages ${rejectedMessagesCount?.count}" }
  39.         log.debug { "Number of failed to publish messages ${failedToPublishMessagesCount?.count}" }
  40.     }
  41. }