@sebspark/otel 0.4.2 → 0.5.0
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.
- package/dist/index.d.mts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +53 -39
- package/dist/index.mjs +51 -38
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { LoggerProvider } from '@opentelemetry/api-logs';
|
|
1
2
|
import * as _opentelemetry_api from '@opentelemetry/api';
|
|
2
3
|
import { trace, SpanOptions } from '@opentelemetry/api';
|
|
3
4
|
|
|
4
5
|
type Attrs = Record<string, any>;
|
|
5
|
-
declare function getLogger(serviceOverride?: string, extraAttrs?: Attrs): {
|
|
6
|
+
declare function getLogger(serviceOverride?: string, extraAttrs?: Attrs, testProvider?: LoggerProvider): {
|
|
6
7
|
debug: (msg: string, attrs?: Attrs) => void;
|
|
7
8
|
info: (msg: string, attrs?: Attrs) => void;
|
|
8
9
|
notice: (msg: string, attrs?: Attrs) => void;
|
|
@@ -15,6 +16,8 @@ declare function getLogger(serviceOverride?: string, extraAttrs?: Attrs): {
|
|
|
15
16
|
|
|
16
17
|
declare function getMeter(componentNameOverride?: string): Promise<_opentelemetry_api.Meter>;
|
|
17
18
|
|
|
19
|
+
declare function initialize(): Promise<void>;
|
|
20
|
+
|
|
18
21
|
type OtelTracer = ReturnType<typeof trace.getTracer>;
|
|
19
22
|
type Span = ReturnType<OtelTracer['startSpan']>;
|
|
20
23
|
type Func<T> = (span: Span) => Promise<T> | T;
|
|
@@ -47,4 +50,4 @@ interface Tracer extends OtelTracer {
|
|
|
47
50
|
*/
|
|
48
51
|
declare function getTracer(componentNameOverride?: string): Promise<Tracer>;
|
|
49
52
|
|
|
50
|
-
export { getLogger, getMeter, getTracer };
|
|
53
|
+
export { getLogger, getMeter, getTracer, initialize };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { LoggerProvider } from '@opentelemetry/api-logs';
|
|
1
2
|
import * as _opentelemetry_api from '@opentelemetry/api';
|
|
2
3
|
import { trace, SpanOptions } from '@opentelemetry/api';
|
|
3
4
|
|
|
4
5
|
type Attrs = Record<string, any>;
|
|
5
|
-
declare function getLogger(serviceOverride?: string, extraAttrs?: Attrs): {
|
|
6
|
+
declare function getLogger(serviceOverride?: string, extraAttrs?: Attrs, testProvider?: LoggerProvider): {
|
|
6
7
|
debug: (msg: string, attrs?: Attrs) => void;
|
|
7
8
|
info: (msg: string, attrs?: Attrs) => void;
|
|
8
9
|
notice: (msg: string, attrs?: Attrs) => void;
|
|
@@ -15,6 +16,8 @@ declare function getLogger(serviceOverride?: string, extraAttrs?: Attrs): {
|
|
|
15
16
|
|
|
16
17
|
declare function getMeter(componentNameOverride?: string): Promise<_opentelemetry_api.Meter>;
|
|
17
18
|
|
|
19
|
+
declare function initialize(): Promise<void>;
|
|
20
|
+
|
|
18
21
|
type OtelTracer = ReturnType<typeof trace.getTracer>;
|
|
19
22
|
type Span = ReturnType<OtelTracer['startSpan']>;
|
|
20
23
|
type Func<T> = (span: Span) => Promise<T> | T;
|
|
@@ -47,4 +50,4 @@ interface Tracer extends OtelTracer {
|
|
|
47
50
|
*/
|
|
48
51
|
declare function getTracer(componentNameOverride?: string): Promise<Tracer>;
|
|
49
52
|
|
|
50
|
-
export { getLogger, getMeter, getTracer };
|
|
53
|
+
export { getLogger, getMeter, getTracer, initialize };
|
package/dist/index.js
CHANGED
|
@@ -32,10 +32,30 @@ var index_exports = {};
|
|
|
32
32
|
__export(index_exports, {
|
|
33
33
|
getLogger: () => getLogger,
|
|
34
34
|
getMeter: () => getMeter,
|
|
35
|
-
getTracer: () => getTracer
|
|
35
|
+
getTracer: () => getTracer,
|
|
36
|
+
initialize: () => initialize
|
|
36
37
|
});
|
|
37
38
|
module.exports = __toCommonJS(index_exports);
|
|
38
39
|
|
|
40
|
+
// src/logger.ts
|
|
41
|
+
var import_api4 = require("@opentelemetry/api");
|
|
42
|
+
var import_api_logs2 = require("@opentelemetry/api-logs");
|
|
43
|
+
|
|
44
|
+
// src/consts.ts
|
|
45
|
+
var LOG_SEVERITY_MAP = {
|
|
46
|
+
TRACE: 1,
|
|
47
|
+
DEBUG: 5,
|
|
48
|
+
INFO: 9,
|
|
49
|
+
NOTICE: 10,
|
|
50
|
+
WARNING: 13,
|
|
51
|
+
WARN: 13,
|
|
52
|
+
ERROR: 17,
|
|
53
|
+
FATAL: 21,
|
|
54
|
+
CRITICAL: 21,
|
|
55
|
+
ALERT: 22,
|
|
56
|
+
EMERGENCY: 23
|
|
57
|
+
};
|
|
58
|
+
|
|
39
59
|
// src/otel.ts
|
|
40
60
|
var import_api3 = require("@opentelemetry/api");
|
|
41
61
|
var import_api_logs = require("@opentelemetry/api-logs");
|
|
@@ -53,21 +73,6 @@ var import_sdk_trace_node = require("@opentelemetry/sdk-trace-node");
|
|
|
53
73
|
// src/loggers/console-log-pretty-exporter.ts
|
|
54
74
|
var import_core = require("@opentelemetry/core");
|
|
55
75
|
|
|
56
|
-
// src/consts.ts
|
|
57
|
-
var LOG_SEVERITY_MAP = {
|
|
58
|
-
TRACE: 1,
|
|
59
|
-
DEBUG: 5,
|
|
60
|
-
INFO: 9,
|
|
61
|
-
NOTICE: 10,
|
|
62
|
-
WARNING: 13,
|
|
63
|
-
WARN: 13,
|
|
64
|
-
ERROR: 17,
|
|
65
|
-
FATAL: 21,
|
|
66
|
-
CRITICAL: 21,
|
|
67
|
-
ALERT: 22,
|
|
68
|
-
EMERGENCY: 23
|
|
69
|
-
};
|
|
70
|
-
|
|
71
76
|
// src/loggers/formatters/shared.ts
|
|
72
77
|
var import_semantic_conventions = require("@opentelemetry/semantic-conventions");
|
|
73
78
|
var import_fast_safe_stringify = __toESM(require("fast-safe-stringify"));
|
|
@@ -637,21 +642,29 @@ var getResource = async () => {
|
|
|
637
642
|
};
|
|
638
643
|
|
|
639
644
|
// src/otel.ts
|
|
640
|
-
import_api3.diag.setLogger(new import_api3.DiagConsoleLogger(), import_api3.DiagLogLevel.ERROR);
|
|
641
645
|
var initialization;
|
|
642
646
|
async function initialize() {
|
|
643
647
|
if (!initialization) {
|
|
644
|
-
|
|
648
|
+
import_api3.diag.setLogger(new import_api3.DiagConsoleLogger(), import_api3.DiagLogLevel.ERROR);
|
|
649
|
+
initialization = initializeOtel();
|
|
645
650
|
}
|
|
646
651
|
return initialization;
|
|
647
652
|
}
|
|
648
|
-
|
|
653
|
+
function isInitialized() {
|
|
654
|
+
return initialization !== void 0;
|
|
655
|
+
}
|
|
656
|
+
async function initializeOtel() {
|
|
649
657
|
try {
|
|
650
658
|
const serviceName = process.env.OTEL_SERVICE_NAME ?? "unknown-service";
|
|
651
659
|
const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
660
|
+
const isTestMode = process.env.NODE_ENV === "test" || process.env.VITEST === "true";
|
|
652
661
|
const resource = await getResource();
|
|
653
|
-
|
|
654
|
-
|
|
662
|
+
let logProvider;
|
|
663
|
+
const shouldSetupLogProvider = !isTestMode || !!process.env.LOG_LEVEL;
|
|
664
|
+
if (shouldSetupLogProvider) {
|
|
665
|
+
logProvider = getLogProvider(resource, otlpEndpoint);
|
|
666
|
+
import_api_logs.logs.setGlobalLoggerProvider(logProvider);
|
|
667
|
+
}
|
|
655
668
|
const spanProcessor = getSpanProcessor(otlpEndpoint);
|
|
656
669
|
const metricReader = getMetricReader(otlpEndpoint);
|
|
657
670
|
const sdk = new import_sdk_node.NodeSDK({
|
|
@@ -664,34 +677,37 @@ async function _initialize() {
|
|
|
664
677
|
console.log(`[otel] Telemetry initialized for "${serviceName}"`);
|
|
665
678
|
process.on("SIGTERM", async () => {
|
|
666
679
|
console.log("[otel] Shutting down...");
|
|
667
|
-
|
|
680
|
+
const shutdownPromises = [sdk.shutdown()];
|
|
681
|
+
if (logProvider) {
|
|
682
|
+
shutdownPromises.push(logProvider.shutdown());
|
|
683
|
+
}
|
|
684
|
+
await Promise.all(shutdownPromises);
|
|
668
685
|
console.log("[otel] Shutdown complete.");
|
|
669
686
|
process.exit(0);
|
|
670
687
|
});
|
|
671
688
|
} catch (err) {
|
|
672
|
-
|
|
689
|
+
if (err instanceof Error && err.message.includes("duplicate registration")) {
|
|
690
|
+
console.warn("[otel] Warning - API already registered, continuing...");
|
|
691
|
+
} else {
|
|
692
|
+
console.error("[otel] Startup error:", err);
|
|
693
|
+
}
|
|
673
694
|
}
|
|
674
695
|
}
|
|
675
696
|
|
|
676
697
|
// src/logger.ts
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
698
|
+
function getLogger(serviceOverride, extraAttrs = {}, testProvider) {
|
|
699
|
+
if (!isInitialized()) {
|
|
700
|
+
throw new Error(
|
|
701
|
+
"OpenTelemetry is not initialized. Please call initialize() before getting a logger."
|
|
702
|
+
);
|
|
703
|
+
}
|
|
680
704
|
const { systemName, systemVersion, resourceAttributes } = detectTelemetryContext(serviceOverride);
|
|
681
705
|
const defaultAttrs = {
|
|
682
706
|
...resourceAttributes,
|
|
683
707
|
...extraAttrs
|
|
684
708
|
};
|
|
685
|
-
let isInitialized = false;
|
|
686
709
|
function emit(severityText, body, attrs = {}) {
|
|
687
|
-
|
|
688
|
-
initialize().then(() => {
|
|
689
|
-
isInitialized = true;
|
|
690
|
-
emit(severityText, body, attrs);
|
|
691
|
-
});
|
|
692
|
-
return;
|
|
693
|
-
}
|
|
694
|
-
const logger = import_api_logs2.logs.getLogger(systemName, systemVersion);
|
|
710
|
+
const logger = testProvider ? testProvider.getLogger(systemName, systemVersion) : import_api_logs2.logs.getLogger(systemName, systemVersion);
|
|
695
711
|
const span = import_api4.trace.getSpan(import_api4.context.active());
|
|
696
712
|
const spanContext = span?.spanContext();
|
|
697
713
|
logger.emit({
|
|
@@ -826,12 +842,10 @@ function extractArgs(spanOptionsSpanOrFunc, spanOrFunc, func) {
|
|
|
826
842
|
var isFunction = (value) => typeof value === "function";
|
|
827
843
|
var isSpan = (value) => value !== null && value !== void 0 && isFunction(value.spanContext) && isFunction(value.end);
|
|
828
844
|
var isSpanOptions = (value) => value !== null && value !== void 0 && (!!value.startTime || !!value.attributes || !!value.kind) && !isSpan(value);
|
|
829
|
-
|
|
830
|
-
// src/index.ts
|
|
831
|
-
initialize();
|
|
832
845
|
// Annotate the CommonJS export names for ESM import in node:
|
|
833
846
|
0 && (module.exports = {
|
|
834
847
|
getLogger,
|
|
835
848
|
getMeter,
|
|
836
|
-
getTracer
|
|
849
|
+
getTracer,
|
|
850
|
+
initialize
|
|
837
851
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
// src/logger.ts
|
|
2
|
+
import { context, trace } from "@opentelemetry/api";
|
|
3
|
+
import { logs as logs2 } from "@opentelemetry/api-logs";
|
|
4
|
+
|
|
5
|
+
// src/consts.ts
|
|
6
|
+
var LOG_SEVERITY_MAP = {
|
|
7
|
+
TRACE: 1,
|
|
8
|
+
DEBUG: 5,
|
|
9
|
+
INFO: 9,
|
|
10
|
+
NOTICE: 10,
|
|
11
|
+
WARNING: 13,
|
|
12
|
+
WARN: 13,
|
|
13
|
+
ERROR: 17,
|
|
14
|
+
FATAL: 21,
|
|
15
|
+
CRITICAL: 21,
|
|
16
|
+
ALERT: 22,
|
|
17
|
+
EMERGENCY: 23
|
|
18
|
+
};
|
|
19
|
+
|
|
1
20
|
// src/otel.ts
|
|
2
21
|
import { DiagConsoleLogger, DiagLogLevel, diag } from "@opentelemetry/api";
|
|
3
22
|
import { logs } from "@opentelemetry/api-logs";
|
|
@@ -21,21 +40,6 @@ import {
|
|
|
21
40
|
// src/loggers/console-log-pretty-exporter.ts
|
|
22
41
|
import { ExportResultCode } from "@opentelemetry/core";
|
|
23
42
|
|
|
24
|
-
// src/consts.ts
|
|
25
|
-
var LOG_SEVERITY_MAP = {
|
|
26
|
-
TRACE: 1,
|
|
27
|
-
DEBUG: 5,
|
|
28
|
-
INFO: 9,
|
|
29
|
-
NOTICE: 10,
|
|
30
|
-
WARNING: 13,
|
|
31
|
-
WARN: 13,
|
|
32
|
-
ERROR: 17,
|
|
33
|
-
FATAL: 21,
|
|
34
|
-
CRITICAL: 21,
|
|
35
|
-
ALERT: 22,
|
|
36
|
-
EMERGENCY: 23
|
|
37
|
-
};
|
|
38
|
-
|
|
39
43
|
// src/loggers/formatters/shared.ts
|
|
40
44
|
import {
|
|
41
45
|
ATTR_SERVICE_NAME,
|
|
@@ -614,21 +618,29 @@ var getResource = async () => {
|
|
|
614
618
|
};
|
|
615
619
|
|
|
616
620
|
// src/otel.ts
|
|
617
|
-
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR);
|
|
618
621
|
var initialization;
|
|
619
622
|
async function initialize() {
|
|
620
623
|
if (!initialization) {
|
|
621
|
-
|
|
624
|
+
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR);
|
|
625
|
+
initialization = initializeOtel();
|
|
622
626
|
}
|
|
623
627
|
return initialization;
|
|
624
628
|
}
|
|
625
|
-
|
|
629
|
+
function isInitialized() {
|
|
630
|
+
return initialization !== void 0;
|
|
631
|
+
}
|
|
632
|
+
async function initializeOtel() {
|
|
626
633
|
try {
|
|
627
634
|
const serviceName = process.env.OTEL_SERVICE_NAME ?? "unknown-service";
|
|
628
635
|
const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
636
|
+
const isTestMode = process.env.NODE_ENV === "test" || process.env.VITEST === "true";
|
|
629
637
|
const resource = await getResource();
|
|
630
|
-
|
|
631
|
-
|
|
638
|
+
let logProvider;
|
|
639
|
+
const shouldSetupLogProvider = !isTestMode || !!process.env.LOG_LEVEL;
|
|
640
|
+
if (shouldSetupLogProvider) {
|
|
641
|
+
logProvider = getLogProvider(resource, otlpEndpoint);
|
|
642
|
+
logs.setGlobalLoggerProvider(logProvider);
|
|
643
|
+
}
|
|
632
644
|
const spanProcessor = getSpanProcessor(otlpEndpoint);
|
|
633
645
|
const metricReader = getMetricReader(otlpEndpoint);
|
|
634
646
|
const sdk = new NodeSDK({
|
|
@@ -641,34 +653,37 @@ async function _initialize() {
|
|
|
641
653
|
console.log(`[otel] Telemetry initialized for "${serviceName}"`);
|
|
642
654
|
process.on("SIGTERM", async () => {
|
|
643
655
|
console.log("[otel] Shutting down...");
|
|
644
|
-
|
|
656
|
+
const shutdownPromises = [sdk.shutdown()];
|
|
657
|
+
if (logProvider) {
|
|
658
|
+
shutdownPromises.push(logProvider.shutdown());
|
|
659
|
+
}
|
|
660
|
+
await Promise.all(shutdownPromises);
|
|
645
661
|
console.log("[otel] Shutdown complete.");
|
|
646
662
|
process.exit(0);
|
|
647
663
|
});
|
|
648
664
|
} catch (err) {
|
|
649
|
-
|
|
665
|
+
if (err instanceof Error && err.message.includes("duplicate registration")) {
|
|
666
|
+
console.warn("[otel] Warning - API already registered, continuing...");
|
|
667
|
+
} else {
|
|
668
|
+
console.error("[otel] Startup error:", err);
|
|
669
|
+
}
|
|
650
670
|
}
|
|
651
671
|
}
|
|
652
672
|
|
|
653
673
|
// src/logger.ts
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
674
|
+
function getLogger(serviceOverride, extraAttrs = {}, testProvider) {
|
|
675
|
+
if (!isInitialized()) {
|
|
676
|
+
throw new Error(
|
|
677
|
+
"OpenTelemetry is not initialized. Please call initialize() before getting a logger."
|
|
678
|
+
);
|
|
679
|
+
}
|
|
657
680
|
const { systemName, systemVersion, resourceAttributes } = detectTelemetryContext(serviceOverride);
|
|
658
681
|
const defaultAttrs = {
|
|
659
682
|
...resourceAttributes,
|
|
660
683
|
...extraAttrs
|
|
661
684
|
};
|
|
662
|
-
let isInitialized = false;
|
|
663
685
|
function emit(severityText, body, attrs = {}) {
|
|
664
|
-
|
|
665
|
-
initialize().then(() => {
|
|
666
|
-
isInitialized = true;
|
|
667
|
-
emit(severityText, body, attrs);
|
|
668
|
-
});
|
|
669
|
-
return;
|
|
670
|
-
}
|
|
671
|
-
const logger = logs2.getLogger(systemName, systemVersion);
|
|
686
|
+
const logger = testProvider ? testProvider.getLogger(systemName, systemVersion) : logs2.getLogger(systemName, systemVersion);
|
|
672
687
|
const span = trace.getSpan(context.active());
|
|
673
688
|
const spanContext = span?.spanContext();
|
|
674
689
|
logger.emit({
|
|
@@ -807,11 +822,9 @@ function extractArgs(spanOptionsSpanOrFunc, spanOrFunc, func) {
|
|
|
807
822
|
var isFunction = (value) => typeof value === "function";
|
|
808
823
|
var isSpan = (value) => value !== null && value !== void 0 && isFunction(value.spanContext) && isFunction(value.end);
|
|
809
824
|
var isSpanOptions = (value) => value !== null && value !== void 0 && (!!value.startTime || !!value.attributes || !!value.kind) && !isSpan(value);
|
|
810
|
-
|
|
811
|
-
// src/index.ts
|
|
812
|
-
initialize();
|
|
813
825
|
export {
|
|
814
826
|
getLogger,
|
|
815
827
|
getMeter,
|
|
816
|
-
getTracer
|
|
828
|
+
getTracer,
|
|
829
|
+
initialize
|
|
817
830
|
};
|