Skip to content

Commit d570ab2

Browse files
committed
update semattrs
1 parent 3f44ecb commit d570ab2

File tree

8 files changed

+143
-156
lines changed

8 files changed

+143
-156
lines changed

plugins/node/instrumentation-typeorm/README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ You can set the following:
5151

5252
## Semantic Conventions
5353

54-
This package uses `@opentelemetry/semantic-conventions` version `1.24+`, which implements Semantic Convention [Version 1.7.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.7.0/semantic_conventions/README.md)
55-
5654
Attributes collected:
5755

5856
| Attribute | Short Description |
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors, Aspecto
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
export const ATTR_DB_NAME = 'db.name' as const;
18+
export const ATTR_DB_OPERATION = 'db.operation' as const;
19+
export const ATTR_DB_SQL_TABLE = 'db.sql.table' as const;
20+
export const ATTR_DB_STATEMENT = 'db.statement' as const;
21+
export const ATTR_DB_SYSTEM = 'db.system' as const;
22+
export const ATTR_DB_USER = 'db.user' as const;
23+
export const ATTR_NET_PEER_NAME = 'net.peer.name' as const;
24+
export const ATTR_NET_PEER_PORT = 'net.peer.port' as const;

plugins/node/instrumentation-typeorm/src/typeorm.ts

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ import {
2222
} from '@opentelemetry/api';
2323
import { suppressTracing } from '@opentelemetry/core';
2424
import {
25-
SEMATTRS_DB_NAME,
26-
SEMATTRS_DB_OPERATION,
27-
SEMATTRS_DB_SQL_TABLE,
28-
SEMATTRS_DB_STATEMENT,
29-
SEMATTRS_DB_SYSTEM,
30-
SEMATTRS_DB_USER,
31-
SEMATTRS_NET_PEER_NAME,
32-
SEMATTRS_NET_PEER_PORT,
33-
} from '@opentelemetry/semantic-conventions';
25+
ATTR_DB_NAME,
26+
ATTR_DB_OPERATION,
27+
ATTR_DB_SQL_TABLE,
28+
ATTR_DB_STATEMENT,
29+
ATTR_DB_SYSTEM,
30+
ATTR_DB_USER,
31+
ATTR_NET_PEER_NAME,
32+
ATTR_NET_PEER_PORT,
33+
} from './semconv';
3434
import {
3535
ExtendedDatabaseAttribute,
3636
TypeormInstrumentationConfig,
@@ -218,28 +218,26 @@ export class TypeormInstrumentation extends InstrumentationBase<TypeormInstrumen
218218
}
219219
const connectionOptions = this?.connection?.options ?? {};
220220
const attributes: Record<string, any> = {
221-
[SEMATTRS_DB_SYSTEM]: connectionOptions.type,
222-
[SEMATTRS_DB_USER]: connectionOptions.username,
223-
[SEMATTRS_NET_PEER_NAME]: connectionOptions.host,
224-
[SEMATTRS_NET_PEER_PORT]: connectionOptions.port,
225-
[SEMATTRS_DB_NAME]: connectionOptions.database,
226-
[SEMATTRS_DB_OPERATION]: opName,
227-
[SEMATTRS_DB_STATEMENT]: JSON.stringify(
228-
buildStatement(original, args)
229-
),
221+
[ATTR_DB_SYSTEM]: connectionOptions.type,
222+
[ATTR_DB_USER]: connectionOptions.username,
223+
[ATTR_NET_PEER_NAME]: connectionOptions.host,
224+
[ATTR_NET_PEER_PORT]: connectionOptions.port,
225+
[ATTR_DB_NAME]: connectionOptions.database,
226+
[ATTR_DB_OPERATION]: opName,
227+
[ATTR_DB_STATEMENT]: JSON.stringify(buildStatement(original, args)),
230228
};
231229

