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

me.dinowernli.grpc.prometheus.MonitoringClientInterceptor Maven / Gradle / Ivy

There is a newer version: 0.6.0
Show newest version
// Copyright 2016 Dino Wernli. All Rights Reserved. See LICENSE for licensing terms.

package me.dinowernli.grpc.prometheus;

import java.time.Clock;

import io.grpc.CallOptions;
import io.grpc.Channel;
import io.grpc.ClientCall;
import io.grpc.ClientInterceptor;
import io.grpc.MethodDescriptor;

/** A {@link ClientInterceptor} which sends stats about incoming grpc calls to Prometheus. */
public class MonitoringClientInterceptor implements ClientInterceptor {
  private final Clock clock;
  private final Configuration configuration;
  private final ClientMetrics.Factory clientMetricsFactory;

  public static MonitoringClientInterceptor create(Configuration configuration) {
    return new MonitoringClientInterceptor(
        Clock.systemDefaultZone(), configuration, new ClientMetrics.Factory(configuration));
  }

  private MonitoringClientInterceptor(
      Clock clock,
      Configuration configuration,
      ClientMetrics.Factory clientMetricsFactory) {
    this.clock = clock;
    this.configuration = configuration;
    this.clientMetricsFactory = clientMetricsFactory;
  }

  @Override
  public  ClientCall interceptCall(
      MethodDescriptor methodDescriptor, CallOptions callOptions, Channel channel) {
    ClientMetrics metrics = clientMetricsFactory.createMetricsForMethod(methodDescriptor);
    return new MonitoringClientCall<>(
        channel.newCall(methodDescriptor, callOptions),
        metrics,
        GrpcMethod.of(methodDescriptor),
        configuration,
        clock);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy