16
16
17
17
import { BasePlugin , isWrapped } from '@opentelemetry/core' ;
18
18
import { CanonicalCode , Span , SpanKind } from '@opentelemetry/api' ;
19
- import * as mysqlTypes from 'mysql' ;
19
+ import type * as mysqlTypes from 'mysql' ;
20
20
import * as shimmer from 'shimmer' ;
21
- import { AttributeNames } from './enums' ;
22
- import { getConnectionAttributes , getSpanName } from './utils' ;
21
+ import { getConnectionAttributes , getDbStatement } from './utils' ;
23
22
import { VERSION } from './version' ;
23
+ import { DatabaseAttribute } from '@opentelemetry/semantic-conventions' ;
24
24
25
25
export class MysqlPlugin extends BasePlugin < typeof mysqlTypes > {
26
26
readonly supportedVersions = [ '2.*' ] ;
27
27
28
28
static readonly COMPONENT = 'mysql' ;
29
- static readonly DB_TYPE = 'sql' ;
30
29
31
30
static readonly COMMON_ATTRIBUTES = {
32
- [ AttributeNames . COMPONENT ] : MysqlPlugin . COMPONENT ,
33
- [ AttributeNames . DB_TYPE ] : MysqlPlugin . DB_TYPE ,
34
- [ AttributeNames . PEER_SERVICE ] : MysqlPlugin . COMPONENT ,
31
+ [ DatabaseAttribute . DB_SYSTEM ] : MysqlPlugin . COMPONENT ,
35
32
} ;
36
33
37
34
private _enabled = false ;
@@ -198,6 +195,8 @@ export class MysqlPlugin extends BasePlugin<typeof mysqlTypes> {
198
195
const thisPlugin = this ;
199
196
thisPlugin . _logger . debug ( 'MysqlPlugin: patched mysql query' ) ;
200
197
198
+ const format = this . _moduleExports . format ;
199
+
201
200
return function query (
202
201
query : string | mysqlTypes . Query | mysqlTypes . QueryOptions ,
203
202
_valuesOrCallback ?: unknown [ ] | mysqlTypes . queryCallback ,
@@ -208,28 +207,27 @@ export class MysqlPlugin extends BasePlugin<typeof mysqlTypes> {
208
207
return originalQuery . apply ( connection , arguments ) ;
209
208
}
210
209
211
- const spanName = getSpanName ( query ) ;
212
-
213
- const span = thisPlugin . _tracer . startSpan ( spanName , {
210
+ const span = thisPlugin . _tracer . startSpan ( `${ query } ` , {
214
211
kind : SpanKind . CLIENT ,
215
212
attributes : {
216
213
...MysqlPlugin . COMMON_ATTRIBUTES ,
217
214
...getConnectionAttributes ( connection . config ) ,
218
215
} ,
219
216
} ) ;
220
217
221
- if ( typeof query === 'string' ) {
222
- span . setAttribute ( AttributeNames . DB_STATEMENT , query ) ;
223
- } else if ( typeof query === 'object' ) {
224
- if ( query . sql ) {
225
- span . setAttribute ( AttributeNames . DB_STATEMENT , query . sql ) ;
226
- }
218
+ let values ;
227
219
228
- if ( query . values ) {
229
- span . setAttribute ( AttributeNames . MYSQL_VALUES , query . values ) ;
230
- }
220
+ if ( Array . isArray ( _valuesOrCallback ) ) {
221
+ values = _valuesOrCallback ;
222
+ } else if ( arguments [ 2 ] ) {
223
+ values = [ _valuesOrCallback ] ;
231
224
}
232
225
226
+ span . setAttribute (
227
+ DatabaseAttribute . DB_STATEMENT ,
228
+ getDbStatement ( query , format , values )
229
+ ) ;
230
+
233
231
if ( arguments . length === 1 ) {
234
232
const streamableQuery : mysqlTypes . Query = originalQuery . apply (
235
233
connection ,
@@ -251,11 +249,6 @@ export class MysqlPlugin extends BasePlugin<typeof mysqlTypes> {
251
249
if ( typeof arguments [ 1 ] === 'function' ) {
252
250
shimmer . wrap ( arguments , 1 , thisPlugin . _patchCallbackQuery ( span ) ) ;
253
251
} else if ( typeof arguments [ 2 ] === 'function' ) {
254
- if ( Array . isArray ( _valuesOrCallback ) ) {
255
- span . setAttribute ( AttributeNames . MYSQL_VALUES , _valuesOrCallback ) ;
256
- } else if ( arguments [ 2 ] ) {
257
- span . setAttribute ( AttributeNames . MYSQL_VALUES , [ _valuesOrCallback ] ) ;
258
- }
259
252
shimmer . wrap ( arguments , 2 , thisPlugin . _patchCallbackQuery ( span ) ) ;
260
253
}
261
254
0 commit comments