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

me.dinowernli.grpc.prometheus.MonitoringClientCall 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.ClientCall;
import io.grpc.ForwardingClientCall;
import io.grpc.Metadata;

/**
 * A {@link SimpleForwardingClientCall} which increments prometheus counters for the rpc call.
 */
class MonitoringClientCall extends ForwardingClientCall.SimpleForwardingClientCall {
  private final ClientMetrics clientMetrics;
  private final GrpcMethod grpcMethod;
  private final Configuration configuration;
  private final Clock clock;

  MonitoringClientCall(
      ClientCall delegate,
      ClientMetrics clientMetrics,
      GrpcMethod grpcMethod,
      Configuration configuration,
      Clock clock) {
    super(delegate);
    this.clientMetrics = clientMetrics;
    this.grpcMethod = grpcMethod;
    this.configuration = configuration;
    this.clock = clock;
  }

  @Override
  public void start(ClientCall.Listener delegate, Metadata metadata) {
    clientMetrics.recordCallStarted();
    super.start(new MonitoringClientCallListener<>(
        delegate, clientMetrics, grpcMethod, configuration, clock), metadata);
  }

  @Override
  public void sendMessage(R requestMessage) {
    if (grpcMethod.streamsRequests()) {
      clientMetrics.recordStreamMessageSent();
    }
    super.sendMessage(requestMessage);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy