@edirect/trace 9.0.21 → 9.0.23

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 (47) hide show
  1. package/.editorconfig +14 -14
  2. package/.eslintignore +1 -1
  3. package/.eslintrc.js +44 -44
  4. package/.eslintrc.json +159 -159
  5. package/.prettierrc +4 -4
  6. package/README.md +365 -357
  7. package/dist/constants/headers.d.ts +4 -4
  8. package/dist/constants/headers.js +5 -5
  9. package/dist/constants/index.d.ts +1 -1
  10. package/dist/constants/index.js +8 -8
  11. package/dist/index.d.ts +3 -3
  12. package/dist/index.js +31 -29
  13. package/dist/index.js.map +1 -1
  14. package/dist/middlewares/CLS.d.ts +5 -5
  15. package/dist/middlewares/CLS.js +33 -33
  16. package/dist/middlewares/body.d.ts +5 -5
  17. package/dist/middlewares/body.js +66 -54
  18. package/dist/middlewares/body.js.map +1 -1
  19. package/dist/middlewares/index.d.ts +4 -4
  20. package/dist/middlewares/index.js +14 -14
  21. package/dist/middlewares/nextjs.d.ts +5 -5
  22. package/dist/middlewares/nextjs.js +37 -37
  23. package/dist/middlewares/trace.d.ts +5 -5
  24. package/dist/middlewares/trace.js +26 -26
  25. package/dist/otel.d.ts +1 -1
  26. package/dist/otel.js +104 -102
  27. package/dist/otel.js.map +1 -1
  28. package/dist/tsconfig.build.tsbuildinfo +1 -1
  29. package/dist/utils/CLS.d.ts +5 -5
  30. package/dist/utils/CLS.js +41 -41
  31. package/dist/utils/body-prop-tools.d.ts +5 -5
  32. package/dist/utils/body-prop-tools.js +23 -23
  33. package/dist/utils/index.d.ts +3 -3
  34. package/dist/utils/index.js +12 -12
  35. package/dist/utils/trace.d.ts +5 -5
  36. package/dist/utils/trace.js +12 -12
  37. package/dist/version.d.ts +1 -0
  38. package/dist/version.js +5 -0
  39. package/dist/version.js.map +1 -0
  40. package/package.json +43 -41
  41. package/tsconfig.build.json +9 -9
  42. package/dist/services/APM.d.ts +0 -14
  43. package/dist/services/APM.js +0 -58
  44. package/dist/services/APM.js.map +0 -1
  45. package/dist/services/index.d.ts +0 -1
  46. package/dist/services/index.js +0 -9
  47. package/dist/services/index.js.map +0 -1
