From 03fa8800c04b8d0e01d80a511784d094ed0a1f61 Mon Sep 17 00:00:00 2001 From: Andrea Marziali Date: Thu, 22 Jun 2023 16:52:06 +0200 Subject: [PATCH] moleculer - service naming --- .../datadog-plugin-moleculer/src/client.js | 4 +- .../datadog-plugin-moleculer/src/server.js | 4 +- .../test/index.spec.js | 48 ++++++++++++++----- .../datadog-plugin-moleculer/test/naming.js | 24 ++++++++++ packages/dd-trace/src/plugins/client.js | 1 + packages/dd-trace/src/plugins/server.js | 2 + .../src/service-naming/schemas/v0/index.js | 3 +- .../src/service-naming/schemas/v0/web.js | 18 +++++++ .../src/service-naming/schemas/v1/index.js | 3 +- .../src/service-naming/schemas/v1/web.js | 18 +++++++ 10 files changed, 107 insertions(+), 18 deletions(-) create mode 100644 packages/datadog-plugin-moleculer/test/naming.js create mode 100644 packages/dd-trace/src/service-naming/schemas/v0/web.js create mode 100644 packages/dd-trace/src/service-naming/schemas/v1/web.js diff --git a/packages/datadog-plugin-moleculer/src/client.js b/packages/datadog-plugin-moleculer/src/client.js index 76b3895986c..4b99d5f4ad0 100644 --- a/packages/datadog-plugin-moleculer/src/client.js +++ b/packages/datadog-plugin-moleculer/src/client.js @@ -8,8 +8,8 @@ class MoleculerClientPlugin extends ClientPlugin { static get operation () { return 'call' } start ({ actionName, opts }) { - const span = this.startSpan('moleculer.call', { - service: this.config.service, + const span = this.startSpan(this.operationName(), { + service: this.config.service || this.serviceName(), resource: actionName, kind: 'client' }) diff --git a/packages/datadog-plugin-moleculer/src/server.js b/packages/datadog-plugin-moleculer/src/server.js index 070e8fd9cbe..98a667b4cc1 100644 --- a/packages/datadog-plugin-moleculer/src/server.js +++ b/packages/datadog-plugin-moleculer/src/server.js @@ -10,9 +10,9 @@ class MoleculerServerPlugin extends ServerPlugin { start ({ action, ctx, broker }) { const followsFrom = this.tracer.extract('text_map', ctx.meta) - this.startSpan('moleculer.action', { + this.startSpan(this.operationName(), { childOf: followsFrom || this.activeSpan, - service: this.config.service, + service: this.config.service || this.serviceName(), resource: action.name, kind: 'server', type: 'web', diff --git a/packages/datadog-plugin-moleculer/test/index.spec.js b/packages/datadog-plugin-moleculer/test/index.spec.js index 46089b2cde2..c92636547ab 100644 --- a/packages/datadog-plugin-moleculer/test/index.spec.js +++ b/packages/datadog-plugin-moleculer/test/index.spec.js @@ -4,6 +4,7 @@ const { expect } = require('chai') const getPort = require('get-port') const os = require('os') const agent = require('../../dd-trace/test/plugins/agent') +const namingSchema = require('./naming') const sort = trace => trace.sort((a, b) => a.start.toNumber() - b.start.toNumber()) @@ -54,8 +55,8 @@ describe('Plugin', () => { agent.use(traces => { const spans = sort(traces[0]) - expect(spans[0]).to.have.property('name', 'moleculer.action') - expect(spans[0]).to.have.property('service', 'test') + expect(spans[0]).to.have.property('name', namingSchema.server.opName) + expect(spans[0]).to.have.property('service', namingSchema.server.serviceName) expect(spans[0]).to.have.property('type', 'web') expect(spans[0]).to.have.property('resource', 'math.add') expect(spans[0].meta).to.have.property('span.kind', 'server') @@ -67,8 +68,8 @@ describe('Plugin', () => { expect(spans[0].meta).to.have.property('moleculer.node_id', `server-${process.pid}`) expect(spans[0].meta).to.have.property('component', 'moleculer') - expect(spans[1]).to.have.property('name', 'moleculer.action') - expect(spans[1]).to.have.property('service', 'test') + expect(spans[1]).to.have.property('name', namingSchema.server.opName) + expect(spans[1]).to.have.property('service', namingSchema.server.serviceName) expect(spans[1]).to.have.property('type', 'web') expect(spans[1]).to.have.property('resource', 'math.numerify') expect(spans[1].meta).to.have.property('span.kind', 'server') @@ -83,6 +84,11 @@ describe('Plugin', () => { broker.call('math.add', { a: 5, b: 3 }).catch(done) }) + withNamingSchema( + (done) => broker.call('math.add', { a: 5, b: 3 }).then(done, done), + () => namingSchema.server.opName, + () => namingSchema.server.serviceName + ) }) describe('with configuration', () => { @@ -103,6 +109,12 @@ describe('Plugin', () => { broker.call('math.add', { a: 5, b: 3 }).catch(done) }) + + withNamingSchema( + (done) => broker.call('math.add', { a: 5, b: 3 }).then(done, done), + () => namingSchema.server.opName, + () => 'custom' + ) }) }) @@ -117,8 +129,8 @@ describe('Plugin', () => { agent.use(traces => { const spans = sort(traces[0]) - expect(spans[0]).to.have.property('name', 'moleculer.call') - expect(spans[0]).to.have.property('service', 'test') + expect(spans[0]).to.have.property('name', namingSchema.client.opName) + expect(spans[0]).to.have.property('service', namingSchema.client.serviceName) expect(spans[0]).to.have.property('resource', 'math.add') expect(spans[0].meta).to.have.property('span.kind', 'client') expect(spans[0].meta).to.have.property('out.host', os.hostname()) @@ -133,6 +145,12 @@ describe('Plugin', () => { broker.call('math.add', { a: 5, b: 3 }).catch(done) }) + + withNamingSchema( + (done) => broker.call('math.add', { a: 5, b: 3 }).then(done, done), + () => namingSchema.client.opName, + () => namingSchema.client.serviceName + ) }) describe('with configuration', () => { @@ -153,6 +171,12 @@ describe('Plugin', () => { broker.call('math.add', { a: 5, b: 3 }).catch(done) }) + + withNamingSchema( + (done) => broker.call('math.add', { a: 5, b: 3 }).then(done, done), + () => namingSchema.client.opName, + () => 'custom' + ) }) }) @@ -169,7 +193,7 @@ describe('Plugin', () => { const clientPromise = agent.use(traces => { const spans = sort(traces[0]) - expect(spans[0]).to.have.property('name', 'moleculer.call') + expect(spans[0]).to.have.property('name', namingSchema.client.opName) spanId = spans[0].span_id }) @@ -177,8 +201,8 @@ describe('Plugin', () => { const serverPromise = agent.use(traces => { const spans = sort(traces[0]) - expect(spans[0]).to.have.property('name', 'moleculer.action') - expect(spans[1]).to.have.property('name', 'moleculer.action') + expect(spans[0]).to.have.property('name', namingSchema.server.opName) + expect(spans[1]).to.have.property('name', namingSchema.server.opName) parentId = spans[0].parent_id }) @@ -234,7 +258,7 @@ describe('Plugin', () => { const clientPromise = agent.use(traces => { const spans = sort(traces[0]) - expect(spans[0]).to.have.property('name', 'moleculer.call') + expect(spans[0]).to.have.property('name', namingSchema.client.opName) expect(spans[0].meta).to.have.property('moleculer.context.node_id', `server-${process.pid}`) expect(spans[0].meta).to.have.property('moleculer.node_id', `client-${process.pid}`) @@ -244,8 +268,8 @@ describe('Plugin', () => { const serverPromise = agent.use(traces => { const spans = sort(traces[0]) - expect(spans[0]).to.have.property('name', 'moleculer.action') - expect(spans[1]).to.have.property('name', 'moleculer.action') + expect(spans[0]).to.have.property('name', namingSchema.server.opName) + expect(spans[1]).to.have.property('name', namingSchema.server.opName) parentId = spans[0].parent_id }) diff --git a/packages/datadog-plugin-moleculer/test/naming.js b/packages/datadog-plugin-moleculer/test/naming.js new file mode 100644 index 00000000000..2dd635d2445 --- /dev/null +++ b/packages/datadog-plugin-moleculer/test/naming.js @@ -0,0 +1,24 @@ +const { resolveNaming } = require('../../dd-trace/test/plugins/helpers') + +module.exports = resolveNaming({ + client: { + v0: { + opName: 'moleculer.call', + serviceName: 'test' + }, + v1: { + opName: 'moleculer.client.request', + serviceName: 'test' + } + }, + server: { + v0: { + opName: 'moleculer.action', + serviceName: 'test' + }, + v1: { + opName: 'moleculer.server.request', + serviceName: 'test' + } + } +}) diff --git a/packages/dd-trace/src/plugins/client.js b/packages/dd-trace/src/plugins/client.js index e0fe539ca4a..eba4c8732a7 100644 --- a/packages/dd-trace/src/plugins/client.js +++ b/packages/dd-trace/src/plugins/client.js @@ -5,6 +5,7 @@ const OutboundPlugin = require('./outbound') class ClientPlugin extends OutboundPlugin { static get operation () { return 'request' } static get kind () { return 'client' } + static get type () { return 'web' } // overridden by storage and other client type plugins } module.exports = ClientPlugin diff --git a/packages/dd-trace/src/plugins/server.js b/packages/dd-trace/src/plugins/server.js index eaf8b5b002b..9571b6c578f 100644 --- a/packages/dd-trace/src/plugins/server.js +++ b/packages/dd-trace/src/plugins/server.js @@ -4,6 +4,8 @@ const InboundPlugin = require('./inbound') class ServerPlugin extends InboundPlugin { static get operation () { return 'request' } + static get kind () { return 'server' } + static get type () { return 'web' } // a default that may eventually be overriden by nonweb servers } module.exports = ServerPlugin diff --git a/packages/dd-trace/src/service-naming/schemas/v0/index.js b/packages/dd-trace/src/service-naming/schemas/v0/index.js index faccf370851..e2ee3f60217 100644 --- a/packages/dd-trace/src/service-naming/schemas/v0/index.js +++ b/packages/dd-trace/src/service-naming/schemas/v0/index.js @@ -1,5 +1,6 @@ const SchemaDefinition = require('../definition') const messaging = require('./messaging') const storage = require('./storage') +const web = require('./web') -module.exports = new SchemaDefinition({ messaging, storage }) +module.exports = new SchemaDefinition({ messaging, storage, web }) diff --git a/packages/dd-trace/src/service-naming/schemas/v0/web.js b/packages/dd-trace/src/service-naming/schemas/v0/web.js new file mode 100644 index 00000000000..0e40038ddc4 --- /dev/null +++ b/packages/dd-trace/src/service-naming/schemas/v0/web.js @@ -0,0 +1,18 @@ +const { identityService } = require('../util') + +const web = { + client: { + moleculer: { + opName: () => 'moleculer.call', + serviceName: identityService + } + }, + server: { + moleculer: { + opName: () => 'moleculer.action', + serviceName: identityService + } + } +} + +module.exports = web diff --git a/packages/dd-trace/src/service-naming/schemas/v1/index.js b/packages/dd-trace/src/service-naming/schemas/v1/index.js index faccf370851..e2ee3f60217 100644 --- a/packages/dd-trace/src/service-naming/schemas/v1/index.js +++ b/packages/dd-trace/src/service-naming/schemas/v1/index.js @@ -1,5 +1,6 @@ const SchemaDefinition = require('../definition') const messaging = require('./messaging') const storage = require('./storage') +const web = require('./web') -module.exports = new SchemaDefinition({ messaging, storage }) +module.exports = new SchemaDefinition({ messaging, storage, web }) diff --git a/packages/dd-trace/src/service-naming/schemas/v1/web.js b/packages/dd-trace/src/service-naming/schemas/v1/web.js new file mode 100644 index 00000000000..15d86ae7463 --- /dev/null +++ b/packages/dd-trace/src/service-naming/schemas/v1/web.js @@ -0,0 +1,18 @@ +const { identityService } = require('../util') + +const web = { + client: { + moleculer: { + opName: () => 'moleculer.client.request', + serviceName: identityService + } + }, + server: { + moleculer: { + opName: () => 'moleculer.server.request', + serviceName: identityService + } + } +} + +module.exports = web