232230
//ignore EntityMetadataNotFoundError
233231
try {
234232
if (this.metadata) {
235-
attributes[SEMATTRS_DB_SQL_TABLE] = this.metadata.tableName;
233+
attributes[ATTR_DB_SQL_TABLE] = this.metadata.tableName;
236234
} else {
237235
const entity = args[0];
238236
const name =
239237
typeof entity === 'object' ? entity?.constructor?.name : entity;
240238
const metadata = this.connection.getMetadata(name);
241239
if (metadata?.tableName) {
242-
attributes[SEMATTRS_DB_SQL_TABLE] = metadata.tableName;
240+
attributes[ATTR_DB_SQL_TABLE] = metadata.tableName;
243241
}
244242
}
245243
} catch {
@@ -291,14 +289,14 @@ export class TypeormInstrumentation extends InstrumentationBase<TypeormInstrumen
291289
// eslint-disable-next-line @typescript-eslint/no-explicit-any
292290
const connectionOptions: any = this.connection?.options;
293291
const attributes: Record<string, any> = {
294-
[SEMATTRS_DB_SYSTEM]: connectionOptions.type,
295-
[SEMATTRS_DB_USER]: connectionOptions.username,
296-
[SEMATTRS_NET_PEER_NAME]: connectionOptions.host,
297-
[SEMATTRS_NET_PEER_PORT]: connectionOptions.port,
298-
[SEMATTRS_DB_NAME]: connectionOptions.database,
299-
[SEMATTRS_DB_OPERATION]: operation,
300-
[SEMATTRS_DB_STATEMENT]: sql,
301-
[SEMATTRS_DB_SQL_TABLE]: mainTableName,
292+
[ATTR_DB_SYSTEM]: connectionOptions.type,
293+
[ATTR_DB_USER]: connectionOptions.username,
294+
[ATTR_NET_PEER_NAME]: connectionOptions.host,
295+
[ATTR_NET_PEER_PORT]: connectionOptions.port,
296+
[ATTR_DB_NAME]: connectionOptions.database,
297+
[ATTR_DB_OPERATION]: operation,
298+
[ATTR_DB_STATEMENT]: sql,
299+
[ATTR_DB_SQL_TABLE]: mainTableName,
302300
};
303301
if (self.getConfig().enhancedDatabaseReporting) {
304302
try {
@@ -348,13 +346,13 @@ export class TypeormInstrumentation extends InstrumentationBase<TypeormInstrumen
348346
// eslint-disable-next-line @typescript-eslint/no-explicit-any
349347
const connectionOptions: any = this.options;
350348
const attributes = {
351-
[SEMATTRS_DB_SYSTEM]: connectionOptions.type,
352-
[SEMATTRS_DB_USER]: connectionOptions.username,
353-
[SEMATTRS_NET_PEER_NAME]: connectionOptions.host,
354-
[SEMATTRS_NET_PEER_PORT]: connectionOptions.port,
355-
[SEMATTRS_DB_NAME]: connectionOptions.database,
356-
[SEMATTRS_DB_OPERATION]: operation,
357-
[SEMATTRS_DB_STATEMENT]: sql,
349+
[ATTR_DB_SYSTEM]: connectionOptions.type,
350+
[ATTR_DB_USER]: connectionOptions.username,
351+
[ATTR_NET_PEER_NAME]: connectionOptions.host,
352+
[ATTR_NET_PEER_PORT]: connectionOptions.port,
353+
[ATTR_DB_NAME]: connectionOptions.database,
354+
[ATTR_DB_OPERATION]: operation,
355+
[ATTR_DB_STATEMENT]: sql,
358356
};
359357

360358
const span: Span = self.tracer.startSpan(`TypeORM ${operation}`, {

plugins/node/instrumentation-typeorm/test/Connection.test.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@
1616
import * as assert from 'assert';
1717
import { SpanStatusCode } from '@opentelemetry/api';
1818
import {
19-
SEMATTRS_DB_SYSTEM,
20-
SEMATTRS_DB_NAME,
21-
SEMATTRS_DB_OPERATION,
22-
SEMATTRS_DB_STATEMENT,
23-
} from '@opentelemetry/semantic-conventions';
19+
ATTR_DB_SYSTEM,
20+
ATTR_DB_NAME,
21+
ATTR_DB_OPERATION,
22+
ATTR_DB_STATEMENT,
23+
} from '../src/semconv';
2424
import { TypeormInstrumentation } from '../src';
2525
import {
2626
getTestSpans,
@@ -56,10 +56,10 @@ describe('Connection', () => {
5656
assert.strictEqual(typeOrmSpans.length, 1);
5757
assert.strictEqual(typeOrmSpans[0].status.code, SpanStatusCode.UNSET);
5858
const attributes = typeOrmSpans[0].attributes;
59-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], options.type);
60-
assert.strictEqual(attributes[SEMATTRS_DB_NAME], options.database);
61-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'raw query');
62-
assert.strictEqual(attributes[SEMATTRS_DB_STATEMENT], query);
59+
assert.strictEqual(attributes[ATTR_DB_SYSTEM], options.type);
60+
assert.strictEqual(attributes[ATTR_DB_NAME], options.database);
61+
assert.strictEqual(attributes[ATTR_DB_OPERATION], 'raw query');
62+
assert.strictEqual(attributes[ATTR_DB_STATEMENT], query);
6363
await connection.close();
6464
});
6565
});

