@platformatic/telemetry
Advanced tools
Comparing version 0.34.0 to 0.34.1
'use strict' | ||
const fp = require('fastify-plugin') | ||
const { SpanStatusCode } = require('@opentelemetry/api') | ||
const { SpanStatusCode, SpanKind } = require('@opentelemetry/api') | ||
const { ConsoleSpanExporter, BatchSpanProcessor, SimpleSpanProcessor, InMemorySpanExporter } = require('@opentelemetry/sdk-trace-base') | ||
@@ -11,2 +11,3 @@ const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions') | ||
const { fastifyTextMapGetter, fastifyTextMapSetter } = require('./fastify-text-map') | ||
const fastUri = require('fast-uri') | ||
@@ -38,5 +39,10 @@ // Platformatic telemetry plugin. | ||
request (request) { | ||
const { hostname, method, url, protocol } = request | ||
const urlData = fastUri.parse(`${protocol}://${hostname})`) | ||
return { | ||
'req.method': request.raw.method, | ||
'req.url': request.raw.url | ||
'server.address': hostname, | ||
'server.port': urlData.port, | ||
'http.request.method': method, | ||
'url.path': url, | ||
'url.scheme': protocol | ||
} | ||
@@ -46,3 +52,3 @@ }, | ||
return { | ||
'reply.statusCode': reply.statusCode | ||
'http.response.status_code': reply.statusCode | ||
} | ||
@@ -66,3 +72,3 @@ }, | ||
} | ||
app.log.info(`Setting up telemetry for service: ${serviceName} version: ${version} and exporter of type ${exporter.type}`) | ||
app.log.info(`Setting up telemetry for service: ${serviceName}${version ? ' version: ' + version : ''} with exporter of type ${exporter.type}`) | ||
const provider = new PlatformaticTracerProvider({ | ||
@@ -126,2 +132,3 @@ resource: new Resource({ | ||
) | ||
span.kind = SpanKind.SERVER | ||
// Next 2 lines are needed by W3CTraceContextPropagator | ||
@@ -185,4 +192,15 @@ context = context.setSpan(span) | ||
const span = tracer.startSpan(`${method} ${url}`, {}, context) | ||
span.kind = SpanKind.CLIENT | ||
const urlObj = fastUri.parse(url) | ||
/* istanbul ignore next */ | ||
const attributes = url ? { 'server.url': url } : {} | ||
const attributes = url | ||
? { | ||
'server.address': urlObj.host, | ||
'server.port': urlObj.port, | ||
'http.request.method': method, | ||
'url.full': url, | ||
'url.path': urlObj.path | ||
} | ||
: {} | ||
span.setAttributes(attributes) | ||
@@ -209,3 +227,3 @@ | ||
span.setAttributes({ | ||
'response.statusCode': response.statusCode | ||
'http.response.status_code': response.statusCode | ||
}) | ||
@@ -212,0 +230,0 @@ span.setStatus(spanStatus) |
{ | ||
"name": "@platformatic/telemetry", | ||
"version": "0.34.0", | ||
"version": "0.34.1", | ||
"description": "OpenTelemetry integration for Platformatic", | ||
@@ -26,2 +26,3 @@ "main": "index.js", | ||
"@opentelemetry/semantic-conventions": "^1.15.0", | ||
"fast-uri": "^2.2.0", | ||
"fastify-plugin": "^4.5.0" | ||
@@ -28,0 +29,0 @@ }, |
@@ -5,3 +5,3 @@ 'use strict' | ||
const fastify = require('fastify') | ||
const { SpanStatusCode } = require('@opentelemetry/api') | ||
const { SpanStatusCode, SpanKind } = require('@opentelemetry/api') | ||
const telemetryPlugin = require('../lib/telemetry') | ||
@@ -33,3 +33,2 @@ const { PlatformaticContext } = require('../lib/platformatic-context') | ||
serviceName: 'test-service', | ||
version: '1.0.0', | ||
exporter: { | ||
@@ -131,12 +130,17 @@ type: 'memory' | ||
equal(spanServer.name, 'GET /test') | ||
equal(spanServer.kind, SpanKind.SERVER) | ||
equal(spanServer.status.code, SpanStatusCode.OK) | ||
equal(spanServer.attributes['req.method'], 'GET') | ||
equal(spanServer.attributes['req.url'], '/test') | ||
equal(spanServer.attributes['reply.statusCode'], 200) | ||
equal(spanServer.attributes['http.request.method'], 'GET') | ||
equal(spanServer.attributes['url.path'], '/test') | ||
equal(spanServer.attributes['http.response.status_code'], 200) | ||
const spanClient = finishedSpans[1] | ||
equal(spanClient.name, 'GET http://localhost:3000/test') | ||
equal(spanClient.kind, SpanKind.CLIENT) | ||
equal(spanClient.status.code, SpanStatusCode.OK) | ||
equal(spanClient.attributes['server.url'], 'http://localhost:3000/test') | ||
equal(spanClient.attributes['response.statusCode'], 200) | ||
equal(spanClient.attributes['url.full'], 'http://localhost:3000/test') | ||
equal(spanClient.attributes['http.response.status_code'], 200) | ||
equal(spanClient.attributes['server.port'], 3000) | ||
equal(spanClient.attributes['server.address'], 'localhost') | ||
equal(spanClient.attributes['url.path'], '/test') | ||
@@ -181,12 +185,14 @@ // The traceparent header is added to the request and propagated to the server | ||
equal(spanServer.name, 'GET') | ||
equal(spanServer.kind, SpanKind.SERVER) | ||
equal(spanServer.status.code, SpanStatusCode.ERROR) | ||
equal(spanServer.attributes['req.method'], 'GET') | ||
equal(spanServer.attributes['req.url'], '/wrong') | ||
equal(spanServer.attributes['reply.statusCode'], 404) | ||
equal(spanServer.attributes['http.request.method'], 'GET') | ||
equal(spanServer.attributes['url.path'], '/wrong') | ||
equal(spanServer.attributes['http.response.status_code'], 404) | ||
const spanClient = finishedSpans[1] | ||
equal(spanClient.name, 'GET http://localhost:3000/test') | ||
equal(spanClient.kind, SpanKind.CLIENT) | ||
equal(spanClient.status.code, SpanStatusCode.ERROR) | ||
equal(spanClient.attributes['server.url'], 'http://localhost:3000/test') | ||
equal(spanClient.attributes['response.statusCode'], 404) | ||
equal(spanClient.attributes['url.full'], 'http://localhost:3000/test') | ||
equal(spanClient.attributes['http.response.status_code'], 404) | ||
}) | ||
@@ -226,3 +232,3 @@ | ||
equal(spanClient.status.code, SpanStatusCode.ERROR) | ||
equal(spanClient.attributes['server.url'], 'http://localhost:3000/test') | ||
equal(spanClient.attributes['url.full'], 'http://localhost:3000/test') | ||
equal(spanClient.attributes['error.name'], 'Error') | ||
@@ -229,0 +235,0 @@ equal(spanClient.attributes['error.message'], 'KABOOM!!!') |
@@ -5,3 +5,3 @@ 'use strict' | ||
const fastify = require('fastify') | ||
const { SpanStatusCode } = require('@opentelemetry/api') | ||
const { SpanStatusCode, SpanKind } = require('@opentelemetry/api') | ||
const telemetryPlugin = require('../lib/telemetry') | ||
@@ -50,7 +50,10 @@ | ||
const span = finishedSpans[0] | ||
equal(span.kind, SpanKind.SERVER) | ||
equal(span.name, 'GET /test') | ||
equal(span.status.code, SpanStatusCode.OK) | ||
equal(span.attributes['req.method'], 'GET') | ||
equal(span.attributes['req.url'], '/test') | ||
equal(span.attributes['reply.statusCode'], 200) | ||
equal(span.attributes['http.request.method'], 'GET') | ||
equal(span.attributes['url.path'], '/test') | ||
equal(span.attributes['http.response.status_code'], 200) | ||
equal(span.attributes['url.scheme'], 'http') | ||
equal(span.attributes['server.address'], 'test') | ||
const resource = span.resource | ||
@@ -82,5 +85,5 @@ same(resource.attributes['service.name'], 'test-service') | ||
equal(span.status.code, SpanStatusCode.OK) | ||
equal(span.attributes['req.method'], 'GET') | ||
equal(span.attributes['req.url'], '/test') | ||
equal(span.attributes['reply.statusCode'], 200) | ||
equal(span.attributes['http.request.method'], 'GET') | ||
equal(span.attributes['url.path'], '/test') | ||
equal(span.attributes['http.response.status_code'], 200) | ||
// This is the attribute we added | ||
@@ -133,5 +136,5 @@ equal(span.attributes.foo, 'bar') | ||
equal(span.status.code, SpanStatusCode.ERROR) | ||
equal(span.attributes['req.method'], 'GET') | ||
equal(span.attributes['req.url'], '/test') | ||
equal(span.attributes['reply.statusCode'], 500) | ||
equal(span.attributes['http.request.method'], 'GET') | ||
equal(span.attributes['url.path'], '/test') | ||
equal(span.attributes['http.response.status_code'], 500) | ||
equal(span.attributes['error.message'], 'booooom!!!') | ||
@@ -138,0 +141,0 @@ const resource = span.resource |
45872
907
9
+ Addedfast-uri@^2.2.0
+ Addedfast-uri@2.4.0(transitive)