dd-trace 2.6.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/LICENSE-3rdparty.csv +1 -4
  2. package/index.d.ts +0 -7
  3. package/package.json +18 -24
  4. package/packages/datadog-instrumentations/index.js +16 -0
  5. package/packages/datadog-instrumentations/src/amqp10.js +33 -32
  6. package/packages/datadog-instrumentations/src/amqplib.js +16 -11
  7. package/packages/datadog-instrumentations/src/aws-sdk.js +104 -0
  8. package/packages/datadog-instrumentations/src/cassandra-driver.js +53 -51
  9. package/packages/datadog-instrumentations/src/connect.js +111 -0
  10. package/packages/datadog-instrumentations/src/couchbase.js +41 -39
  11. package/packages/datadog-instrumentations/src/cucumber.js +38 -38
  12. package/packages/datadog-instrumentations/src/dns.js +20 -19
  13. package/packages/datadog-instrumentations/src/elasticsearch.js +30 -32
  14. package/packages/datadog-instrumentations/src/express.js +27 -0
  15. package/packages/datadog-instrumentations/src/fastify.js +187 -0
  16. package/packages/datadog-instrumentations/src/find-my-way.js +30 -0
  17. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +100 -0
  18. package/packages/datadog-instrumentations/src/hapi.js +210 -0
  19. package/packages/datadog-instrumentations/src/http/client.js +44 -44
  20. package/packages/datadog-instrumentations/src/http/server.js +15 -13
  21. package/packages/datadog-instrumentations/src/ioredis.js +16 -17
  22. package/packages/datadog-instrumentations/src/jest.js +22 -17
  23. package/packages/datadog-instrumentations/src/kafkajs.js +112 -0
  24. package/packages/datadog-instrumentations/src/knex.js +20 -0
  25. package/packages/datadog-instrumentations/src/koa.js +159 -0
  26. package/packages/datadog-instrumentations/src/limitd-client.js +21 -0
  27. package/packages/datadog-instrumentations/src/memcached.js +14 -12
  28. package/packages/datadog-instrumentations/src/mocha.js +37 -39
  29. package/packages/datadog-instrumentations/src/moleculer/client.js +46 -0
  30. package/packages/datadog-instrumentations/src/moleculer/server.js +59 -0
  31. package/packages/datadog-instrumentations/src/moleculer.js +4 -0
  32. package/packages/datadog-instrumentations/src/mongodb-core.js +29 -33
  33. package/packages/datadog-instrumentations/src/mysql.js +30 -29
  34. package/packages/datadog-instrumentations/src/mysql2.js +8 -9
  35. package/packages/datadog-instrumentations/src/net.js +23 -24
  36. package/packages/datadog-instrumentations/src/oracledb.js +128 -0
  37. package/packages/datadog-instrumentations/src/paperplane.js +77 -0
  38. package/packages/datadog-instrumentations/src/pg.js +32 -32
  39. package/packages/datadog-instrumentations/src/redis.js +49 -47
  40. package/packages/datadog-instrumentations/src/restify.js +58 -0
  41. package/packages/datadog-instrumentations/src/rhea.js +52 -50
  42. package/packages/datadog-instrumentations/src/router.js +177 -0
  43. package/packages/datadog-instrumentations/src/sharedb.js +20 -20
  44. package/packages/datadog-instrumentations/src/tedious.js +19 -19
  45. package/packages/datadog-plugin-amqp10/src/index.js +2 -7
  46. package/packages/datadog-plugin-amqplib/src/index.js +1 -2
  47. package/packages/datadog-plugin-aws-sdk/src/base.js +146 -0
  48. package/packages/datadog-plugin-aws-sdk/src/index.js +16 -106
  49. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +4 -2
  50. package/packages/datadog-plugin-aws-sdk/src/services/default.js +7 -0
  51. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +3 -1
  52. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +5 -4
  53. package/packages/datadog-plugin-aws-sdk/src/services/index.js +12 -0
  54. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +4 -3
  55. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -3
  56. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -1
  57. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -1
  58. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +4 -3
  59. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +45 -6
  60. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -5
  61. package/packages/datadog-plugin-connect/src/index.js +10 -114
  62. package/packages/datadog-plugin-couchbase/src/index.js +3 -4
  63. package/packages/datadog-plugin-cucumber/src/index.js +1 -9
  64. package/packages/datadog-plugin-dns/src/index.js +15 -5
  65. package/packages/datadog-plugin-elasticsearch/src/index.js +1 -5
  66. package/packages/datadog-plugin-express/src/index.js +11 -25
  67. package/packages/datadog-plugin-fastify/src/index.js +17 -4
  68. package/packages/datadog-plugin-find-my-way/src/index.js +20 -0
  69. package/packages/datadog-plugin-google-cloud-pubsub/src/index.js +56 -111
  70. package/packages/datadog-plugin-hapi/src/index.js +34 -3
  71. package/packages/datadog-plugin-http/src/client.js +1 -3
  72. package/packages/datadog-plugin-http/src/server.js +2 -6
  73. package/packages/datadog-plugin-jest/src/index.js +2 -3
  74. package/packages/datadog-plugin-kafkajs/src/index.js +61 -91
  75. package/packages/datadog-plugin-koa/src/index.js +12 -164
  76. package/packages/datadog-plugin-memcached/src/index.js +1 -5
  77. package/packages/datadog-plugin-mocha/src/index.js +3 -7
  78. package/packages/datadog-plugin-moleculer/src/client.js +34 -44
  79. package/packages/datadog-plugin-moleculer/src/index.js +32 -3
  80. package/packages/datadog-plugin-moleculer/src/server.js +28 -50
  81. package/packages/datadog-plugin-mongodb-core/src/index.js +1 -5
  82. package/packages/datadog-plugin-mysql/src/index.js +1 -5
  83. package/packages/datadog-plugin-net/src/index.js +3 -7
  84. package/packages/datadog-plugin-oracledb/src/index.js +34 -100
  85. package/packages/datadog-plugin-paperplane/src/index.js +14 -100
  86. package/packages/datadog-plugin-paperplane/src/logger.js +11 -0
  87. package/packages/datadog-plugin-paperplane/src/server.js +24 -0
  88. package/packages/datadog-plugin-pg/src/index.js +1 -5
  89. package/packages/datadog-plugin-redis/src/index.js +1 -5
  90. package/packages/datadog-plugin-restify/src/index.js +13 -75
  91. package/packages/datadog-plugin-rhea/src/index.js +1 -5
  92. package/packages/datadog-plugin-router/src/index.js +67 -164
  93. package/packages/datadog-plugin-sharedb/src/index.js +1 -5
  94. package/packages/datadog-plugin-tedious/src/index.js +1 -5
  95. package/packages/datadog-plugin-web/src/index.js +20 -0
  96. package/packages/dd-trace/lib/version.js +1 -1
  97. package/packages/dd-trace/src/appsec/callbacks/ddwaf.js +8 -2
  98. package/packages/dd-trace/src/appsec/reporter.js +4 -0
  99. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +3 -1
  100. package/packages/dd-trace/src/plugin_manager.js +13 -7
  101. package/packages/dd-trace/src/plugins/index.js +1 -2
  102. package/packages/dd-trace/src/plugins/log_plugin.js +8 -4
  103. package/packages/dd-trace/src/plugins/plugin.js +8 -8
  104. package/packages/dd-trace/src/plugins/util/test.js +5 -1
  105. package/packages/dd-trace/src/plugins/util/web.js +40 -12
  106. package/packages/dd-trace/src/profiling/config.js +8 -8
  107. package/packages/dd-trace/src/profiling/index.js +4 -4
  108. package/packages/dd-trace/src/profiling/profilers/{heap.js → space.js} +2 -2
  109. package/packages/dd-trace/src/profiling/profilers/{cpu.js → wall.js} +2 -2
  110. package/scripts/install_plugin_modules.js +23 -11
  111. package/packages/datadog-plugin-aws-sdk/src/helpers.js +0 -103
  112. package/packages/datadog-plugin-fastify/src/fastify.js +0 -198
  113. package/packages/datadog-plugin-fastify/src/find-my-way.js +0 -37
  114. package/packages/datadog-plugin-hapi/src/route.js +0 -75
  115. package/packages/datadog-plugin-hapi/src/server.js +0 -204
  116. package/packages/datadog-plugin-knex/src/index.js +0 -23
  117. package/packages/datadog-plugin-limitd-client/src/index.js +0 -30
  118. package/scripts/postpublish.js +0 -24