plugins/node/instrumentation-typeorm/test/EntityManager.test.ts

Lines changed: 34 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
import * as assert from 'assert';
1717
import { SpanStatusCode } from '@opentelemetry/api';
1818
import {
19-
SEMATTRS_DB_SQL_TABLE,
20-
SEMATTRS_DB_SYSTEM,
21-
SEMATTRS_DB_NAME,
22-
SEMATTRS_DB_OPERATION,
23-
SEMATTRS_DB_STATEMENT,
24-
} from '@opentelemetry/semantic-conventions';
19+
ATTR_DB_SQL_TABLE,
20+
ATTR_DB_SYSTEM,
21+
ATTR_DB_NAME,
22+
ATTR_DB_OPERATION,
23+
ATTR_DB_STATEMENT,
24+
} from '../src/semconv';
2525
import { TypeormInstrumentation } from '../src';
2626
import {
2727
getTestSpans,
@@ -56,12 +56,12 @@ describe('EntityManager', () => {
5656
assert.strictEqual(typeOrmSpans.length, 1);
5757
assert.strictEqual(typeOrmSpans[0].status.code, SpanStatusCode.UNSET);
5858
const attributes = typeOrmSpans[0].attributes;
59-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'user');
60-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], options.type);
61-
assert.strictEqual(attributes[SEMATTRS_DB_NAME], options.database);
62-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'save');
59+
assert.strictEqual(attributes[ATTR_DB_SQL_TABLE], 'user');
60+
assert.strictEqual(attributes[ATTR_DB_SYSTEM], options.type);
61+
assert.strictEqual(attributes[ATTR_DB_NAME], options.database);
62+
assert.strictEqual(attributes[ATTR_DB_OPERATION], 'save');
6363
assert.strictEqual(
64-
attributes[SEMATTRS_DB_STATEMENT],
64+
attributes[ATTR_DB_STATEMENT],
6565
JSON.stringify({ targetOrEntity: user })
6666
);
6767
await connection.close();
@@ -78,12 +78,12 @@ describe('EntityManager', () => {
7878
assert.strictEqual(typeOrmSpans.length, 1);
7979
assert.strictEqual(typeOrmSpans[0].status.code, SpanStatusCode.UNSET);
8080
const attributes = typeOrmSpans[0].attributes;
81-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'user');
82-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], options.type);
83-
assert.strictEqual(attributes[SEMATTRS_DB_NAME], options.database);
84-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'save');
81+
assert.strictEqual(attributes[ATTR_DB_SQL_TABLE], 'user');
82+
assert.strictEqual(attributes[ATTR_DB_SYSTEM], options.type);
83+
assert.strictEqual(attributes[ATTR_DB_NAME], options.database);
84+
assert.strictEqual(attributes[ATTR_DB_OPERATION], 'save');
8585
assert.strictEqual(
86-
attributes[SEMATTRS_DB_STATEMENT],
86+
attributes[ATTR_DB_STATEMENT],
8787
JSON.stringify({ targetOrEntity: user })
8888
);
8989
await connection.close();
@@ -102,12 +102,12 @@ describe('EntityManager', () => {
102102
assert.strictEqual(typeOrmSpans.length, 2);
103103
assert.strictEqual(typeOrmSpans[1].status.code, SpanStatusCode.UNSET);
104104
const attributes = typeOrmSpans[1].attributes;
105-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'user');
106-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], options.type);
107-
assert.strictEqual(attributes[SEMATTRS_DB_NAME], options.database);
108-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'remove');
105+
assert.strictEqual(attributes[ATTR_DB_SQL_TABLE], 'user');
106+
assert.strictEqual(attributes[ATTR_DB_SYSTEM], options.type);
107+
assert.strictEqual(attributes[ATTR_DB_NAME], options.database);
108+
assert.strictEqual(attributes[ATTR_DB_OPERATION], 'remove');
109109
assert.strictEqual(
110-
attributes[SEMATTRS_DB_STATEMENT],
110+
attributes[ATTR_DB_STATEMENT],
111111
JSON.stringify({
112112
targetOrEntity: { id: 56, firstName: 'aspecto', lastName: 'io' },
113113
})
@@ -128,12 +128,12 @@ describe('EntityManager', () => {
128128
assert.strictEqual(typeOrmSpans.length, 2);
129129
assert.strictEqual(typeOrmSpans[1].status.code, SpanStatusCode.UNSET);
130130
const attributes = typeOrmSpans[1].attributes;
131-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'user');
132-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], options.type);
133-
assert.strictEqual(attributes[SEMATTRS_DB_NAME], options.database);
134-
assert.strictEqual(attributes[SEMATTRS_DB_OPERATION], 'update');
131+
assert.strictEqual(attributes[ATTR_DB_SQL_TABLE], 'user');
132+
assert.strictEqual(attributes[ATTR_DB_SYSTEM], options.type);
133+
assert.strictEqual(attributes[ATTR_DB_NAME], options.database);
134+
assert.strictEqual(attributes[ATTR_DB_OPERATION], 'update');
135135
assert.strictEqual(
136-
attributes[SEMATTRS_DB_STATEMENT],
136+
attributes[ATTR_DB_STATEMENT],
137137
JSON.stringify({ target: 'User', criteria: 56, partialEntity })
138138
);
139139
await connection.close();
@@ -184,29 +184,23 @@ describe('EntityManager', () => {
184184
const sqlite2Span = spans[1];
185185

186186
assert.strictEqual(
187-
sqlite1Span.attributes[SEMATTRS_DB_SYSTEM],
187+
sqlite1Span.attributes[ATTR_DB_SYSTEM],
188188
defaultOptions.type
189189
);
190190
assert.strictEqual(
191-
sqlite1Span.attributes[SEMATTRS_DB_NAME],
191+
sqlite1Span.attributes[ATTR_DB_NAME],
192192
defaultOptions.database
193193
);
194-
assert.strictEqual(sqlite1Span.attributes[SEMATTRS_DB_OPERATION], 'save');
195-
assert.strictEqual(sqlite1Span.attributes[SEMATTRS_DB_SQL_TABLE], 'user');
194+
assert.strictEqual(sqlite1Span.attributes[ATTR_DB_OPERATION], 'save');
195+
assert.strictEqual(sqlite1Span.attributes[ATTR_DB_SQL_TABLE], 'user');
196196

197+
assert.strictEqual(sqlite2Span.attributes[ATTR_DB_SYSTEM], options2.type);
197198
assert.strictEqual(
198-
sqlite2Span.attributes[SEMATTRS_DB_SYSTEM],
199-
options2.type
200-
);
201-
assert.strictEqual(
202-
sqlite2Span.attributes[SEMATTRS_DB_NAME],
199+
sqlite2Span.attributes[ATTR_DB_NAME],
203200
options2.database
204201
);
205-
assert.strictEqual(
206-
sqlite2Span.attributes[SEMATTRS_DB_OPERATION],
207-
'remove'
208-
);
209-
assert.strictEqual(sqlite2Span.attributes[SEMATTRS_DB_SQL_TABLE], 'user');
202+
assert.strictEqual(sqlite2Span.attributes[ATTR_DB_OPERATION], 'remove');
203+
assert.strictEqual(sqlite2Span.attributes[ATTR_DB_SQL_TABLE], 'user');
210204
await sqlite1.close();
211205
await sqlite2.close();
212206
});

