UNPKG

dd-trace

Version:

Datadog APM tracing client for JavaScript

59 lines (48 loc) 1.54 kB
'use strict' const Plugin = require('../../dd-trace/src/plugins/plugin') const { storage } = require('../../datadog-core') const analyticsSampler = require('../../dd-trace/src/analytics_sampler') class MySQLPlugin extends Plugin { static get name () { return 'mysql' } constructor (...args) { super(...args) this.addSub(`apm:${this.constructor.name}:query:start`, ({ sql, conf }) => { const store = storage.getStore() const childOf = store ? store.span : store const span = this.tracer.startSpan('mysql.query', { childOf, tags: { 'service.name': this.config.service || `${this.tracer._service}-mysql`, 'span.type': 'sql', 'span.kind': 'client', 'db.type': 'mysql', 'db.user': conf.user, 'out.host': conf.host, 'out.port': conf.port, 'resource.name': sql } }) if (conf.database) { span.setTag('db.name', conf.database) } analyticsSampler.sample(span, this.config.measured) this.enter(span, store) }) this.addSub(`apm:${this.constructor.name}:query:end`, () => { this.exit() }) this.addSub(`apm:${this.constructor.name}:query:error`, err => { if (err) { const span = storage.getStore().span span.setTag('error', err) } }) this.addSub(`apm:${this.constructor.name}:query:async-end`, () => { const span = storage.getStore().span span.finish() }) } } module.exports = MySQLPlugin