@@ -39,6 +39,7 @@ const (
3939 locationMDKey = "x-goog-ext-425905942-bin"
4040 serverTimingMDKey = "server-timing"
4141 serverTimingValPrefix = "gfet4t7; dur="
42+ metricMethodPrefix = "Bigtable."
4243
4344 // Monitored resource labels
4445 monitoredResLabelKeyProject = "project_id"
@@ -61,6 +62,7 @@ const (
6162 metricNameAttemptLatencies = "attempt_latencies"
6263 metricNameServerLatencies = "server_latencies"
6364 metricNameAppBlockingLatencies = "application_latencies"
65+ metricNameFirstRespLatencies = "first_response_latencies"
6466 metricNameRetryCount = "retry_count"
6567 metricNameDebugTags = "debug_tags"
6668 metricNameConnErrCount = "connectivity_error_count"
@@ -109,6 +111,12 @@ var (
109111 },
110112 recordedPerAttempt : true ,
111113 },
114+ metricNameFirstRespLatencies : {
115+ additionalAttrs : []string {
116+ metricLabelKeyStatus ,
117+ },
118+ recordedPerAttempt : false ,
119+ },
112120 metricNameAppBlockingLatencies : {},
113121 metricNameRetryCount : {
114122 additionalAttrs : []string {
@@ -169,6 +177,7 @@ type builtinMetricsTracerFactory struct {
169177 operationLatencies metric.Float64Histogram
170178 serverLatencies metric.Float64Histogram
171179 attemptLatencies metric.Float64Histogram
180+ firstRespLatencies metric.Float64Histogram
172181 appBlockingLatencies metric.Float64Histogram
173182 retryCount metric.Int64Counter
174183 connErrCount metric.Int64Counter
@@ -278,6 +287,17 @@ func (tf *builtinMetricsTracerFactory) createInstruments(meter metric.Meter) err
278287 return err
279288 }
280289
290+ // Create first_response_latencies
291+ tf .firstRespLatencies , err = meter .Float64Histogram (
292+ metricNameFirstRespLatencies ,
293+ metric .WithDescription ("Latency from operation start until the response headers were received. The publishing of the measurement will be delayed until the attempt response has been received." ),
294+ metric .WithUnit (metricUnitMS ),
295+ metric .WithExplicitBucketBoundaries (bucketBounds ... ),
296+ )
297+ if err != nil {
298+ return err
299+ }
300+
281301 // Create application_latencies
282302 tf .appBlockingLatencies , err = meter .Float64Histogram (
283303 metricNameAppBlockingLatencies ,
@@ -329,6 +349,7 @@ type builtinMetricsTracer struct {
329349 instrumentOperationLatencies metric.Float64Histogram
330350 instrumentServerLatencies metric.Float64Histogram
331351 instrumentAttemptLatencies metric.Float64Histogram
352+ instrumentFirstRespLatencies metric.Float64Histogram
332353 instrumentAppBlockingLatencies metric.Float64Histogram
333354 instrumentRetryCount metric.Int64Counter
334355 instrumentConnErrCount metric.Int64Counter
@@ -342,7 +363,7 @@ type builtinMetricsTracer struct {
342363}
343364
344365func (b * builtinMetricsTracer ) setMethod (m string ) {
345- b .method = "Bigtable." + m
366+ b .method = metricMethodPrefix + m
346367}
347368
348369// opTracer is used to record metrics for the entire operation, including retries.
@@ -437,6 +458,7 @@ func (tf *builtinMetricsTracerFactory) createBuiltinMetricsTracer(ctx context.Co
437458 instrumentOperationLatencies : tf .operationLatencies ,
438459 instrumentServerLatencies : tf .serverLatencies ,
439460 instrumentAttemptLatencies : tf .attemptLatencies ,
461+ instrumentFirstRespLatencies : tf .firstRespLatencies ,
440462 instrumentAppBlockingLatencies : tf .appBlockingLatencies ,
441463 instrumentRetryCount : tf .retryCount ,
442464 instrumentConnErrCount : tf .connErrCount ,
0 commit comments