New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@platformatic/telemetry

Package Overview
Dependencies
Maintainers
6
Versions
265
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@platformatic/telemetry - npm Package Compare versions

Comparing version 0.37.1 to 0.37.2

6

lib/platformatic-trace-provider.js

@@ -35,3 +35,7 @@ 'use strict'

addSpanProcessor (spanProcessor) {
this._registeredSpanProcessors.push(spanProcessor)
if (Array.isArray(spanProcessor)) {
this._registeredSpanProcessors.push(...spanProcessor)
} else {
this._registeredSpanProcessors.push(spanProcessor)
}
this.activeSpanProcessor = new MultiSpanProcessor(

@@ -38,0 +42,0 @@ this._registeredSpanProcessors

54

lib/schema.js
'use strict'
const ExporterSchema = {
type: 'object',
properties: {
type: {
type: 'string',
enum: ['console', 'otlp', 'zipkin', 'memory'],
default: 'console'
},
options: {
type: 'object',
description: 'Options for the exporter. These are passed directly to the exporter.',
properties: {
url: {
type: 'string',
description: 'The URL to send the traces to. Not used for console or memory exporters.'
},
headers: {
type: 'object',
description: 'Headers to send to the exporter. Not used for console or memory exporters.'
}
}
},
additionalProperties: false
}
}
const TelemetrySchema = {

@@ -23,25 +49,9 @@ $id: '/OpenTelemetry',

exporter: {
type: 'object',
properties: {
type: {
type: 'string',
enum: ['console', 'otlp', 'zipkin', 'memory'],
default: 'console'
anyOf: [
{
type: 'array',
items: ExporterSchema
},
options: {
type: 'object',
description: 'Options for the exporter. These are passed directly to the exporter.',
properties: {
url: {
type: 'string',
description: 'The URL to send the traces to. Not used for console or memory exporters.'
},
headers: {
type: 'object',
description: 'Headers to send to the exporter. Not used for console or memory exporters.'
}
}
},
additionalProperties: false
}
ExporterSchema
]
}

@@ -48,0 +58,0 @@ },

@@ -84,3 +84,7 @@ 'use strict'

}
const exporters = Array.isArray(exporter) ? exporter : [exporter]
app.log.info(`Setting up telemetry for service: ${serviceName}${version ? ' version: ' + version : ''} with exporter of type ${exporter.type}`)
const provider = new PlatformaticTracerProvider({

@@ -93,29 +97,36 @@ resource: new Resource({

const exporterObjs = []
const spanProcessors = []
for (const exporter of exporters) {
// Exporter config:
// https://open-telemetry.github.io/opentelemetry-js/interfaces/_opentelemetry_exporter_zipkin.ExporterConfig.html
const exporterOptions = { ...exporter.options, serviceName }
const exporterOptions = { ...exporter.options, serviceName }
let exporterObj
if (exporter.type === 'console') {
exporterObj = new ConsoleSpanExporter(exporterOptions)
} else if (exporter.type === 'otlp') {
let exporterObj
if (exporter.type === 'console') {
exporterObj = new ConsoleSpanExporter(exporterOptions)
} else if (exporter.type === 'otlp') {
// We require here because this require (and only the require!) creates some issue with c8 on some mjs tests on other modules. Since we need an assignemet here, we don't use a switch.
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto')
exporterObj = new OTLPTraceExporter(exporterOptions)
} else if (exporter.type === 'zipkin') {
const { ZipkinExporter } = require('@opentelemetry/exporter-zipkin')
exporterObj = new ZipkinExporter(exporterOptions)
} else if (exporter.type === 'memory') {
exporterObj = new InMemorySpanExporter()
} else {
app.log.warn(`Unknown exporter type: ${exporter.type}, defaulting to console.`)
exporterObj = new ConsoleSpanExporter(exporterOptions)
const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto')
exporterObj = new OTLPTraceExporter(exporterOptions)
} else if (exporter.type === 'zipkin') {
const { ZipkinExporter } = require('@opentelemetry/exporter-zipkin')
exporterObj = new ZipkinExporter(exporterOptions)
} else if (exporter.type === 'memory') {
exporterObj = new InMemorySpanExporter()
} else {
app.log.warn(`Unknown exporter type: ${exporter.type}, defaulting to console.`)
exporterObj = new ConsoleSpanExporter(exporterOptions)
}
// We use a SimpleSpanProcessor for the console/memory exporters and a BatchSpanProcessor for the others.
const spanProcessor = ['memory', 'console'].includes(exporter.type) ? new SimpleSpanProcessor(exporterObj) : new BatchSpanProcessor(exporterObj)
spanProcessors.push(spanProcessor)
exporterObjs.push(exporterObj)
}
// We use a SimpleSpanProcessor for the console/memory exporters and a BatchSpanProcessor for the others.
const spanProcessor = ['memory', 'console'].includes(exporter.type) ? new SimpleSpanProcessor(exporterObj) : new BatchSpanProcessor(exporterObj)
provider.addSpanProcessor(spanProcessor)
provider.addSpanProcessor(spanProcessors)
const tracer = provider.getTracer(moduleName, moduleVersion)
const propagator = provider.getPropagator()
return { tracer, exporter: exporterObj, propagator, provider }
return { tracer, exporters: exporterObjs, propagator, provider }
}

@@ -122,0 +133,0 @@

{
"name": "@platformatic/telemetry",
"version": "0.37.1",
"version": "0.37.2",
"description": "OpenTelemetry integration for Platformatic",

@@ -5,0 +5,0 @@ "main": "index.js",

@@ -17,6 +17,8 @@ 'use strict'

await app.close()
const { exporter } = app.openTelemetry
if (exporter.constructor.name === 'InMemorySpanExporter') {
exporter.reset()
}
const { exporters } = app.openTelemetry
exporters.forEach(exporter => {
if (exporter.constructor.name === 'InMemorySpanExporter') {
exporter.reset()
}
})
})

@@ -123,3 +125,4 @@ return app

const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -178,3 +181,5 @@ equal(finishedSpans.length, 2)

const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -224,3 +229,4 @@ equal(finishedSpans.length, 2)

const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -227,0 +233,0 @@ equal(finishedSpans.length, 1)

@@ -16,6 +16,8 @@ 'use strict'

await app.close()
const { exporter } = app.openTelemetry
if (exporter.constructor.name === 'InMemorySpanExporter') {
exporter.reset()
}
const { exporters } = app.openTelemetry
exporters.forEach(exporter => {
if (exporter.constructor.name === 'InMemorySpanExporter') {
exporter.reset()
}
})
})

@@ -47,3 +49,4 @@ return app

await app.inject(injectArgs)
const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -87,3 +90,4 @@ equal(finishedSpans.length, 1)

await app.inject(injectArgs)
const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -120,3 +124,4 @@ equal(finishedSpans.length, 1)

await app.inject(injectArgs)
const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -171,3 +176,4 @@ equal(finishedSpans.length, 1)

await app.inject(injectArgs)
const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -197,3 +203,4 @@ equal(finishedSpans.length, 1)

await app.inject(injectArgs)
const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
same(exporter.constructor.name, 'ConsoleSpanExporter')

@@ -217,3 +224,4 @@ })

const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
same(exporter.constructor.name, 'OTLPTraceExporter')

@@ -238,3 +246,4 @@ same(exporter.url, 'http://localhost:4317')

const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
same(exporter.constructor.name, 'ZipkinExporter')

@@ -257,3 +266,4 @@ same(exporter._urlStr, 'http://localhost:9876')

await app.inject(injectArgs)
const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
same(exporter.constructor.name, 'ConsoleSpanExporter')

@@ -287,3 +297,4 @@ })

