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

com.landoop.lenses.topology.client.kafka.metrics.KafkaMetricsBuilder Maven / Gradle / Ivy

The newest version!
package com.landoop.lenses.topology.client.kafka.metrics;

import com.landoop.lenses.topology.client.metrics.Metrics;
import com.landoop.lenses.topology.client.metrics.MetricsBuilder;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.common.Metric;
import org.apache.kafka.common.MetricName;

import java.util.Map;

public class KafkaMetricsBuilder implements MetricsBuilder {

  private final Map metricsMap;

  public KafkaMetricsBuilder(Map metricsMap) {
    this.metricsMap = metricsMap;
  }

  public KafkaMetricsBuilder(KafkaProducer producer) {
    this(producer.metrics());
  }

  public KafkaMetricsBuilder(KafkaConsumer consumer) {
    this(consumer.metrics());
  }

  @Override
  public Metrics build(String appName, String topic) {
    Metrics metrics = new Metrics(appName, topic);
    final boolean[] set = {false};
    metricsMap.entrySet().stream()
        .filter(entry -> entry.getKey() != null)
        .filter(entry -> entry.getKey().tags() != null)
        .filter(entry -> topic.equals(entry.getKey().tags().get("topic")))
        .forEach(entry -> {
          switch (entry.getKey().name()) {
            case "record-send-total":
              set[0] = true;
              metrics.setMessageSentTotal((long) entry.getValue().value());
              break;
            case "record-error-total":
              set[0] = true;
              metrics.setMessageErrorTotal((long) entry.getValue().value());
              break;
            case "byte-rate":
              set[0] = true;
              metrics.setBytesSentPerSecond(entry.getValue().value());
              break;
            case "record-send-rate":
              set[0] = true;
              metrics.setMessagesSentPerSecond(entry.getValue().value());
              break;
            case "records-consumed-total":
              set[0] = true;
              metrics.setMessageReceivedTotal((long) entry.getValue().value());
              break;
            case "bytes-consumed-rate":
              set[0] = true;
              metrics.setBytesReceivedPerSecond(entry.getValue().value());
              break;
            case "records-consumed-rate":
              set[0] = true;
              metrics.setMessagesReceivedPerSecond(entry.getValue().value());
              break;
          }
        });
    if (!set[0]) return null;
    return metrics;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy