@devopsplaybook.io/otel-utils-fastify 0.0.1-beta4 → 0.0.1-beta5

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.
@@ -1,8 +1,3 @@
1
- import { ConfigInterfaceOTel } from "@devopsplaybook.io/otel-utils";
2
- import { Span } from "@opentelemetry/sdk-trace-base";
1
+ import { StandardLogger, StandardTracer } from "@devopsplaybook.io/otel-utils";
3
2
  import { FastifyInstance } from "fastify";
4
- export declare function StandardTracerFastifyRegisterHooks(fastify: FastifyInstance, config: ConfigInterfaceOTel): Promise<void>;
5
- export declare function StandardTracerFastifyInit(fastify: FastifyInstance): void;
6
- export interface FastifyRequestOTel {
7
- span?: Span;
8
- }
3
+ export declare function StandardTracerFastifyRegisterHooks(fastify: FastifyInstance, standardTracer: StandardTracer, standardLogger: StandardLogger): Promise<void>;
@@ -1,61 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StandardTracerFastifyRegisterHooks = StandardTracerFastifyRegisterHooks;
4
- exports.StandardTracerFastifyInit = StandardTracerFastifyInit;
5
- const otel_utils_1 = require("@devopsplaybook.io/otel-utils");
6
4
  const api_1 = require("@opentelemetry/api");
7
5
  const core_1 = require("@opentelemetry/core");
8
6
  const sdk_node_1 = require("@opentelemetry/sdk-node");
9
7
  const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
10
8
  const propagator = new core_1.W3CTraceContextPropagator();
11
- const logger = new otel_utils_1.Logger("StandardTracerFastify");
12
- async function StandardTracerFastifyRegisterHooks(fastify, config) {
9
+ async function StandardTracerFastifyRegisterHooks(fastify, standardTracer, standardLogger) {
10
+ const logger = standardLogger.createModuleLogger("Fastify");
13
11
  fastify.addHook("onRequest", async (req) => {
14
12
  if (req.url.indexOf("/api") !== 0) {
15
13
  return;
16
14
  }
17
- let spanName = `${req.method}-${req.url}`;
18
- let urlName = req.url;
19
- if (config.OPENTELEMETRY_COLLECTOR_AWS) {
20
- spanName = `${config.SERVICE_ID}-${config.VERSION}`;
21
- urlName = `${config.SERVICE_ID}-${config.VERSION}-${req.method}-${req.url}`;
22
- }
23
- const callerContext = propagator.extract(api_1.ROOT_CONTEXT, req.headers, api_1.defaultTextMapGetter);
24
- sdk_node_1.api.context.with(callerContext, () => {
25
- const span = (0, otel_utils_1.StandardTracerStartSpan)(spanName);
26
- span.setAttribute(semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD, req.method);
27
- span.setAttribute(semantic_conventions_1.ATTR_URL_PATH, urlName);
28
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
29
- req.tracerSpanApi = span;
30
- });
31
- });
32
- fastify.addHook("onResponse", async (req, reply) => {
33
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
34
- const span = req.tracerSpanApi;
35
- if (reply.statusCode > 299) {
36
- span.status.code = api_1.SpanStatusCode.ERROR;
37
- }
38
- else {
39
- span.status.code = api_1.SpanStatusCode.OK;
40
- }
41
- span.setAttribute(semantic_conventions_1.ATTR_HTTP_RESPONSE_STATUS_CODE, reply.statusCode);
42
- span.end();
43
- });
44
- fastify.addHook("onError", async (req, reply, error) => {
45
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
46
- const span = req.tracerSpanApi;
47
- span.status.code = api_1.SpanStatusCode.ERROR;
48
- span.recordException(error);
49
- logger.error(error);
50
- });
51
- }
52
- function StandardTracerFastifyInit(fastify) {
53
- fastify.addHook("onRequest", async (req) => {
54
15
  const spanName = `${req.method}-${req.url}`;
55
16
  const urlName = req.url;
56
17
  const callerContext = propagator.extract(api_1.ROOT_CONTEXT, req.headers, api_1.defaultTextMapGetter);
57
18
  sdk_node_1.api.context.with(callerContext, () => {
58
- const span = (0, otel_utils_1.StandardTracerStartSpan)(spanName);
19
+ const span = standardTracer.startSpan(spanName);
59
20
  span.setAttribute(semantic_conventions_1.ATTR_HTTP_REQUEST_METHOD, req.method);
60
21
  span.setAttribute(semantic_conventions_1.ATTR_URL_PATH, urlName);
61
22
  /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
@@ -79,5 +40,6 @@ function StandardTracerFastifyInit(fastify) {
79
40
  const span = req.tracerSpanApi;
80
41
  span.status.code = api_1.SpanStatusCode.ERROR;
81
42
  span.recordException(error);
43
+ logger.error(error);
82
44
  });
83
45
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devopsplaybook.io/otel-utils-fastify",
3
- "version": "0.0.1-beta4",
3
+ "version": "0.0.1-beta5",
4
4
  "description": "Utility to simplify integration with Open Telemetry for Fastify API Server",
5
5
  "keywords": [
6
6
  "Open",
@@ -20,14 +20,14 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "fastify": "^5.5.0",
23
- "@devopsplaybook.io/otel-utils": "1.0.1-beta4"
23
+ "@devopsplaybook.io/otel-utils": "1.0.1-beta6"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@eslint/js": "^9.34.0",
27
27
  "@types/node": "^24.3.0",
28
28
  "@types/sqlite3": "^5.1.0",
29
29
  "ts-node": "^10.9.2",
30
- "typescript-eslint": "^8.40.0",
30
+ "typescript-eslint": "^8.41.0",
31
31
  "typescript": "^5.9.2"
32
32
  },
33
33
  "publishConfig": {
@@ -1,7 +1,8 @@
1
1
  import {
2
- ConfigInterfaceOTel,
3
- Logger,
4
- StandardTracerStartSpan,
2
+ ConfigOTelInterface,
3
+ ModuleLogger,
4
+ StandardLogger,
5
+ StandardTracer,
5
6
  } from "@devopsplaybook.io/otel-utils";
6
7
  import {
7
8
  defaultTextMapGetter,
@@ -16,33 +17,31 @@ import {
16
17
  ATTR_HTTP_RESPONSE_STATUS_CODE,
17
18
  ATTR_URL_PATH,
18
19
  } from "@opentelemetry/semantic-conventions";
19
- import { FastifyInstance } from "fastify";
20
+ import { FastifyInstance, FastifyRequest, FastifyReply } from "fastify";
20
21
 
21
22
  const propagator = new W3CTraceContextPropagator();
22
- const logger = new Logger("StandardTracerFastify");
23
23
 
24
24
  export async function StandardTracerFastifyRegisterHooks(
25
25
  fastify: FastifyInstance,
26
- config: ConfigInterfaceOTel
26
+ standardTracer: StandardTracer,
27
+ standardLogger: StandardLogger
27
28
  ): Promise<void> {
28
- fastify.addHook("onRequest", async (req) => {
29
+ const logger = standardLogger.createModuleLogger("Fastify");
30
+
31
+ fastify.addHook("onRequest", async (req: FastifyRequest) => {
29
32
  if (req.url.indexOf("/api") !== 0) {
30
33
  return;
31
34
  }
32
35
 
33
- let spanName = `${req.method}-${req.url}`;
34
- let urlName = req.url;
35
- if (config.OPENTELEMETRY_COLLECTOR_AWS) {
36
- spanName = `${config.SERVICE_ID}-${config.VERSION}`;
37
- urlName = `${config.SERVICE_ID}-${config.VERSION}-${req.method}-${req.url}`;
38
- }
36
+ const spanName = `${req.method}-${req.url}`;
37
+ const urlName = req.url;
39
38
  const callerContext = propagator.extract(
40
39
  ROOT_CONTEXT,
41
40
  req.headers,
42
41
  defaultTextMapGetter
43
42
  );
44
43
  api.context.with(callerContext, () => {
45
- const span = StandardTracerStartSpan(spanName);
44
+ const span = standardTracer.startSpan(spanName);
46
45
  span.setAttribute(ATTR_HTTP_REQUEST_METHOD, req.method);
47
46
  span.setAttribute(ATTR_URL_PATH, urlName);
48
47
  /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
@@ -50,65 +49,29 @@ export async function StandardTracerFastifyRegisterHooks(
50
49
  });
51
50
  });
52
51
 
53
- fastify.addHook("onResponse", async (req, reply) => {
54
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
55
- const span = (req as any).tracerSpanApi as Span;
56
- if (reply.statusCode > 299) {
57
- span.status.code = SpanStatusCode.ERROR;
58
- } else {
59
- span.status.code = SpanStatusCode.OK;
52
+ fastify.addHook(
53
+ "onResponse",
54
+ async (req: FastifyRequest, reply: FastifyReply) => {
55
+ /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
56
+ const span = (req as any).tracerSpanApi as Span;
57
+ if (reply.statusCode > 299) {
58
+ span.status.code = SpanStatusCode.ERROR;
59
+ } else {
60
+ span.status.code = SpanStatusCode.OK;
61
+ }
62
+ span.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE, reply.statusCode);
63
+ span.end();
60
64
  }
61
- span.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE, reply.statusCode);
62
- span.end();
63
- });
65
+ );
64
66
 
65
- fastify.addHook("onError", async (req, reply, error) => {
66
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
67
- const span = (req as any).tracerSpanApi as Span;
68
- span.status.code = SpanStatusCode.ERROR;
69
- span.recordException(error);
70
- logger.error(error);
71
- });
72
- }
73
-
74
- export function StandardTracerFastifyInit(fastify: FastifyInstance) {
75
- fastify.addHook("onRequest", async (req) => {
76
- const spanName = `${req.method}-${req.url}`;
77
- const urlName = req.url;
78
- const callerContext = propagator.extract(
79
- ROOT_CONTEXT,
80
- req.headers,
81
- defaultTextMapGetter
82
- );
83
- api.context.with(callerContext, () => {
84
- const span = StandardTracerStartSpan(spanName);
85
- span.setAttribute(ATTR_HTTP_REQUEST_METHOD, req.method);
86
- span.setAttribute(ATTR_URL_PATH, urlName);
67
+ fastify.addHook(
68
+ "onError",
69
+ async (req: FastifyRequest, reply: FastifyReply, error) => {
87
70
  /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
88
- (req as any).tracerSpanApi = span;
89
- });
90
- });
91
-
92
- fastify.addHook("onResponse", async (req, reply) => {
93
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
94
- const span = (req as any).tracerSpanApi as Span;
95
- if (reply.statusCode > 299) {
71
+ const span = (req as any).tracerSpanApi as Span;
96
72
  span.status.code = SpanStatusCode.ERROR;
97
- } else {
98
- span.status.code = SpanStatusCode.OK;
73
+ span.recordException(error);
74
+ logger.error(error);
99
75
  }
100
- span.setAttribute(ATTR_HTTP_RESPONSE_STATUS_CODE, reply.statusCode);
101
- span.end();
102
- });
103
-
104
- fastify.addHook("onError", async (req, reply, error) => {
105
- /* eslint-disable-next-line @typescript-eslint/no-explicit-any */
106
- const span = (req as any).tracerSpanApi as Span;
107
- span.status.code = SpanStatusCode.ERROR;
108
- span.recordException(error);
109
- });
110
- }
111
-
112
- export interface FastifyRequestOTel {
113
- span?: Span;
76
+ );
114
77
  }