Metrics.kt
- package com.hexagontk.messaging.rabbitmq
- import com.codahale.metrics.ConsoleReporter
- import com.codahale.metrics.Meter
- import com.codahale.metrics.MetricRegistry
- import com.codahale.metrics.jmx.JmxReporter
- import com.hexagontk.core.debug
- import com.rabbitmq.client.impl.StandardMetricsCollector
- import java.lang.System.Logger
- import java.util.concurrent.TimeUnit
- import com.hexagontk.core.loggerOf
- internal class Metrics(private val metrics: StandardMetricsCollector) {
- private val log: Logger = loggerOf(this::class)
- private val reg: MetricRegistry = metrics.metricRegistry
- fun setJmxReporter() {
- val reporter = JmxReporter.forRegistry(reg)
- .inDomain("com.rabbitmq.client.jmx")
- .convertRatesTo(TimeUnit.SECONDS)
- .convertDurationsTo(TimeUnit.MILLISECONDS)
- .build()
- reporter.start()
- }
- fun setConsoleReporter() {
- val reporter: ConsoleReporter = ConsoleReporter.forRegistry(reg)
- .convertRatesTo(TimeUnit.SECONDS)
- .convertDurationsTo(TimeUnit.MILLISECONDS)
- .build()
- reporter.start(1, TimeUnit.SECONDS)
- }
- fun report() {
- val publishedMessagesCount: Meter? = metrics.publishedMessages
- val consumedMessagesCount: Meter? = metrics.consumedMessages
- val acknowledgedMessagesCount: Meter? = metrics.acknowledgedMessages
- val rejectedMessagesCount: Meter? = metrics.rejectedMessages
- val failedToPublishMessagesCount: Meter? = metrics.failedToPublishMessages
- log.debug { "Number of published messages ${publishedMessagesCount?.count}" }
- log.debug { "Number of consumed messages ${consumedMessagesCount?.count}" }
- log.debug { "Number of acknowledged messages ${acknowledgedMessagesCount?.count}" }
- log.debug { "Number of rejected messages ${rejectedMessagesCount?.count}" }
- log.debug { "Number of failed to publish messages ${failedToPublishMessagesCount?.count}" }
- }
- }