@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 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 isInitialized = false;
622
+ var initialization;
624
623
  async function initialize() {
625
- if (isInitialized) {
626
- return;
624
+ if (!initialization) {
625
+ initialization = _initialize();
627
626
  }
628
- isInitialized = true;
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 isInitialized = false;
599
+ var initialization;
606
600
  async function initialize() {
607
- if (isInitialized) {
608
- return;
601
+ if (!initialization) {
602
+ initialization = _initialize();
609
603
  }
610
- isInitialized = true;
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 as context2, trace } from "@opentelemetry/api";
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
- const span = trace.getSpan(context2.active());
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 context3,
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(context3.active(), parent) : context3.active();
715
+ const parentContext = parent ? trace2.setSpan(context2.active(), parent) : context2.active();
713
716
  const span = tracer.startSpan(name, options, parentContext);
714
- return await context3.with(trace2.setSpan(parentContext, span), async () => {
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(context3.active(), parent) : context3.active();
738
+ const parentContext = parent ? trace2.setSpan(context2.active(), parent) : context2.active();
736
739
  const span = tracer.startSpan(name, options, parentContext);
737
- return context3.with(trace2.setSpan(parentContext, span), () => {
740
+ return context2.with(trace2.setSpan(parentContext, span), () => {
738
741
  try {
739
742
  const result = fn(span);
740
743
  span.setStatus({ code: SpanStatusCode3.OK });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebspark/otel",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",