Package io.grpc.xds.orca
Class OrcaMetricReportingServerInterceptor
- java.lang.Object
-
- io.grpc.xds.orca.OrcaMetricReportingServerInterceptor
-
- All Implemented Interfaces:
io.grpc.ServerInterceptor
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/9127") public final class OrcaMetricReportingServerInterceptor extends java.lang.Object implements io.grpc.ServerInterceptor
AServerInterceptor
that intercepts aServerCall
by running server-side RPC handling under aContext
that records custom per-request metrics provided by server applications and sends to client side along with the response in the format of Open Request Cost Aggregation (ORCA).- Since:
- 1.23.0
-
-
Field Summary
Fields Modifier and Type Field Description private static OrcaMetricReportingServerInterceptor
INSTANCE
private io.grpc.services.MetricRecorder
metricRecorder
(package private) static io.grpc.Metadata.Key<OrcaLoadReport>
ORCA_ENDPOINT_LOAD_METRICS_KEY
-
Constructor Summary
Constructors Constructor Description OrcaMetricReportingServerInterceptor(io.grpc.services.MetricRecorder metricRecorder)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static OrcaMetricReportingServerInterceptor
create(io.grpc.services.MetricRecorder metricRecorder)
Creates a newOrcaMetricReportingServerInterceptor
instance with the givenMetricRecorder
.private static OrcaLoadReport.Builder
fromInternalReport(io.grpc.services.MetricReport internalReport)
static OrcaMetricReportingServerInterceptor
getInstance()
<ReqT,RespT>
io.grpc.ServerCall.Listener<ReqT>interceptCall(io.grpc.ServerCall<ReqT,RespT> call, io.grpc.Metadata headers, io.grpc.ServerCallHandler<ReqT,RespT> next)
private static boolean
isReportValueSet(double value)
private static void
mergeMetrics(OrcaLoadReport.Builder metricRecorderReportBuilder, io.grpc.services.MetricReport callMetricRecorderReport)
Modify the givenOrcaLoadReport.Builder
containing metrics forMetricRecorder
such that metrics from the givenMetricReport
forCallMetricRecorder
takes a higher precedence.
-
-
-
Field Detail
-
INSTANCE
private static final OrcaMetricReportingServerInterceptor INSTANCE
-
ORCA_ENDPOINT_LOAD_METRICS_KEY
static final io.grpc.Metadata.Key<OrcaLoadReport> ORCA_ENDPOINT_LOAD_METRICS_KEY
-
metricRecorder
@Nullable private final io.grpc.services.MetricRecorder metricRecorder
-
-
Method Detail
-
getInstance
public static OrcaMetricReportingServerInterceptor getInstance()
-
create
public static OrcaMetricReportingServerInterceptor create(@Nullable io.grpc.services.MetricRecorder metricRecorder)
Creates a newOrcaMetricReportingServerInterceptor
instance with the givenMetricRecorder
. When bothCallMetricRecorder
andMetricRecorder
exist, the metrics are merged such that per-request metrics fromCallMetricRecorder
takes a higher precedence compared to metrics fromMetricRecorder
.
-
interceptCall
public <ReqT,RespT> io.grpc.ServerCall.Listener<ReqT> interceptCall(io.grpc.ServerCall<ReqT,RespT> call, io.grpc.Metadata headers, io.grpc.ServerCallHandler<ReqT,RespT> next)
- Specified by:
interceptCall
in interfaceio.grpc.ServerInterceptor
-
fromInternalReport
private static OrcaLoadReport.Builder fromInternalReport(io.grpc.services.MetricReport internalReport)
-
mergeMetrics
private static void mergeMetrics(OrcaLoadReport.Builder metricRecorderReportBuilder, io.grpc.services.MetricReport callMetricRecorderReport)
Modify the givenOrcaLoadReport.Builder
containing metrics forMetricRecorder
such that metrics from the givenMetricReport
forCallMetricRecorder
takes a higher precedence.
-
isReportValueSet
private static boolean isReportValueSet(double value)
-
-