Class CallMetricRecorder

java.lang.Object
io.grpc.services.CallMetricRecorder

@ExperimentalApi("https://github.com/grpc/grpc-java/issues/6012") @ThreadSafe public final class CallMetricRecorder extends Object
Utility to record call metrics for load-balancing. One instance per call.
  • Field Details

  • Constructor Details

    • CallMetricRecorder

      public CallMetricRecorder()
  • Method Details

    • getCurrent

      public static CallMetricRecorder getCurrent()
      Returns the call metric recorder attached to the current Context. If there is none, returns a no-op recorder.

      IMPORTANT:It returns the recorder specifically for the current RPC call. DO NOT save the returned object or share it between different RPC calls.

      IMPORTANT:It must be called under the Context under which the RPC handler was called. If it is called from a different thread, the Context must be propagated to the same thread, e.g., with Context.wrap(Runnable).

      Since:
      1.23.0
    • recordUtilizationMetric

      public CallMetricRecorder recordUtilizationMetric(String name, double value)
      Records a call metric measurement for utilization in the range [0, 1]. Values outside the valid range are ignored. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
      Since:
      1.23.0
    • recordCallMetric

      @Deprecated @InlineMe(replacement="this.recordRequestCostMetric(name, value)") public CallMetricRecorder recordCallMetric(String name, double value)
      Deprecated.
      use recordRequestCostMetric(java.lang.String, double) instead. This method will be removed in the future.
      Records a call metric measurement for request cost. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
      Since:
      1.47.0
    • recordRequestCostMetric

      public CallMetricRecorder recordRequestCostMetric(String name, double value)
      Records a call metric measurement for request cost. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
      Since:
      1.48.1
    • recordNamedMetric

      public CallMetricRecorder recordNamedMetric(String name, double value)
      Records an application-specific opaque custom metric measurement. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
    • recordCpuUtilizationMetric

      public CallMetricRecorder recordCpuUtilizationMetric(double value)
      Records a call metric measurement for CPU utilization in the range [0, inf). Values outside the valid range are ignored. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
      Since:
      1.47.0
    • recordApplicationUtilizationMetric

      public CallMetricRecorder recordApplicationUtilizationMetric(double value)
      Records a call metric measurement for application specific utilization in the range [0, inf). Values outside the valid range are ignored. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
    • recordMemoryUtilizationMetric

      public CallMetricRecorder recordMemoryUtilizationMetric(double value)
      Records a call metric measurement for memory utilization in the range [0, 1]. Values outside the valid range are ignored. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
      Since:
      1.47.0
    • recordQpsMetric

      public CallMetricRecorder recordQpsMetric(double value)
      Records a call metric measurement for queries per second (qps) in the range [0, inf). Values outside the valid range are ignored. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
      Since:
      1.54.0
    • recordEpsMetric

      public CallMetricRecorder recordEpsMetric(double value)
      Records a call metric measurement for errors per second (eps) in the range [0, inf). Values outside the valid range are ignored. If RPC has already finished, this method is no-op.

      A latter record will overwrite its former name-sakes.

      Returns:
      this recorder object
    • finalizeAndDump

      Map<String,Double> finalizeAndDump()
      Returns all request cost metric values. No more metric values will be recorded after this method is called. Calling this method multiple times returns the same collection of metric values.
      Returns:
      a map containing all saved metric name-value pairs.
    • finalizeAndDump2

      MetricReport finalizeAndDump2()
      Returns all save metric values. No more metric values will be recorded after this method is called. Calling this method multiple times returns the same collection of metric values.
      Returns:
      a per-request ORCA reports containing all saved metrics.
    • isDisabled

      boolean isDisabled()
    • disable

      private CallMetricRecorder disable()
      Turn this recorder into a no-op one.