Skip to content

Commit 305697c

Browse files
feat: add first byte latency metric (GoogleCloudPlatform#9754)
NOTE: this depends on and includes https://togithub.com/GoogleCloudPlatform/java-docs-samples/pull/9753
1 parent 371ba8f commit 305697c

File tree

4 files changed

+26
-0
lines changed

4 files changed

+26
-0
lines changed

bigtable/bigtable-proxy/src/main/java/com/google/cloud/bigtable/examples/proxy/metrics/Metrics.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public interface Metrics {
4141

4242
void recordCallLatency(MetricsAttributes attrs, Status status, Duration duration);
4343

44+
void recordFirstByteLatency(MetricsAttributes attrs, Duration duration);
45+
4446
void updateChannelCount(int delta);
4547

4648
interface MetricsAttributes {}

bigtable/bigtable-proxy/src/main/java/com/google/cloud/bigtable/examples/proxy/metrics/MetricsImpl.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public class MetricsImpl implements Closeable, Metrics {
8787
private final DoubleHistogram clientCredLatencies;
8888
private final DoubleHistogram clientQueueLatencies;
8989
private final DoubleHistogram clientCallLatencies;
90+
private final DoubleHistogram clientCallFirstByteLatencies;
9091
private final LongCounter serverCallsStarted;
9192
private final LongHistogram requestSizes;
9293
private final LongHistogram responseSizes;
@@ -195,6 +196,13 @@ private static SdkMeterProvider createMeterProvider(Credentials credentials, Str
195196
.setUnit("ms")
196197
.build();
197198

199+
clientCallFirstByteLatencies =
200+
meter
201+
.histogramBuilder(METRIC_PREFIX + "client.first_byte.duration")
202+
.setDescription("Latency from start of request until first response is received")
203+
.setUnit("ms")
204+
.build();
205+
198206
channelCounter =
199207
meter
200208
.upDownCounterBuilder(METRIC_PREFIX + "client.channel.count")
@@ -306,6 +314,11 @@ public void recordCallLatency(MetricsAttributes attrs, Status status, Duration d
306314
numOutstandingRpcs.decrementAndGet();
307315
}
308316

317+
@Override
318+
public void recordFirstByteLatency(MetricsAttributes attrs, Duration duration) {
319+
clientCallFirstByteLatencies.record(duration.toMillis(), unwrap(attrs));
320+
}
321+
309322
@Override
310323
public void updateChannelCount(int delta) {
311324
channelCounter.add(delta);

bigtable/bigtable-proxy/src/main/java/com/google/cloud/bigtable/examples/proxy/metrics/Tracer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,14 @@ public void inboundHeaders(Metadata headers) {
106106
d -> metrics.recordGfeLatency(attrs, d), () -> metrics.recordGfeHeaderMissing(attrs));
107107
}
108108

109+
@Override
110+
public void inboundMessage(int seqNo) {
111+
if (seqNo == 0) {
112+
metrics.recordFirstByteLatency(
113+
attrs, Duration.ofMillis(stopwatch.elapsed(TimeUnit.MILLISECONDS)));
114+
}
115+
}
116+
109117
public void onCallFinished(Status status) {
110118
grpcQueueDuration.ifPresent(d -> metrics.recordQueueLatency(attrs, d));
111119
metrics.recordResponseSize(attrs, responseSize.get());

bigtable/bigtable-proxy/src/test/java/com/google/cloud/bigtable/examples/proxy/metrics/NoopMetrics.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ public void recordGfeHeaderMissing(MetricsAttributes attrs) {}
5151
@Override
5252
public void recordCallLatency(MetricsAttributes attrs, Status status, Duration duration) {}
5353

54+
@Override
55+
public void recordFirstByteLatency(MetricsAttributes attrs, Duration duration) {}
56+
5457
@Override
5558
public void updateChannelCount(int delta) {}
5659
}

0 commit comments

Comments
 (0)