1616
1717import { BasePlugin , isWrapped } from '@opentelemetry/core' ;
1818import { CanonicalCode , Span , SpanKind } from '@opentelemetry/api' ;
19- import * as mysqlTypes from 'mysql' ;
19+ import type * as mysqlTypes from 'mysql' ;
2020import * as shimmer from 'shimmer' ;
21- import { AttributeNames } from './enums' ;
22- import { getConnectionAttributes , getSpanName } from './utils' ;
21+ import { getConnectionAttributes , getDbStatement } from './utils' ;
2322import { VERSION } from './version' ;
23+ import { DatabaseAttribute } from '@opentelemetry/semantic-conventions' ;
2424
2525export class MysqlPlugin extends BasePlugin < typeof mysqlTypes > {
2626 readonly supportedVersions = [ '2.*' ] ;
2727
2828 static readonly COMPONENT = 'mysql' ;
29- static readonly DB_TYPE = 'sql' ;
3029
3130 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 ,
3532 } ;
3633
3734 private _enabled = false ;
@@ -198,6 +195,8 @@ export class MysqlPlugin extends BasePlugin<typeof mysqlTypes> {
198195 const thisPlugin = this ;
199196 thisPlugin . _logger . debug ( 'MysqlPlugin: patched mysql query' ) ;
200197
198+ const format = this . _moduleExports . format ;
199+
201200 return function query (
202201 query : string | mysqlTypes . Query | mysqlTypes . QueryOptions ,
203202 _valuesOrCallback ?: unknown [ ] | mysqlTypes . queryCallback ,
@@ -208,28 +207,27 @@ export class MysqlPlugin extends BasePlugin<typeof mysqlTypes> {
208207 return originalQuery . apply ( connection , arguments ) ;
209208 }
210209
211- const spanName = getSpanName ( query ) ;
212-
213- const span = thisPlugin . _tracer . startSpan ( spanName , {
210+ const span = thisPlugin . _tracer . startSpan ( `${ query } ` , {
214211 kind : SpanKind . CLIENT ,
215212 attributes : {
216213 ...MysqlPlugin . COMMON_ATTRIBUTES ,
217214 ...getConnectionAttributes ( connection . config ) ,
218215 } ,
219216 } ) ;
220217
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 ;
227219
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 ] ;
231224 }
232225
226+ span . setAttribute (
227+ DatabaseAttribute . DB_STATEMENT ,
228+ getDbStatement ( query , format , values )
229+ ) ;
230+
233231 if ( arguments . length === 1 ) {
234232 const streamableQuery : mysqlTypes . Query = originalQuery . apply (
235233 connection ,
@@ -251,11 +249,6 @@ export class MysqlPlugin extends BasePlugin<typeof mysqlTypes> {
251249 if ( typeof arguments [ 1 ] === 'function' ) {
252250 shimmer . wrap ( arguments , 1 , thisPlugin . _patchCallbackQuery ( span ) ) ;
253251 } 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- }
259252 shimmer . wrap ( arguments , 2 , thisPlugin . _patchCallbackQuery ( span ) ) ;
260253 }
261254
0 commit comments