package/dist/otel.js CHANGED
@@ -1,103 +1,105 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http");
27
- const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
28
- const resources_1 = require("@opentelemetry/resources");
29
- const opentelemetry = __importStar(require("@opentelemetry/sdk-node"));
30
- const instrumentation_http_1 = require("@opentelemetry/instrumentation-http");
31
- const instrumentation_express_1 = require("@opentelemetry/instrumentation-express");
32
- const api_1 = require("@opentelemetry/api");
33
- const TRACE_SERVER_URL = process.env['TRACE_SERVER_URL'];
34
- const TRACE_TAG_SERVICENAME = process.env['TRACE_TAG_SERVICENAME'] || '';
35
- const TRACE_TAG_SCOPE = process.env['TRACE_TAG_SCOPE'] || '';
36
- const TRACE_TAG_ENV = process.env['TRACE_TAG_ENV'] || '';
37
- const TRACE_TAG_CLUSTER = process.env['TRACE_TAG_CLUSTER'] || '';
38
- const TRACE_TAG_TENANT = process.env['TRACE_TAG_TENANT'] || '';
39
- const TRACE_TAG_SERVICE = process.env['TRACE_TAG_SERVICE'] || '';
40
- const TRACE_TAG_VERSION = process.env['TRACE_TAG_VERSION'] || '';
41
- const TRACE_TAG_OWNER = process.env['TRACE_TAG_OWNER'] || '';
42
- api_1.diag.setLogger(new api_1.DiagConsoleLogger(), api_1.DiagLogLevel.INFO);
43
- if (TRACE_SERVER_URL) {
44
- const collectorOptions = {
45
- url: `https://${TRACE_SERVER_URL}/v1/traces`,
46
- concurrencyLimit: 10,
47
- };
48
- const addEnvAttributes = (span) => {
49
- span.setAttributes({
50
- ['SCOPE']: TRACE_TAG_SCOPE,
51
- ['ENV']: TRACE_TAG_ENV,
52
- ['CLUSTER']: TRACE_TAG_CLUSTER,
53
- ['TENANT']: TRACE_TAG_TENANT,
54
- ['SERVICE']: TRACE_TAG_SERVICE,
55
- ['VERSION']: TRACE_TAG_VERSION,
56
- ['OWNER']: TRACE_TAG_OWNER,
57
- ['SERVICENAME']: TRACE_TAG_SERVICENAME,
58
- });
59
- };
60
- const resource = resources_1.Resource.default().merge(new resources_1.Resource({
61
- [semantic_conventions_1.SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: TRACE_TAG_ENV,
62
- [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: TRACE_TAG_SERVICE,
63
- [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAMESPACE]: TRACE_TAG_SERVICENAME,
64
- }));
65
- const traceExporter = new exporter_trace_otlp_http_1.OTLPTraceExporter(collectorOptions);
66
- const sdk = new opentelemetry.NodeSDK({
67
- resource,
68
- traceExporter,
69
- instrumentations: [
70
- new instrumentation_http_1.HttpInstrumentation({
71
- applyCustomAttributesOnSpan: addEnvAttributes,
72
- ignoreIncomingRequestHook: (req) => {
73
- const isStaticAsset = !!req.url.match(/^\/static\/.*$/);
74
- const isAsset = !!req.url.match(/^\/assets\/.*$/);
75
- const isHealthcheck = req.url.toLowerCase().indexOf('healthcheck') > -1;
76
- return isStaticAsset || isAsset || isHealthcheck;
77
- },
78
- ignoreOutgoingRequestHook: (req) => {
79
- return true;
80
- },
81
- }),
82
- new instrumentation_express_1.ExpressInstrumentation({
83
- requestHook: addEnvAttributes,
84
- ignoreLayersType: [
85
- instrumentation_express_1.ExpressLayerType.MIDDLEWARE,
86
- instrumentation_express_1.ExpressLayerType.ROUTER,
87
- ],
88
- }),
89
- ],
90
- });
91
- sdk
92
- .start()
93
- .then(() => console.log(`Tracing initialized: ${TRACE_TAG_SERVICENAME} shipping to ${TRACE_SERVER_URL}`))
94
- .catch((error) => console.log('Error initializing tracing', error));
95
- process.on('SIGTERM', () => {
96
- sdk
97
- .shutdown()
98
- .then(() => console.log('Tracing terminated'))
99
- .catch((error) => console.log('Error terminating tracing', error))
100
- .finally(() => process.exit(0));
101
- });
102
- }
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http");
27
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
28
+ const resources_1 = require("@opentelemetry/resources");
29
+ const opentelemetry = __importStar(require("@opentelemetry/sdk-node"));
30
+ const instrumentation_http_1 = require("@opentelemetry/instrumentation-http");
31
+ const instrumentation_express_1 = require("@opentelemetry/instrumentation-express");
32
+ const api_1 = require("@opentelemetry/api");
33
+ const TRACE_SERVER_PROTOCOL = process.env['TRACE_SERVER_PROTOCOL'] || 'https';
34
+ const TRACE_SERVER_URL = process.env['TRACE_SERVER_URL'];
35
+ const TRACE_TAG_SERVICENAME = process.env['TRACE_TAG_SERVICENAME'] || '';
36
+ const TRACE_TAG_SCOPE = process.env['TRACE_TAG_SCOPE'] || '';
37
+ const TRACE_TAG_ENV = process.env['TRACE_TAG_ENV'] || '';
38
+ const TRACE_TAG_CLUSTER = process.env['TRACE_TAG_CLUSTER'] || '';
39
+ const TRACE_TAG_TENANT = process.env['TRACE_TAG_TENANT'] || '';
40
+ const TRACE_TAG_SERVICE = process.env['TRACE_TAG_SERVICE'] || '';
41
+ const TRACE_TAG_VERSION = process.env['TRACE_TAG_VERSION'] || '';
42
+ const TRACE_TAG_OWNER = process.env['TRACE_TAG_OWNER'] || '';
43
+ api_1.diag.setLogger(new api_1.DiagConsoleLogger(), api_1.DiagLogLevel.INFO);
44
+ if (TRACE_SERVER_URL) {
45
+ const collectorOptions = {
46
+ url: `${TRACE_SERVER_PROTOCOL}://${TRACE_SERVER_URL}/v1/traces`,
47
+ concurrencyLimit: 10,
48
+ };
49
+ const addEnvAttributes = (span) => {
50
+ span.setAttributes({
51
+ ['SCOPE']: TRACE_TAG_SCOPE,
52
+ ['ENV']: TRACE_TAG_ENV,
53
+ ['CLUSTER']: TRACE_TAG_CLUSTER,
54
+ ['TENANT']: TRACE_TAG_TENANT,
55
+ ['SERVICE']: TRACE_TAG_SERVICE,
56
+ ['VERSION']: TRACE_TAG_VERSION,
57
+ ['OWNER']: TRACE_TAG_OWNER,
58
+ ['SERVICENAME']: TRACE_TAG_SERVICENAME,
59
+ });
60
+ };
61
+ const resource = resources_1.Resource.default().merge(new resources_1.Resource({
62
+ [semantic_conventions_1.SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: TRACE_TAG_ENV,
63
+ [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: TRACE_TAG_SERVICE,
64
+ [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAMESPACE]: TRACE_TAG_SERVICENAME,
65
+ }));
66
+ const traceExporter = new exporter_trace_otlp_http_1.OTLPTraceExporter(collectorOptions);
67
+ const sdk = new opentelemetry.NodeSDK({
68
+ resource,
69
+ traceExporter,
70
+ instrumentations: [
71
+ new instrumentation_http_1.HttpInstrumentation({
72
+ applyCustomAttributesOnSpan: addEnvAttributes,
73
+ ignoreIncomingRequestHook: (req) => {
74
+ const isStaticAsset = !!req.url.match(/^\/static\/.*$/);
75
+ const isAsset = !!req.url.match(/^\/assets\/.*$/);
76
+ const isDist = !!req.url.match(/^\/dist\/.*$/);
77
+ const isHealthcheck = ['/healthcheck', '/health', '/_health', '/_healthcheck'].filter(req.url.toLowerCase().startsWith).length > 0 || req.url.toLowerCase().indexOf('healthcheck') > -1;
78
+ return isStaticAsset || isAsset || isDist || isHealthcheck;
79
+ },
80
+ ignoreOutgoingRequestHook: () => {
81
+ return true;
82
+ },
83
+ }),
84
+ new instrumentation_express_1.ExpressInstrumentation({
85
+ requestHook: addEnvAttributes,
86
+ ignoreLayersType: [
87
+ instrumentation_express_1.ExpressLayerType.MIDDLEWARE,
88
+ instrumentation_express_1.ExpressLayerType.ROUTER,
89
+ ],
90
+ }),
91
+ ],
92
+ });
93
+ sdk
94
+ .start()
95
+ .then(() => console.log(`Tracing initialized: ${TRACE_TAG_SERVICENAME} shipping to ${TRACE_SERVER_URL}`))
96
+ .catch((error) => console.log('Error initializing tracing', error));
97
+ process.on('SIGTERM', () => {
98
+ sdk
99
+ .shutdown()
100
+ .then(() => console.log('Tracing terminated'))
101
+ .catch((error) => console.log('Error terminating tracing', error))
102
+ .finally(() => process.exit(0));
103
+ });
104
+ }
103
105
  //# sourceMappingURL=otel.js.map
package/dist/otel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}