await app.inject(injectArgs)
const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -315,3 +326,4 @@ equal(finishedSpans.length, 0)

await app.inject(injectArgs)
const { exporter } = app.openTelemetry
const { exporters } = app.openTelemetry
const exporter = exporters[0]
const finishedSpans = exporter.getFinishedSpans()

@@ -332,1 +344,51 @@ equal(finishedSpans.length, 1)

})
test('should configure an exporter as an array', async ({ equal, same, teardown }) => {
const handler = async (request, reply) => {
return {}
}
const app = await setupApp({
serviceName: 'test-service',
version: '1.0.0',
exporter: [{
type: 'otlp',
options: {
url: 'http://localhost:4317'
}
}]
}, handler, teardown)
const { exporters } = app.openTelemetry
const exporter = exporters[0]
same(exporter.constructor.name, 'OTLPTraceExporter')
same(exporter.url, 'http://localhost:4317')
})
test('should use multiple exporters and sent traces to all the exporters', async ({ equal, same, teardown }) => {
const handler = async (request, reply) => {
return {}
}
const app = await setupApp({
serviceName: 'test-service',
version: '1.0.0',
exporter: [{
type: 'memory'
}, {
type: 'memory'
}]
}, handler, teardown)
const { exporters } = app.openTelemetry
await app.inject(injectArgs)
const finishedSpans0 = exporters[0].getFinishedSpans()
equal(finishedSpans0.length, 1)
const span0 = finishedSpans0[0]
equal(span0.name, 'GET /test')
equal(span0.status.code, SpanStatusCode.OK)
const finishedSpans1 = exporters[1].getFinishedSpans()
equal(finishedSpans1.length, 1)
const span1 = finishedSpans1[0]
equal(span1.name, 'GET /test')
equal(span1.status.code, SpanStatusCode.OK)
})
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc