@sebspark/otel 0.2.1 → 0.2.3
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/README.md +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +19 -11
- package/dist/index.mjs +27 -24
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -61,7 +61,7 @@ Logs inside active spans automatically include:
|
|
|
61
61
|
```ts
|
|
62
62
|
import { getTracer } from '@sebspark/otel'
|
|
63
63
|
|
|
64
|
-
const tracer = getTracer()
|
|
64
|
+
const tracer = getTracer() // async to ensure otel initialization
|
|
65
65
|
|
|
66
66
|
await tracer.withTrace('trace.name', async (span) => {
|
|
67
67
|
span.setAttribute('user.id', '123')
|
|
@@ -111,7 +111,7 @@ span.end()
|
|
|
111
111
|
```ts
|
|
112
112
|
import { getMeter } from '@sebspark/otel'
|
|
113
113
|
|
|
114
|
-
const meter = getMeter()
|
|
114
|
+
const meter = getMeter() // async to ensure otel initialization
|
|
115
115
|
|
|
116
116
|
const counter = meter.createCounter('http_requests_total', {
|
|
117
117
|
description: 'Total number of HTTP requests',
|
package/dist/index.d.mts
CHANGED
|
@@ -13,7 +13,7 @@ declare function getLogger(serviceOverride?: string, extraAttrs?: Attrs): {
|
|
|
13
13
|
emergency: (msg: string, attrs?: Attrs) => void;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
declare function getMeter(componentNameOverride?: string): _opentelemetry_api.Meter
|
|
16
|
+
declare function getMeter(componentNameOverride?: string): Promise<_opentelemetry_api.Meter>;
|
|
17
17
|
|
|
18
18
|
type OtelTracer = ReturnType<typeof trace.getTracer>;
|
|
19
19
|
type Span = ReturnType<OtelTracer['startSpan']>;
|
|
@@ -45,6 +45,6 @@ interface Tracer extends OtelTracer {
|
|
|
45
45
|
* @param serviceOverride - Optional override for service name
|
|
46
46
|
* @returns Tracer with helpers
|
|
47
47
|
*/
|
|
48
|
-
declare function getTracer(componentNameOverride?: string): Tracer
|
|
48
|
+
declare function getTracer(componentNameOverride?: string): Promise<Tracer>;
|
|
49
49
|
|
|
50
50
|
export { getLogger, getMeter, getTracer };
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ declare function getLogger(serviceOverride?: string, extraAttrs?: Attrs): {
|
|
|
13
13
|
emergency: (msg: string, attrs?: Attrs) => void;
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
declare function getMeter(componentNameOverride?: string): _opentelemetry_api.Meter
|
|
16
|
+
declare function getMeter(componentNameOverride?: string): Promise<_opentelemetry_api.Meter>;
|
|
17
17
|
|
|
18
18
|
type OtelTracer = ReturnType<typeof trace.getTracer>;
|
|
19
19
|
type Span = ReturnType<OtelTracer['startSpan']>;
|
|
@@ -45,6 +45,6 @@ interface Tracer extends OtelTracer {
|
|
|
45
45
|
* @param serviceOverride - Optional override for service name
|
|
46
46
|
* @returns Tracer with helpers
|
|
47
47
|
*/
|
|
48
|
-
declare function getTracer(componentNameOverride?: string): Tracer
|
|
48
|
+
declare function getTracer(componentNameOverride?: string): Promise<Tracer>;
|
|
49
49
|
|
|
50
50
|
export { getLogger, getMeter, getTracer };
|
package/dist/index.js
CHANGED
|
@@ -40,7 +40,6 @@ module.exports = __toCommonJS(index_exports);
|
|
|
40
40
|
var import_api3 = require("@opentelemetry/api");
|
|
41
41
|
var import_api_logs = require("@opentelemetry/api-logs");
|
|
42
42
|
var import_auto_instrumentations_node = require("@opentelemetry/auto-instrumentations-node");
|
|
43
|
-
var import_context_async_hooks = require("@opentelemetry/context-async-hooks");
|
|
44
43
|
var import_sdk_node = require("@opentelemetry/sdk-node");
|
|
45
44
|
|
|
46
45
|
// src/providers.ts
|
|
@@ -620,24 +619,23 @@ var getResource = async () => {
|
|
|
620
619
|
|
|
621
620
|
// src/otel.ts
|
|
622
621
|
import_api3.diag.setLogger(new import_api3.DiagConsoleLogger(), import_api3.DiagLogLevel.ERROR);
|
|
623
|
-
var
|
|
622
|
+
var initialization;
|
|
624
623
|
async function initialize() {
|
|
625
|
-
if (
|
|
626
|
-
|
|
624
|
+
if (!initialization) {
|
|
625
|
+
initialization = _initialize();
|
|
627
626
|
}
|
|
628
|
-
|
|
627
|
+
return initialization;
|
|
628
|
+
}
|
|
629
|
+
async function _initialize() {
|
|
629
630
|
try {
|
|
630
631
|
const serviceName = process.env.OTEL_SERVICE_NAME ?? "unknown-service";
|
|
631
632
|
const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
632
633
|
const resource = await getResource();
|
|
633
|
-
const contextManager = new import_context_async_hooks.AsyncLocalStorageContextManager().enable();
|
|
634
|
-
import_api3.context.setGlobalContextManager(contextManager);
|
|
635
634
|
const logProvider = getLogProvider(resource, otlpEndpoint);
|
|
636
635
|
import_api_logs.logs.setGlobalLoggerProvider(logProvider);
|
|
637
636
|
const spanProcessor = getSpanProcessor(otlpEndpoint);
|
|
638
637
|
const metricReader = getMetricReader(otlpEndpoint);
|
|
639
638
|
const sdk = new import_sdk_node.NodeSDK({
|
|
640
|
-
contextManager,
|
|
641
639
|
spanProcessor,
|
|
642
640
|
metricReader,
|
|
643
641
|
instrumentations: [(0, import_auto_instrumentations_node.getNodeAutoInstrumentations)()],
|
|
@@ -661,12 +659,20 @@ var import_api4 = require("@opentelemetry/api");
|
|
|
661
659
|
var import_api_logs2 = require("@opentelemetry/api-logs");
|
|
662
660
|
function getLogger(serviceOverride, extraAttrs = {}) {
|
|
663
661
|
const { systemName, systemVersion, resourceAttributes } = detectTelemetryContext(serviceOverride);
|
|
664
|
-
const logger = import_api_logs2.logs.getLogger(systemName, systemVersion);
|
|
665
662
|
const defaultAttrs = {
|
|
666
663
|
...resourceAttributes,
|
|
667
664
|
...extraAttrs
|
|
668
665
|
};
|
|
666
|
+
let isInitialized = false;
|
|
669
667
|
function emit(severityText, body, attrs = {}) {
|
|
668
|
+
if (!isInitialized) {
|
|
669
|
+
initialize().then(() => {
|
|
670
|
+
isInitialized = true;
|
|
671
|
+
emit(severityText, body, attrs);
|
|
672
|
+
});
|
|
673
|
+
return;
|
|
674
|
+
}
|
|
675
|
+
const logger = import_api_logs2.logs.getLogger(systemName, systemVersion);
|
|
670
676
|
const span = import_api4.trace.getSpan(import_api4.context.active());
|
|
671
677
|
const spanContext = span?.spanContext();
|
|
672
678
|
logger.emit({
|
|
@@ -700,7 +706,8 @@ function getLogger(serviceOverride, extraAttrs = {}) {
|
|
|
700
706
|
|
|
701
707
|
// src/metrics.ts
|
|
702
708
|
var import_api5 = require("@opentelemetry/api");
|
|
703
|
-
function getMeter(componentNameOverride) {
|
|
709
|
+
async function getMeter(componentNameOverride) {
|
|
710
|
+
await initialize();
|
|
704
711
|
const { componentName, systemName, systemVersion } = detectTelemetryContext(
|
|
705
712
|
componentNameOverride
|
|
706
713
|
);
|
|
@@ -709,7 +716,8 @@ function getMeter(componentNameOverride) {
|
|
|
709
716
|
|
|
710
717
|
// src/tracer.ts
|
|
711
718
|
var import_api6 = require("@opentelemetry/api");
|
|
712
|
-
function getTracer(componentNameOverride) {
|
|
719
|
+
async function getTracer(componentNameOverride) {
|
|
720
|
+
await initialize();
|
|
713
721
|
const { componentName, systemName, systemVersion } = detectTelemetryContext(
|
|
714
722
|
componentNameOverride
|
|
715
723
|
);
|
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
// src/otel.ts
|
|
2
|
-
import {
|
|
3
|
-
context,
|
|
4
|
-
DiagConsoleLogger,
|
|
5
|
-
DiagLogLevel,
|
|
6
|
-
diag
|
|
7
|
-
} from "@opentelemetry/api";
|
|
2
|
+
import { DiagConsoleLogger, DiagLogLevel, diag } from "@opentelemetry/api";
|
|
8
3
|
import { logs } from "@opentelemetry/api-logs";
|
|
9
4
|
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
|
|
10
|
-
import { AsyncLocalStorageContextManager } from "@opentelemetry/context-async-hooks";
|
|
11
5
|
import { NodeSDK } from "@opentelemetry/sdk-node";
|
|
12
6
|
|
|
13
7
|
// src/providers.ts
|
|
@@ -602,24 +596,23 @@ var getResource = async () => {
|
|
|
602
596
|
|
|
603
597
|
// src/otel.ts
|
|
604
598
|
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR);
|
|
605
|
-
var
|
|
599
|
+
var initialization;
|
|
606
600
|
async function initialize() {
|
|
607
|
-
if (
|
|
608
|
-
|
|
601
|
+
if (!initialization) {
|
|
602
|
+
initialization = _initialize();
|
|
609
603
|
}
|
|
610
|
-
|
|
604
|
+
return initialization;
|
|
605
|
+
}
|
|
606
|
+
async function _initialize() {
|
|
611
607
|
try {
|
|
612
608
|
const serviceName = process.env.OTEL_SERVICE_NAME ?? "unknown-service";
|
|
613
609
|
const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
614
610
|
const resource = await getResource();
|
|
615
|
-
const contextManager = new AsyncLocalStorageContextManager().enable();
|
|
616
|
-
context.setGlobalContextManager(contextManager);
|
|
617
611
|
const logProvider = getLogProvider(resource, otlpEndpoint);
|
|
618
612
|
logs.setGlobalLoggerProvider(logProvider);
|
|
619
613
|
const spanProcessor = getSpanProcessor(otlpEndpoint);
|
|
620
614
|
const metricReader = getMetricReader(otlpEndpoint);
|
|
621
615
|
const sdk = new NodeSDK({
|
|
622
|
-
contextManager,
|
|
623
616
|
spanProcessor,
|
|
624
617
|
metricReader,
|
|
625
618
|
instrumentations: [getNodeAutoInstrumentations()],
|
|
@@ -639,17 +632,25 @@ async function initialize() {
|
|
|
639
632
|
}
|
|
640
633
|
|
|
641
634
|
// src/logger.ts
|
|
642
|
-
import { context
|
|
635
|
+
import { context, trace } from "@opentelemetry/api";
|
|
643
636
|
import { logs as logs2 } from "@opentelemetry/api-logs";
|
|
644
637
|
function getLogger(serviceOverride, extraAttrs = {}) {
|
|
645
638
|
const { systemName, systemVersion, resourceAttributes } = detectTelemetryContext(serviceOverride);
|
|
646
|
-
const logger = logs2.getLogger(systemName, systemVersion);
|
|
647
639
|
const defaultAttrs = {
|
|
648
640
|
...resourceAttributes,
|
|
649
641
|
...extraAttrs
|
|
650
642
|
};
|
|
643
|
+
let isInitialized = false;
|
|
651
644
|
function emit(severityText, body, attrs = {}) {
|
|
652
|
-
|
|
645
|
+
if (!isInitialized) {
|
|
646
|
+
initialize().then(() => {
|
|
647
|
+
isInitialized = true;
|
|
648
|
+
emit(severityText, body, attrs);
|
|
649
|
+
});
|
|
650
|
+
return;
|
|
651
|
+
}
|
|
652
|
+
const logger = logs2.getLogger(systemName, systemVersion);
|
|
653
|
+
const span = trace.getSpan(context.active());
|
|
653
654
|
const spanContext = span?.spanContext();
|
|
654
655
|
logger.emit({
|
|
655
656
|
severityText,
|
|
@@ -682,7 +683,8 @@ function getLogger(serviceOverride, extraAttrs = {}) {
|
|
|
682
683
|
|
|
683
684
|
// src/metrics.ts
|
|
684
685
|
import { metrics } from "@opentelemetry/api";
|
|
685
|
-
function getMeter(componentNameOverride) {
|
|
686
|
+
async function getMeter(componentNameOverride) {
|
|
687
|
+
await initialize();
|
|
686
688
|
const { componentName, systemName, systemVersion } = detectTelemetryContext(
|
|
687
689
|
componentNameOverride
|
|
688
690
|
);
|
|
@@ -691,11 +693,12 @@ function getMeter(componentNameOverride) {
|
|
|
691
693
|
|
|
692
694
|
// src/tracer.ts
|
|
693
695
|
import {
|
|
694
|
-
context as
|
|
696
|
+
context as context2,
|
|
695
697
|
SpanStatusCode as SpanStatusCode3,
|
|
696
698
|
trace as trace2
|
|
697
699
|
} from "@opentelemetry/api";
|
|
698
|
-
function getTracer(componentNameOverride) {
|
|
700
|
+
async function getTracer(componentNameOverride) {
|
|
701
|
+
await initialize();
|
|
699
702
|
const { componentName, systemName, systemVersion } = detectTelemetryContext(
|
|
700
703
|
componentNameOverride
|
|
701
704
|
);
|
|
@@ -709,9 +712,9 @@ function getTracer(componentNameOverride) {
|
|
|
709
712
|
spanOrFunc,
|
|
710
713
|
func
|
|
711
714
|
);
|
|
712
|
-
const parentContext = parent ? trace2.setSpan(
|
|
715
|
+
const parentContext = parent ? trace2.setSpan(context2.active(), parent) : context2.active();
|
|
713
716
|
const span = tracer.startSpan(name, options, parentContext);
|
|
714
|
-
return await
|
|
717
|
+
return await context2.with(trace2.setSpan(parentContext, span), async () => {
|
|
715
718
|
try {
|
|
716
719
|
const result = await fn(span);
|
|
717
720
|
span.setStatus({ code: SpanStatusCode3.OK });
|
|
@@ -732,9 +735,9 @@ function getTracer(componentNameOverride) {
|
|
|
732
735
|
spanOrFunc,
|
|
733
736
|
func
|
|
734
737
|
);
|
|
735
|
-
const parentContext = parent ? trace2.setSpan(
|
|
738
|
+
const parentContext = parent ? trace2.setSpan(context2.active(), parent) : context2.active();
|
|
736
739
|
const span = tracer.startSpan(name, options, parentContext);
|
|
737
|
-
return
|
|
740
|
+
return context2.with(trace2.setSpan(parentContext, span), () => {
|
|
738
741
|
try {
|
|
739
742
|
const result = fn(span);
|
|
740
743
|
span.setStatus({ code: SpanStatusCode3.OK });
|