Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,7 @@ export class PgInstrumentation extends InstrumentationBase<PgInstrumentationConf
// Return a pass-along promise which ends the span and then goes to user's orig resolvers
return new Promise(resolve => {
utils.handleExecutionResult(plugin.getConfig(), span, result);
recordDuration();
span.end();
resolve(result);
});
Expand All @@ -416,6 +417,7 @@ export class PgInstrumentation extends InstrumentationBase<PgInstrumentationConf
code: SpanStatusCode.ERROR,
message: error.message,
});
recordDuration();
span.end();
reject(error);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ describe('pg-pool', () => {
await client.query('SELECT NOW()');
} finally {
client.release();
await newPool.end();
Copy link
Contributor Author

@trentm trentm Oct 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reviewer note: This is an unrelated change. It fixes a few-second hang in the test file completing (presumably on a pool connection timeout).

}
const spans = memoryExporter.getFinishedSpans();
assert.strictEqual(spans.length, 0);
Expand Down Expand Up @@ -519,6 +520,11 @@ describe('pg-pool', () => {
);

const metrics = resourceMetrics.scopeMetrics[0].metrics;
assert.strictEqual(
metrics[0].descriptor.name,
'db.client.operation.duration'
);

assert.strictEqual(
metrics[1].descriptor.name,
'db.client.connection.count'
Expand Down Expand Up @@ -567,5 +573,39 @@ describe('pg-pool', () => {
});
});
});

it('should generate `db.client.*` metrics (Promises-style)', async (...args) => {
const client = await pool.connect();

try {
const ret = await client.query('SELECT NOW()');
assert.ok(ret);
} finally {
client.release();
}

const { resourceMetrics, errors } = await metricReader.collect();
assert.deepEqual(
errors,
[],
'expected no errors from the callback during metric collection'
);

// We just test the expected metric *names* here. The particulars of the
// metric values are already tested in other test cases.
const metrics = resourceMetrics.scopeMetrics[0].metrics;
assert.strictEqual(
metrics[0].descriptor.name,
'db.client.operation.duration'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done in commit 2120edf

);
assert.strictEqual(
metrics[1].descriptor.name,
'db.client.connection.count'
);
assert.strictEqual(
metrics[2].descriptor.name,
'db.client.connection.pending_requests'
);
});
});
});