@@ -30,11 +30,9 @@ class NetPlugin extends Plugin {
30
30
  this.enter(span, store)
31
31
  })
32
32
 
33
- this.addSub(`apm:net:ipc:end`, this.exit.bind(this))
34
-
35
33
  this.addSub(`apm:net:ipc:error`, errorHandler)
36
34
 
37
- this.addSub(`apm:net:ipc:async-end`, defaultAsyncEnd)
35
+ this.addSub(`apm:net:ipc:finish`, defaultFinish)
38
36
 
39
37
  this.addSub(`apm:net:tcp:start`, ({ options }) => {
40
38
  const store = storage.getStore()
@@ -62,11 +60,9 @@ class NetPlugin extends Plugin {
62
60
  this.enter(span, store)
63
61
  })
64
62
 
65
- this.addSub(`apm:net:tcp:end`, this.exit.bind(this))
66
-
67
63
  this.addSub(`apm:net:tcp:error`, errorHandler)
68
64
 
69
- this.addSub(`apm:net:tcp:async-end`, defaultAsyncEnd)
65
+ this.addSub(`apm:net:tcp:finish`, defaultFinish)
70
66
 
71
67
  this.addSub(`apm:net:tcp:connection`, ({ socket }) => {
72
68
  const span = storage.getStore().span
@@ -78,7 +74,7 @@ class NetPlugin extends Plugin {
78
74
  }
79
75
  }
80
76
 
81
- function defaultAsyncEnd () {
77
+ function defaultFinish () {
82
78
  storage.getStore().span.finish()
83
79
  }
84
80
 
@@ -1,105 +1,54 @@
1
1
  'use strict'
2
2
 
3
+ const Plugin = require('../../dd-trace/src/plugins/plugin')
4
+ const { storage } = require('../../datadog-core')
3
5
  const analyticsSampler = require('../../dd-trace/src/analytics_sampler')
4
6
 
5
- const connectionAttributes = new WeakMap()
6
- const poolAttributes = new WeakMap()
7
+ class OracledbPlugin extends Plugin {
8
+ static get name () {
9
+ return 'oracledb'
10
+ }
11
+
12
+ constructor (...args) {
13
+ super(...args)
7
14
 
8
- function createWrapExecute (tracer, config) {
9
- return function wrapExecute (execute) {
10
- return function executeWithTrace (dbQuery, ...args) {
11
- const connAttrs = connectionAttributes.get(this)
12
- const service = getServiceName(tracer, config, connAttrs)
15
+ this.addSub('apm:oracledb:execute:start', ({ query, connAttrs }) => {
16
+ const service = getServiceName(this.tracer, this.config, connAttrs)
13
17
  const connectStringObj = new URL('http://' + connAttrs.connectString)
14
18
  const tags = {
15
19
  'span.kind': 'client',
16
20
  'span.type': 'sql',
17
- 'sql.query': dbQuery,
21
+ 'sql.query': query,
18
22
  'db.instance': connectStringObj.pathname.substring(1),
19
23
  'db.hostname': connectStringObj.hostname,
20
- 'db.user': config.user,
24
+ 'db.user': this.config.user,
21
25
  'db.port': connectStringObj.port,
22
- 'resource.name': dbQuery,
26
+ 'resource.name': query,
23
27
  'service.name': service
24
28
  }
29
+ const store = storage.getStore()
30
+ const childOf = store ? store.span : store
31
+ const span = this.tracer.startSpan('oracle.query', {
32
+ childOf,
33
+ tags
34
+ })
35
+ analyticsSampler.sample(span, this.config.measured)
36
+ this.enter(span, store)
37
+ })
25
38
 
26
- return tracer.wrap('oracle.query', { tags }, function (...args) {
27
- const span = tracer.scope().active()
28
-
29
- analyticsSampler.sample(span, config.measured)
30
-
31
- return execute.apply(this, args)
32
- }).apply(this, arguments)
33
- }
34
- }
35
- }
36
-
37
- function createWrapGetConnection (tracer, config) {
38
- return function wrapGetConnection (getConnection) {
39
- return function getConnectionWithTrace (connAttrs, callback) {
40
- if (callback) {
41
- arguments[1] = (err, connection) => {
42
- if (connection) {
43
- connectionAttributes.set(connection, connAttrs)
44
- }
45
- callback(err, connection)
46
- }
47
-
48
- getConnection.apply(this, arguments)
49
- } else {
50
- return getConnection.apply(this, arguments).then((connection) => {
51
- connectionAttributes.set(connection, connAttrs)
52
- return connection
53
- })
54
- }
55
- }
56
- }
57
- }
58
-
59
- function createWrapCreatePool (tracer, config) {
60
- return function wrapCreatePool (createPool) {
61
- return function createPoolWithTrace (poolAttrs, callback) {
62
- if (callback) {
63
- arguments[1] = (err, pool) => {
64
- if (pool) {
65
- poolAttributes.set(pool, poolAttrs)
66
- }
67
- callback(err, pool)
68
- }
69
-
70
- createPool.apply(this, arguments)
71
- } else {
72
- return createPool.apply(this, arguments).then((pool) => {
73
- poolAttributes.set(pool, poolAttrs)
74
- return pool
75
- })
39
+ this.addSub('apm:oracledb:execute:error', err => {
40
+ const store = storage.getStore()
41
+ if (store && store.span) {
42
+ store.span.setTag('error', err)
76
43
  }
77
- }
78
- }
79
- }
44
+ })
80
45
 
81
- function createWrapPoolGetConnection (tracer, config) {
82
- return function wrapPoolGetConnection (getConnection) {
83
- return function poolGetConnectionWithTrace () {
84
- let callback
85
- if (typeof arguments[arguments.length - 1] === 'function') {
86
- callback = arguments[arguments.length - 1]
87
- }
88
- if (callback) {
89
- arguments[arguments.length - 1] = (err, connection) => {
90
- if (connection) {
91
- connectionAttributes.set(connection, poolAttributes.get(this))
92
- }
93
- callback(err, connection)
94
- }
95
- getConnection.apply(this, arguments)
96
- } else {
97
- return getConnection.apply(this, arguments).then((connection) => {
98
- connectionAttributes.set(connection, poolAttributes.get(this))
99
- return connection
100
- })
46
+ this.addSub('apm:oracledb:execute:finish', () => {
47
+ const store = storage.getStore()
48
+ if (store && store.span) {
49
+ store.span.finish()
101
50
  }
102
- }
51
+ })
103
52
  }
104
53
  }
105
54
 
@@ -113,19 +62,4 @@ function getServiceName (tracer, config, connAttrs) {
113
62
  }
114
63
  }
115
64
 
116
- module.exports = {
117
- name: 'oracledb',
118
- versions: ['5'],
119
- patch (oracledb, tracer, config) {
120
- this.wrap(oracledb.Connection.prototype, 'execute', createWrapExecute(tracer, config))
121
- this.wrap(oracledb, 'getConnection', createWrapGetConnection(tracer, config))
122
- this.wrap(oracledb, 'createPool', createWrapCreatePool(tracer, config))
123
- this.wrap(oracledb.Pool.prototype, 'getConnection', createWrapPoolGetConnection(tracer, config))
124
- },
125
- unpatch (oracledb) {
126
- this.unwrap(oracledb.Connection.prototype, 'execute')
127
- this.unwrap(oracledb, 'getConnection')
128
- this.unwrap(oracledb, 'createPool')
129
- this.unwrap(oracledb.Pool.prototype, 'getConnection')
130
- }
131
- }
65
+ module.exports = OracledbPlugin
@@ -1,111 +1,25 @@
1
1
  'use strict'
2
2
 
3
- const web = require('../../dd-trace/src/plugins/util/web')
3
+ const Plugin = require('../../dd-trace/src/plugins/plugin')
4
+ const PaperplaneLoggerPlugin = require('./logger')
5
+ const PaperplaneServerPlugin = require('./server')
4
6
 
5
- const traceRoute = handler => req => {
6
- const { original, route } = req
7
-
8
- if (web.active(original)) {
9
- web.enterRoute(original, route)
7
+ class PaperplanePlugin extends Plugin {
8
+ static get name () {
9
+ return 'paperplane'
10
10
  }
11
11
 
12
- return handler(req)
13
- }
14
-
15
- const wrapLogger = tracer => logger => record => {
16
- const span = tracer.scope().active()
12
+ constructor (...args) {
13
+ super(...args)
17
14
 
18
- if (!span) return logger(record)
19
-
20
- const correlation = {
21
- dd: {
22
- trace_id: span.context().toTraceId(),
23
- span_id: span.context().toSpanId()
24
- }
15
+ this.server = new PaperplaneServerPlugin(...args)
16
+ this.logger = new PaperplaneLoggerPlugin(...args)
25
17
  }
26
18
 
27
- record = record instanceof Error
28
- ? Object.assign(record, correlation)
29
- : Object.assign({}, record, correlation)
30
-
31
- return logger(record)
32
- }
33
-
34
- const wrapMount = (tracer, config) => mount => opts => {
35
- const handler = mount(opts)
36
-
37
- const traced = (req, res) =>
38
- web.instrument(
39
- tracer, config, req, res, 'paperplane.request',
40
- () => handler(req, res)
41
- )
42
-
43
- return traced
44
- }
45
-
46
- const wrapRoutes = tracer => routes => handlers => {
47
- const traced = {}
48
-
49
- for (const route in handlers) {
50
- traced[route] = traceRoute(handlers[route])
19
+ configure (config) {
20
+ this.server.configure(config)
21
+ this.logger.configure(config)
51
22
  }
52
-
53
- return routes(traced)
54
23
  }
55
24
 
56
- const nodeMajor = Number(process.versions.node.split('.')[0])
57
- const mainVersionRange = nodeMajor <= 12 ? ['>=2.3.2'] : nodeMajor <= 14 ? ['>=3.1.1'] : []
58
-
59
- module.exports = [
60
- {
61
- name: 'paperplane',
62
- versions: mainVersionRange,
63
- file: 'lib/logger.js',
64
- patch (exports, tracer) {
65
- if (tracer._logInjection) {
66
- this.wrap(exports, 'logger', wrapLogger(tracer))
67
- }
68
- },
69
- unpatch (exports) {
70
- this.unwrap(exports, 'logger')
71
- }
72
- },
73
- {
74
- name: 'paperplane',
75
- versions: mainVersionRange,
76
- file: 'lib/mount.js',
77
- patch (exports, tracer, config) {
78
- config = web.normalizeConfig(config)
79
- this.wrap(exports, 'mount', wrapMount(tracer, config))
80
- },
81
- unpatch (exports) {
82
- this.unwrap(exports, 'mount')
83
- }
84
- },
85
- {
86
- name: 'paperplane',
87
- versions: mainVersionRange,
88
- file: 'lib/routes.js',
89
- patch (exports, tracer) {
90
- this.wrap(exports, 'routes', wrapRoutes(tracer))
91
- },
92
- unpatch (exports) {
93
- this.unwrap(exports, 'routes')
94
- }
95
- }
96
- ]
97
-
98
- if (nodeMajor <= 12) {
99
- module.exports.push({
100
- name: 'paperplane',
101
- versions: ['2.3.0 - 2.3.1'],
102
- patch (paperplane, tracer, config) {
103
- config = web.normalizeConfig(config)
104
- this.wrap(paperplane, 'mount', wrapMount(tracer, config))
105
- this.wrap(paperplane, 'routes', wrapRoutes(tracer))
106
- },
107
- unpatch (paperplane) {
108
- this.unwrap(paperplane, ['mount', 'routes'])
109
- }
110
- })
111
- }
25
+ module.exports = PaperplanePlugin
@@ -0,0 +1,11 @@
1
+ 'use strict'
2
+
3
+ const LogPlugin = require('../../dd-trace/src/plugins/log_plugin')
4
+
5
+ class PaperplaneLoggerPlugin extends LogPlugin {
6
+ static get name () {
7
+ return 'paperplane'
8
+ }
9
+ }
10
+
11
+ module.exports = PaperplaneLoggerPlugin
@@ -0,0 +1,24 @@
1
+ 'use strict'
2
+
3
+ const RouterPlugin = require('../../datadog-plugin-router/src')
4
+ const web = require('../../dd-trace/src/plugins/util/web')
5
+
6
+ class PaperplaneServerPlugin extends RouterPlugin {
7
+ static get name () {
8
+ return 'paperplane'
9
+ }
10
+
11
+ constructor (...args) {
12
+ super(...args)
13
+
14
+ this.addSub('apm:paperplane:request:handle', req => {
15
+ this.setFramework(req, 'paperplane', this.config)
16
+ })
17
+
18
+ this.addSub('apm:paperplane:request:route', ({ req, route }) => {
19
+ web.setRoute(req, route)
20
+ })
21
+ }
22
+ }
23
+
24
+ module.exports = PaperplaneServerPlugin
@@ -40,16 +40,12 @@ class PGPlugin extends Plugin {
40
40
  this.enter(span, store)
41
41
  })
42
42
 
43
- this.addSub(`apm:pg:query:end`, () => {
44
- this.exit()
45
- })
46
-
47
43
  this.addSub(`apm:pg:query:error`, err => {
48
44
  const span = storage.getStore().span
49
45
  span.setTag('error', err)
50
46
  })
51
47
 
52
- this.addSub(`apm:pg:query:async-end`, () => {
48
+ this.addSub(`apm:pg:query:finish`, () => {
53
49
  const span = storage.getStore().span
54
50
  span.finish()
55
51
  })
@@ -55,16 +55,12 @@ class RedisPlugin extends Plugin {
55
55
  this.enter(span, store)
56
56
  })
57
57
 
58
- this.addSub(`apm:${this.constructor.name}:command:end`, () => {
59
- this.exit()
60
- })
61
-
62
58
  this.addSub(`apm:${this.constructor.name}:command:error`, err => {
63
59
  const span = storage.getStore().span
64
60
  span.setTag('error', err)
65
61
  })
66
62
 
67
- this.addSub(`apm:${this.constructor.name}:command:async-end`, () => {
63
+ this.addSub(`apm:${this.constructor.name}:command:finish`, () => {
68
64
  const span = storage.getStore().span
69
65
  span.finish()
70
66
  })
@@ -1,86 +1,24 @@
1
1
  'use strict'
2
2
 
3
+ const RouterPlugin = require('../../datadog-plugin-router/src')
3
4
  const web = require('../../dd-trace/src/plugins/util/web')
4
- const handlers = ['use', 'pre']
5
- const methods = ['del', 'get', 'head', 'opts', 'post', 'put', 'patch']
6
5
 
7
- function createWrapSetupRequest (tracer, config, withRoute) {
8
- config = web.normalizeConfig(config)
9
-
10
- return function wrapSetupRequest (setupRequest) {
11
- return function setupRequestWithTrace (req, res) {
12
- return web.instrument(tracer, config, req, res, 'restify.request', () => {
13
- web.beforeEnd(req, () => {
14
- if (req.route && withRoute) {
15
- web.enterRoute(req, req.route.path)
16
- }
17
- })
18
-
19
- return setupRequest.apply(this, arguments)
20
- })
21
- }
22
- }
23
- }
24
-
25
- function createWrapMethod (tracer, config) {
26
- return function wrapMethod (method) {
27
- return function methodWithTrace (path) {
28
- const middleware = wrapMiddleware(Array.prototype.slice.call(arguments, 1))
29
-
30
- return method.apply(this, [path].concat(middleware))
31
- }
6
+ class RestifyPlugin extends RouterPlugin {
7
+ static get name () {
8
+ return 'restify'
32
9
  }
33
- }
34
-
35
- function createWrapHandler (tracer, config) {
36
- return function wrapMethod (method) {
37
- return function methodWithTrace () {
38
- return method.apply(this, wrapMiddleware(arguments))
39
- }
40
- }
41
- }
42
10
 
43
- function wrapMiddleware (middleware) {
44
- return Array.prototype.map.call(middleware, wrapFn)
45
- }
11
+ constructor (...args) {
12
+ super(...args)
46
13
 
47
- function wrapFn (fn) {
48
- if (Array.isArray(fn)) return wrapMiddleware(fn)
14
+ this.addSub('apm:restify:request:handle', ({ req }) => {
15
+ this.setFramework(req, 'restify', this.config)
16
+ })
49
17
 
50
- return function (req, res, next) {
51
- return web.reactivate(req, () => fn.apply(this, arguments))
18
+ this.addSub('apm:restify:request:route', ({ req, route }) => {
19
+ web.setRoute(req, route)
20
+ })
52
21
  }
53
22
  }
54
23
 
55
- module.exports = [
56
- {
57
- name: 'restify',
58
- versions: ['>=7'],
59
- file: 'lib/server.js',
60
- patch (Server, tracer, config) {
61
- this.wrap(Server.prototype, '_setupRequest', createWrapSetupRequest(tracer, config))
62
- this.wrap(Server.prototype, handlers, createWrapHandler(tracer, config))
63
- this.wrap(Server.prototype, methods, createWrapMethod(tracer, config))
64
- },
65
- unpatch (Server) {
66
- this.unwrap(Server.prototype, '_setupRequest')
67
- this.unwrap(Server.prototype, handlers)
68
- this.unwrap(Server.prototype, methods)
69
- }
70
- },
71
- {
72
- name: 'restify',
73
- versions: ['3 - 6'],
74
- file: 'lib/server.js',
75
- patch (Server, tracer, config) {
76
- this.wrap(Server.prototype, '_setupRequest', createWrapSetupRequest(tracer, config, true))
77
- this.wrap(Server.prototype, handlers, createWrapHandler(tracer, config))
78
- this.wrap(Server.prototype, methods, createWrapMethod(tracer, config))
79
- },
80
- unpatch (Server) {
81
- this.unwrap(Server.prototype, '_setupRequest')
82
- this.unwrap(Server.prototype, handlers)
83
- this.unwrap(Server.prototype, methods)
84
- }
85
- }
86
- ]
24
+ module.exports = RestifyPlugin
@@ -61,15 +61,11 @@ class RheaPlugin extends Plugin {
61
61
  storage.getStore().span.setTag('error', error)
62
62
  })
63
63
 
64
- this.addSub(`apm:rhea:async-end`, () => {
64
+ this.addSub(`apm:rhea:finish`, () => {
65
65
  const span = storage.getStore().span
66
66
  span.finish()
67
67
  })
68
68
 
69
- this.addSub(`apm:rhea:end`, () => {
70
- this.exit()
71
- })
72
-
73
69
  this.addSub(`apm:rhea:dispatch`, ({ state }) => {
74
70
  const span = storage.getStore().span
75
71
  span.setTag('amqp.delivery.state', state)