All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.zeebe.redis.exporter.RedisMetrics Maven / Gradle / Ivy

package io.zeebe.redis.exporter;

import io.camunda.zeebe.util.CloseableSilently;
import io.camunda.zeebe.util.micrometer.MicrometerUtil;
import io.camunda.zeebe.util.micrometer.StatefulGauge;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import java.time.Duration;

public class RedisMetrics {
  private static final String NAMESPACE = "zeebe.redis.exporter";

  private final MeterRegistry meterRegistry;
  private final StatefulGauge bulkMemorySize;
  private final Timer flushDuration;
  private final DistributionSummary bulkSize;
  private final Counter failedFlush;

  public RedisMetrics(final MeterRegistry meterRegistry) {
    this.meterRegistry = meterRegistry;
    bulkMemorySize =
        StatefulGauge.builder(meterName("bulk.memory.size"))
            .description("Exporter bulk memory size")
            .register(meterRegistry);
    flushDuration =
        Timer.builder(meterName("flush.duration.seconds"))
            .description("Flush duration of bulk exporters in seconds")
            .publishPercentileHistogram()
            .minimumExpectedValue(Duration.ofMillis(10))
            .register(meterRegistry);
    bulkSize =
        DistributionSummary.builder(meterName("bulk.size"))
            .description("Exporter bulk size")
            .serviceLevelObjectives(10, 100, 1_000, 10_000, 100_000)
            .register(meterRegistry);
    failedFlush =
        Counter.builder(meterName("failed.flush"))
            .description("Number of failed flush operations")
            .register(meterRegistry);
  }

  public CloseableSilently measureFlushDuration() {
    return MicrometerUtil.timer(flushDuration, Timer.start(meterRegistry));
  }

  public void recordBulkSize(final int bulkSize) {
    this.bulkSize.record(bulkSize);
  }

  public void recordBulkMemorySize(final int bulkMemorySize) {
    this.bulkMemorySize.set(bulkMemorySize);
  }

  public void recordFailedFlush() {
    failedFlush.increment();
  }

  private String meterName(final String name) {
    return NAMESPACE + "." + name;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy