@sebspark/otel 0.2.2 → 0.2.4
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 +28 -10
- package/dist/index.mjs +36 -22
- 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
|
@@ -614,17 +614,22 @@ var getResource = async () => {
|
|
|
614
614
|
const { resourceAttributes } = detectTelemetryContext();
|
|
615
615
|
const customRes = (0, import_resources.resourceFromAttributes)(resourceAttributes);
|
|
616
616
|
const resource = baseRes.merge(customRes);
|
|
617
|
+
if (resource.waitForAsyncAttributes) {
|
|
618
|
+
await resource.waitForAsyncAttributes();
|
|
619
|
+
}
|
|
617
620
|
return resource;
|
|
618
621
|
};
|
|
619
622
|
|
|
620
623
|
// src/otel.ts
|
|
621
624
|
import_api3.diag.setLogger(new import_api3.DiagConsoleLogger(), import_api3.DiagLogLevel.ERROR);
|
|
622
|
-
var
|
|
625
|
+
var initialization;
|
|
623
626
|
async function initialize() {
|
|
624
|
-
if (
|
|
625
|
-
|
|
627
|
+
if (!initialization) {
|
|
628
|
+
initialization = _initialize();
|
|
626
629
|
}
|
|
627
|
-
|
|
630
|
+
return initialization;
|
|
631
|
+
}
|
|
632
|
+
async function _initialize() {
|
|
628
633
|
try {
|
|
629
634
|
const serviceName = process.env.OTEL_SERVICE_NAME ?? "unknown-service";
|
|
630
635
|
const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
@@ -657,12 +662,20 @@ var import_api4 = require("@opentelemetry/api");
|
|
|
657
662
|
var import_api_logs2 = require("@opentelemetry/api-logs");
|
|
658
663
|
function getLogger(serviceOverride, extraAttrs = {}) {
|
|
659
664
|
const { systemName, systemVersion, resourceAttributes } = detectTelemetryContext(serviceOverride);
|
|
660
|
-
const logger = import_api_logs2.logs.getLogger(systemName, systemVersion);
|
|
661
665
|
const defaultAttrs = {
|
|
662
666
|
...resourceAttributes,
|
|
663
667
|
...extraAttrs
|
|
664
668
|
};
|
|
669
|
+
let isInitialized = false;
|
|
665
670
|
function emit(severityText, body, attrs = {}) {
|
|
671
|
+
if (!isInitialized) {
|
|
672
|
+
initialize().then(() => {
|
|
673
|
+
isInitialized = true;
|
|
674
|
+
emit(severityText, body, attrs);
|
|
675
|
+
});
|
|
676
|
+
return;
|
|
677
|
+
}
|
|
678
|
+
const logger = import_api_logs2.logs.getLogger(systemName, systemVersion);
|
|
666
679
|
const span = import_api4.trace.getSpan(import_api4.context.active());
|
|
667
680
|
const spanContext = span?.spanContext();
|
|
668
681
|
logger.emit({
|
|
@@ -696,7 +709,8 @@ function getLogger(serviceOverride, extraAttrs = {}) {
|
|
|
696
709
|
|
|
697
710
|
// src/metrics.ts
|
|
698
711
|
var import_api5 = require("@opentelemetry/api");
|
|
699
|
-
function getMeter(componentNameOverride) {
|
|
712
|
+
async function getMeter(componentNameOverride) {
|
|
713
|
+
await initialize();
|
|
700
714
|
const { componentName, systemName, systemVersion } = detectTelemetryContext(
|
|
701
715
|
componentNameOverride
|
|
702
716
|
);
|
|
@@ -705,7 +719,8 @@ function getMeter(componentNameOverride) {
|
|
|
705
719
|
|
|
706
720
|
// src/tracer.ts
|
|
707
721
|
var import_api6 = require("@opentelemetry/api");
|
|
708
|
-
function getTracer(componentNameOverride) {
|
|
722
|
+
async function getTracer(componentNameOverride) {
|
|
723
|
+
await initialize();
|
|
709
724
|
const { componentName, systemName, systemVersion } = detectTelemetryContext(
|
|
710
725
|
componentNameOverride
|
|
711
726
|
);
|
|
@@ -767,11 +782,11 @@ function extractArgs(spanOptionsSpanOrFunc, spanOrFunc, func) {
|
|
|
767
782
|
let options = {};
|
|
768
783
|
let parent;
|
|
769
784
|
let fn;
|
|
770
|
-
if (
|
|
785
|
+
if (isFunction(spanOptionsSpanOrFunc)) {
|
|
771
786
|
fn = spanOptionsSpanOrFunc;
|
|
772
|
-
} else if (
|
|
787
|
+
} else if (isFunction(spanOrFunc)) {
|
|
773
788
|
const spanOrSpanOptions = spanOptionsSpanOrFunc;
|
|
774
|
-
if (
|
|
789
|
+
if (isSpanOptions(spanOrSpanOptions)) {
|
|
775
790
|
options = spanOrSpanOptions;
|
|
776
791
|
} else {
|
|
777
792
|
parent = spanOrSpanOptions;
|
|
@@ -784,6 +799,9 @@ function extractArgs(spanOptionsSpanOrFunc, spanOrFunc, func) {
|
|
|
784
799
|
}
|
|
785
800
|
return { options, parent, fn };
|
|
786
801
|
}
|
|
802
|
+
var isFunction = (value) => typeof value === "function";
|
|
803
|
+
var isSpan = (value) => value !== null && value !== void 0 && isFunction(value.spanContext) && isFunction(value.end);
|
|
804
|
+
var isSpanOptions = (value) => value !== null && value !== void 0 && (!!value.startTime || !!value.attributes || !!value.kind) && !isSpan(value);
|
|
787
805
|
|
|
788
806
|
// src/index.ts
|
|
789
807
|
initialize();
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
// src/otel.ts
|
|
2
|
-
import {
|
|
3
|
-
DiagConsoleLogger,
|
|
4
|
-
DiagLogLevel,
|
|
5
|
-
diag
|
|
6
|
-
} from "@opentelemetry/api";
|
|
2
|
+
import { DiagConsoleLogger, DiagLogLevel, diag } from "@opentelemetry/api";
|
|
7
3
|
import { logs } from "@opentelemetry/api-logs";
|
|
8
4
|
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
|
|
9
5
|
import { NodeSDK } from "@opentelemetry/sdk-node";
|
|
@@ -595,17 +591,22 @@ var getResource = async () => {
|
|
|
595
591
|
const { resourceAttributes } = detectTelemetryContext();
|
|
596
592
|
const customRes = resourceFromAttributes(resourceAttributes);
|
|
597
593
|
const resource = baseRes.merge(customRes);
|
|
594
|
+
if (resource.waitForAsyncAttributes) {
|
|
595
|
+
await resource.waitForAsyncAttributes();
|
|
596
|
+
}
|
|
598
597
|
return resource;
|
|
599
598
|
};
|
|
600
599
|
|
|
601
600
|
// src/otel.ts
|
|
602
601
|
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR);
|
|
603
|
-
var
|
|
602
|
+
var initialization;
|
|
604
603
|
async function initialize() {
|
|
605
|
-
if (
|
|
606
|
-
|
|
604
|
+
if (!initialization) {
|
|
605
|
+
initialization = _initialize();
|
|
607
606
|
}
|
|
608
|
-
|
|
607
|
+
return initialization;
|
|
608
|
+
}
|
|
609
|
+
async function _initialize() {
|
|
609
610
|
try {
|
|
610
611
|
const serviceName = process.env.OTEL_SERVICE_NAME ?? "unknown-service";
|
|
611
612
|
const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
@@ -634,17 +635,25 @@ async function initialize() {
|
|
|
634
635
|
}
|
|
635
636
|
|
|
636
637
|
// src/logger.ts
|
|
637
|
-
import { context
|
|
638
|
+
import { context, trace } from "@opentelemetry/api";
|
|
638
639
|
import { logs as logs2 } from "@opentelemetry/api-logs";
|
|
639
640
|
function getLogger(serviceOverride, extraAttrs = {}) {
|
|
640
641
|
const { systemName, systemVersion, resourceAttributes } = detectTelemetryContext(serviceOverride);
|
|
641
|
-
const logger = logs2.getLogger(systemName, systemVersion);
|
|
642
642
|
const defaultAttrs = {
|
|
643
643
|
...resourceAttributes,
|
|
644
644
|
...extraAttrs
|
|
645
645
|
};
|
|
646
|
+
let isInitialized = false;
|
|
646
647
|
function emit(severityText, body, attrs = {}) {
|
|
647
|
-
|
|
648
|
+
if (!isInitialized) {
|
|
649
|
+
initialize().then(() => {
|
|
650
|
+
isInitialized = true;
|
|
651
|
+
emit(severityText, body, attrs);
|
|
652
|
+
});
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
const logger = logs2.getLogger(systemName, systemVersion);
|
|
656
|
+
const span = trace.getSpan(context.active());
|
|
648
657
|
const spanContext = span?.spanContext();
|
|
649
658
|
logger.emit({
|
|
650
659
|
severityText,
|
|
@@ -677,7 +686,8 @@ function getLogger(serviceOverride, extraAttrs = {}) {
|
|
|
677
686
|
|
|
678
687
|
// src/metrics.ts
|
|
679
688
|
import { metrics } from "@opentelemetry/api";
|
|
680
|
-
function getMeter(componentNameOverride) {
|
|
689
|
+
async function getMeter(componentNameOverride) {
|
|
690
|
+
await initialize();
|
|
681
691
|
const { componentName, systemName, systemVersion } = detectTelemetryContext(
|
|
682
692
|
componentNameOverride
|
|
683
693
|
);
|
|
@@ -686,11 +696,12 @@ function getMeter(componentNameOverride) {
|
|
|
686
696
|
|
|
687
697
|
// src/tracer.ts
|
|
688
698
|
import {
|
|
689
|
-
context as
|
|
699
|
+
context as context2,
|
|
690
700
|
SpanStatusCode as SpanStatusCode3,
|
|
691
701
|
trace as trace2
|
|
692
702
|
} from "@opentelemetry/api";
|
|
693
|
-
function getTracer(componentNameOverride) {
|
|
703
|
+
async function getTracer(componentNameOverride) {
|
|
704
|
+
await initialize();
|
|
694
705
|
const { componentName, systemName, systemVersion } = detectTelemetryContext(
|
|
695
706
|
componentNameOverride
|
|
696
707
|
);
|
|
@@ -704,9 +715,9 @@ function getTracer(componentNameOverride) {
|
|
|
704
715
|
spanOrFunc,
|
|
705
716
|
func
|
|
706
717
|
);
|
|
707
|
-
const parentContext = parent ? trace2.setSpan(
|
|
718
|
+
const parentContext = parent ? trace2.setSpan(context2.active(), parent) : context2.active();
|
|
708
719
|
const span = tracer.startSpan(name, options, parentContext);
|
|
709
|
-
return await
|
|
720
|
+
return await context2.with(trace2.setSpan(parentContext, span), async () => {
|
|
710
721
|
try {
|
|
711
722
|
const result = await fn(span);
|
|
712
723
|
span.setStatus({ code: SpanStatusCode3.OK });
|
|
@@ -727,9 +738,9 @@ function getTracer(componentNameOverride) {
|
|
|
727
738
|
spanOrFunc,
|
|
728
739
|
func
|
|
729
740
|
);
|
|
730
|
-
const parentContext = parent ? trace2.setSpan(
|
|
741
|
+
const parentContext = parent ? trace2.setSpan(context2.active(), parent) : context2.active();
|
|
731
742
|
const span = tracer.startSpan(name, options, parentContext);
|
|
732
|
-
return
|
|
743
|
+
return context2.with(trace2.setSpan(parentContext, span), () => {
|
|
733
744
|
try {
|
|
734
745
|
const result = fn(span);
|
|
735
746
|
span.setStatus({ code: SpanStatusCode3.OK });
|
|
@@ -752,11 +763,11 @@ function extractArgs(spanOptionsSpanOrFunc, spanOrFunc, func) {
|
|
|
752
763
|
let options = {};
|
|
753
764
|
let parent;
|
|
754
765
|
let fn;
|
|
755
|
-
if (
|
|
766
|
+
if (isFunction(spanOptionsSpanOrFunc)) {
|
|
756
767
|
fn = spanOptionsSpanOrFunc;
|
|
757
|
-
} else if (
|
|
768
|
+
} else if (isFunction(spanOrFunc)) {
|
|
758
769
|
const spanOrSpanOptions = spanOptionsSpanOrFunc;
|
|
759
|
-
if (
|
|
770
|
+
if (isSpanOptions(spanOrSpanOptions)) {
|
|
760
771
|
options = spanOrSpanOptions;
|
|
761
772
|
} else {
|
|
762
773
|
parent = spanOrSpanOptions;
|
|
@@ -769,6 +780,9 @@ function extractArgs(spanOptionsSpanOrFunc, spanOrFunc, func) {
|
|
|
769
780
|
}
|
|
770
781
|
return { options, parent, fn };
|
|
771
782
|
}
|
|
783
|
+
var isFunction = (value) => typeof value === "function";
|
|
784
|
+
var isSpan = (value) => value !== null && value !== void 0 && isFunction(value.spanContext) && isFunction(value.end);
|
|
785
|
+
var isSpanOptions = (value) => value !== null && value !== void 0 && (!!value.startTime || !!value.attributes || !!value.kind) && !isSpan(value);
|
|
772
786
|
|
|
773
787
|
// src/index.ts
|
|
774
788
|
initialize();
|