Skip to content

Commit

Permalink
Use composite plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
watson committed Oct 11, 2024
1 parent ec2975d commit 1054bc8
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 36 deletions.
33 changes: 21 additions & 12 deletions packages/datadog-plugin-code-origin/src/fastify.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
'use strict'

const { entryTag } = require('./tags')
const { entryTag } = require('./lib/tags')
const CodeOriginForSpansPlugin = require('./index')
const web = require('../../dd-trace/src/plugins/util/web')

const kCodeOriginForSpansTagsSym = Symbol('datadog.codeOriginForSpansTags')

module.exports = function (plugin) {
plugin.addSub('apm:fastify:request:handle', ({ req, routeConfig }) => {
const tags = routeConfig?.[kCodeOriginForSpansTagsSym]
if (!tags) return
const context = web.getContext(req)
context.span?.addTags(tags)
})
class FastifyCodeOriginForSpansPlugin extends CodeOriginForSpansPlugin {
static get id () {
return 'fastify-code-origin-for-spans'
}

plugin.addSub('apm:fastify:route:added', ({ routeOptions, onRoute }) => {
if (!routeOptions.config) routeOptions.config = {}
routeOptions.config[kCodeOriginForSpansTagsSym] = entryTag(onRoute)
})
instrument () {
this.addSub('apm:fastify:request:handle', ({ req, routeConfig }) => {
const tags = routeConfig?.[kCodeOriginForSpansTagsSym]
if (!tags) return
const context = web.getContext(req)
context.span?.addTags(tags)
})

this.addSub('apm:fastify:route:added', ({ routeOptions, onRoute }) => {
if (!routeOptions.config) routeOptions.config = {}
routeOptions.config[kCodeOriginForSpansTagsSym] = entryTag(onRoute)
})
}
}

module.exports = FastifyCodeOriginForSpansPlugin
14 changes: 10 additions & 4 deletions packages/datadog-plugin-code-origin/src/index.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
'use strict'

const fastify = require('./fastify')
const RouterPlugin = require('../../datadog-plugin-router/src')
const Plugin = require('../../dd-trace/src/plugins/plugin')

class CodeOriginForSpansPlugin extends RouterPlugin {
class CodeOriginForSpansPlugin extends Plugin {
static get id () {
return 'code-origin-for-spans'
}

constructor (...args) {
super(...args)
fastify(this)

if (this._tracerConfig.codeOriginForSpansEnabled) {
this.instrument()
}
}

instrument () {
throw new Error('Not implemented')
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict'

const { getUserLandFrames } = require('../../dd-trace/src/plugins/util/stacktrace')
const { getUserLandFrames } = require('../../../dd-trace/src/plugins/util/stacktrace')

const limit = Number(process.env._DD_CODE_ORIGIN_MAX_USER_FRAMES) || 8

Expand Down
22 changes: 10 additions & 12 deletions packages/datadog-plugin-fastify/src/index.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
'use strict'

const RouterPlugin = require('../../datadog-plugin-router/src')
const FastifyInstrumentationPlugin = require('./instrumentation')
const FastifyCodeOriginForSpansPlugin = require('../../datadog-plugin-code-origin/src/fastify')
const CompositePlugin = require('../../dd-trace/src/plugins/composite')

class FastifyPlugin extends RouterPlugin {
static get id () {
return 'fastify'
}

constructor (...args) {
super(...args)

this.addSub('apm:fastify:request:handle', ({ req }) => {
this.setFramework(req, 'fastify', this.config)
})
class FastifyPlugin extends CompositePlugin {
static get id () { return 'fastify' }
static get plugins () {
return {
instrumentation: FastifyInstrumentationPlugin,
codeOrigin: FastifyCodeOriginForSpansPlugin
}
}
}

Expand Down
19 changes: 19 additions & 0 deletions packages/datadog-plugin-fastify/src/instrumentation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
'use strict'

const RouterPlugin = require('../../datadog-plugin-router/src')

class FastifyInstrumentationPlugin extends RouterPlugin {
static get id () {
return 'fastify'
}

constructor (...args) {
super(...args)

this.addSub('apm:fastify:request:handle', ({ req }) => {
this.setFramework(req, 'fastify', this.config)
})
}
}

module.exports = FastifyInstrumentationPlugin
9 changes: 3 additions & 6 deletions packages/dd-trace/src/plugin_manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,14 @@ loadChannel.subscribe(({ name }) => {
// Globals
maybeEnable(require('../../datadog-plugin-fetch/src'))

// Feature plugins
maybeEnable(require('../../datadog-plugin-code-origin/src'))

function maybeEnable (Plugin) {
if (!Plugin || typeof Plugin !== 'function') return
if (!pluginClasses[Plugin.id]) {
const id = Plugin.id.toUpperCase().replace(/[^a-z0-9_]/ig, '_')
const disabled = isFalse(process.env[`DD_TRACE_${id}_ENABLED`]) || isFalse(process.env[`DD_${id}_ENABLED`])
const envName = `DD_TRACE_${Plugin.id.toUpperCase()}_ENABLED`
const enabled = process.env[envName.replace(/[^a-z0-9_]/ig, '_')]

// TODO: remove the need to load the plugin class in order to disable the plugin
if (disabled || disabledPlugins.has(Plugin.id)) {
if (isFalse(enabled) || disabledPlugins.has(Plugin.id)) {
log.debug(`Plugin "${Plugin.id}" was disabled via configuration option.`)

pluginClasses[Plugin.id] = null
Expand Down
1 change: 0 additions & 1 deletion packages/dd-trace/src/plugins/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ module.exports = {
get bunyan () { return require('../../../datadog-plugin-bunyan/src') },
get 'cassandra-driver' () { return require('../../../datadog-plugin-cassandra-driver/src') },
get child_process () { return require('../../../datadog-plugin-child_process/src') },
get 'code-origin' () { return require('../../../datadog-plugin-code-origin/src') },
get connect () { return require('../../../datadog-plugin-connect/src') },
get couchbase () { return require('../../../datadog-plugin-couchbase/src') },
get cypress () { return require('../../../datadog-plugin-cypress/src') },
Expand Down

0 comments on commit 1054bc8

Please sign in to comment.