Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit d69497b

Browse files
committed
First response latencies for readRows only
1 parent 8af801b commit d69497b

3 files changed

Lines changed: 29 additions & 12 deletions

File tree

src/client-side-metrics/operation-metrics-collector.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,7 @@ export class OperationMetricsCollector {
181181
}) => {
182182
this.onStatusMetadataReceived(status);
183183
},
184-
)
185-
.on('data', () => {
186-
this.onResponse();
187-
});
184+
);
188185
}
189186

190187
/**
@@ -303,14 +300,23 @@ export class OperationMetricsCollector {
303300
{
304301
this.handlers.forEach(metricsHandler => {
305302
if (metricsHandler.onOperationComplete) {
303+
const firstResponseLatencyExpression =
304+
this.methodName === MethodName.READ_ROWS ||
305+
this.methodName === MethodName.READ_ROW
306+
? {
307+
firstResponseLatency:
308+
this.firstResponseLatency ?? undefined,
309+
}
310+
: {};
306311
metricsHandler.onOperationComplete({
307312
status: finalOperationStatus.toString(),
308313
streaming: this.streamingOperation,
309314
metricsCollectorData: this.getMetricsCollectorData(),
310315
client_name: `nodejs-bigtable/${version}`,
311316
operationLatency: totalMilliseconds,
312317
retryCount: this.attemptCount - 1,
313-
firstResponseLatency: this.firstResponseLatency ?? undefined,
318+
// Conditionally add the firstResponseLatency property
319+
...firstResponseLatencyExpression,
314320
applicationLatency: applicationLatency ?? 0,
315321
});
316322
}

src/utils/createReadStreamInternal.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,9 @@ export function createReadStreamInternal(
324324
gaxOpts,
325325
retryOpts,
326326
});
327+
requestStream.on('data', () => {
328+
metricsCollector.onResponse();
329+
});
327330

328331
activeRequestStream = requestStream!;
329332

system-test/client-side-metrics-all-methods.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,15 @@ function readRowsAssertionCheck(
9898
const secondRequest = requestsHandled[1] as any;
9999
// We would expect these parameters to be different every time so delete
100100
// them from the comparison after checking they exist.
101+
if (method === 'Bigtable.ReadRows' || method === 'Bigtable.ReadRow') {
102+
assert(secondRequest.firstResponseLatency);
103+
delete secondRequest.firstResponseLatency;
104+
} else {
105+
assert(!secondRequest.firstResponseLatency);
106+
}
101107
assert(secondRequest.operationLatency);
102-
assert(secondRequest.firstResponseLatency);
103-
assert.strictEqual(secondRequest.applicationLatency, 0);
108+
assert(secondRequest.applicationLatency < 10);
104109
delete secondRequest.operationLatency;
105-
delete secondRequest.firstResponseLatency;
106110
delete secondRequest.applicationLatency;
107111
delete secondRequest.metricsCollectorData.appProfileId;
108112
assert.deepStrictEqual(secondRequest, {
@@ -144,11 +148,15 @@ function readRowsAssertionCheck(
144148
const fourthRequest = requestsHandled[3] as any;
145149
// We would expect these parameters to be different every time so delete
146150
// them from the comparison after checking they exist.
151+
if (method === 'Bigtable.ReadRows' || method === 'Bigtable.ReadRow') {
152+
assert(fourthRequest.firstResponseLatency);
153+
delete fourthRequest.firstResponseLatency;
154+
} else {
155+
assert(!fourthRequest.firstResponseLatency);
156+
}
147157
assert(fourthRequest.operationLatency);
148-
assert(fourthRequest.firstResponseLatency);
149-
assert.strictEqual(fourthRequest.applicationLatency, 0);
158+
assert(fourthRequest.applicationLatency < 10);
150159
delete fourthRequest.operationLatency;
151-
delete fourthRequest.firstResponseLatency;
152160
delete fourthRequest.applicationLatency;
153161
delete fourthRequest.metricsCollectorData.appProfileId;
154162
assert.deepStrictEqual(fourthRequest, {
@@ -260,7 +268,7 @@ async function checkForPublishedMetrics(projectId: string) {
260268
}
261269
}
262270

263-
describe('Bigtable/ClientSideMetrics', () => {
271+
describe.only('Bigtable/ClientSideMetrics', () => {
264272
const instanceId1 = 'emulator-test-instance';
265273
const instanceId2 = 'emulator-test-instance2';
266274
const tableId1 = 'my-table';

0 commit comments

Comments
 (0)