plugins/node/instrumentation-typeorm/test/QueryBuilder.test.ts

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
import * as assert from 'assert';
1717
import { SpanStatusCode } from '@opentelemetry/api';
1818
import {
19-
SEMATTRS_DB_NAME,
20-
SEMATTRS_DB_SQL_TABLE,
21-
SEMATTRS_DB_STATEMENT,
22-
SEMATTRS_DB_SYSTEM,
23-
SEMATTRS_DB_USER,
24-
SEMATTRS_NET_PEER_NAME,
25-
SEMATTRS_NET_PEER_PORT,
26-
} from '@opentelemetry/semantic-conventions';
19+
ATTR_DB_NAME,
20+
ATTR_DB_SQL_TABLE,
21+
ATTR_DB_STATEMENT,
22+
ATTR_DB_SYSTEM,
23+
ATTR_DB_USER,
24+
ATTR_NET_PEER_NAME,
25+
ATTR_NET_PEER_PORT,
26+
} from '../src/semconv';
2727
import { TypeormInstrumentation } from '../src';
2828
import {
2929
getTestSpans,
@@ -60,26 +60,14 @@ describe('QueryBuilder', () => {
6060
assert.strictEqual(typeOrmSpans.length, 1);
6161
assert.strictEqual(typeOrmSpans[0].status.code, SpanStatusCode.UNSET);
6262
const attributes = typeOrmSpans[0].attributes;
63-
assert.strictEqual(attributes[SEMATTRS_DB_SYSTEM], connectionOptions.type);
63+
assert.strictEqual(attributes[ATTR_DB_SYSTEM], connectionOptions.type);
64+
assert.strictEqual(attributes[ATTR_DB_USER], connectionOptions.username);
65+
assert.strictEqual(attributes[ATTR_NET_PEER_NAME], connectionOptions.host);
66+
assert.strictEqual(attributes[ATTR_NET_PEER_PORT], connectionOptions.port);
67+
assert.strictEqual(attributes[ATTR_DB_NAME], connectionOptions.database);
68+
assert.strictEqual(attributes[ATTR_DB_SQL_TABLE], 'user');
6469
assert.strictEqual(
65-
attributes[SEMATTRS_DB_USER],
66-
connectionOptions.username
67-
);
68-
assert.strictEqual(
69-
attributes[SEMATTRS_NET_PEER_NAME],
70-
connectionOptions.host
71-
);
72-
assert.strictEqual(
73-
attributes[SEMATTRS_NET_PEER_PORT],
74-
connectionOptions.port
75-
);
76-
assert.strictEqual(
77-
attributes[SEMATTRS_DB_NAME],
78-
connectionOptions.database
79-
);
80-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'user');
81-
assert.strictEqual(
82-
attributes[SEMATTRS_DB_STATEMENT],
70+
attributes[ATTR_DB_STATEMENT],
8371
'SELECT "user"."id" AS "user_id", "user"."firstName" AS "user_firstName", "user"."lastName" AS "user_lastName" FROM "user" "user" WHERE "user"."id" = :userId'
8472
);
8573
await connection.close();

plugins/node/instrumentation-typeorm/test/Repository.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ const instrumentation = registerInstrumentationTesting(
2626

2727
import { defaultOptions, User } from './utils';
2828
import * as typeorm from 'typeorm';
29-
import { SEMATTRS_DB_SQL_TABLE } from '@opentelemetry/semantic-conventions';
29+
import { ATTR_DB_SQL_TABLE } from '../src/semconv';
3030

3131
describe('Repository', () => {
3232
beforeEach(() => {
@@ -46,7 +46,7 @@ describe('Repository', () => {
4646
assert.strictEqual(spans.length, 1);
4747
const span = spans[0];
4848
const attributes = span.attributes;
49-
assert.strictEqual(attributes[SEMATTRS_DB_SQL_TABLE], 'user');
50-
await connection.close();
49+
assert.strictEqual(attributes[ATTR_DB_SQL_TABLE], 'user');
50+
await connection.destroy();
5151
});
5252
});

0 commit comments

Comments
 (0)