Skip to content

Commit 269e190

Browse files
committed
Merge branch 'fix/no-require' of https://github.com/timfish/opentelemetry-js into fix/no-require
2 parents 3f57eba + ead0231 commit 269e190

File tree

10 files changed

+171
-31
lines changed

10 files changed

+171
-31
lines changed

CHANGELOG.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/
1111

1212
### :rocket: (Enhancement)
1313

14-
feat(sdk-trace-base): log resource attributes in ConsoleSpanExporter [#4605](https://github.com/open-telemetry/opentelemetry-js/pull/4605) @pichlermarc
14+
* feat(sdk-trace-base): log resource attributes in ConsoleSpanExporter [#4605](https://github.com/open-telemetry/opentelemetry-js/pull/4605) @pichlermarc
15+
* feat(resources): new experimental detector ServiceInstanceIdDetectorSync that sets the value for `service.instance.id` as random UUID.
1516

1617
### :bug: (Bug Fix)
1718

experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts

+86-5
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import {
5959
processDetector,
6060
hostDetector,
6161
Resource,
62+
serviceInstanceIdDetectorSync,
6263
} from '@opentelemetry/resources';
6364
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
6465
import { logs } from '@opentelemetry/api-logs';
@@ -70,6 +71,7 @@ import {
7071
import {
7172
SEMRESATTRS_HOST_NAME,
7273
SEMRESATTRS_PROCESS_PID,
74+
SEMRESATTRS_SERVICE_INSTANCE_ID,
7375
} from '@opentelemetry/semantic-conventions';
7476

7577
const DefaultContextManager = semver.gte(process.version, '14.8.0')
@@ -126,6 +128,7 @@ describe('Node SDK', () => {
126128
assert.ok(!(metrics.getMeterProvider() instanceof MeterProvider));
127129
assert.ok(!(logs.getLoggerProvider() instanceof LoggerProvider));
128130
delete env.OTEL_TRACES_EXPORTER;
131+
await sdk.shutdown();
129132
});
130133

131134
it('should register a diag logger with OTEL_LOG_LEVEL', () => {
@@ -145,6 +148,7 @@ describe('Node SDK', () => {
145148
});
146149

147150
delete env.OTEL_LOG_LEVEL;
151+
sdk.shutdown();
148152
});
149153

150154
it('should not register a diag logger with OTEL_LOG_LEVEL unset', () => {
@@ -158,6 +162,7 @@ describe('Node SDK', () => {
158162
sdk.start();
159163

160164
assert.strictEqual(spy.callCount, 0);
165+
sdk.shutdown();
161166
});
162167

163168
it('should register a tracer provider if an exporter is provided', async () => {
@@ -180,6 +185,7 @@ describe('Node SDK', () => {
180185
const apiTracerProvider =
181186
trace.getTracerProvider() as ProxyTracerProvider;
182187
assert.ok(apiTracerProvider.getDelegate() instanceof NodeTracerProvider);
188+
await sdk.shutdown();
183189
});
184190

185191
it('should register a tracer provider if an exporter is provided via env', async () => {
@@ -203,6 +209,7 @@ describe('Node SDK', () => {
203209
trace.getTracerProvider() as ProxyTracerProvider;
204210
assert.ok(apiTracerProvider.getDelegate() instanceof NodeTracerProvider);
205211
delete env.OTEL_TRACES_EXPORTER;
212+
await sdk.shutdown();
206213
});
207214

208215
it('should register a tracer provider if span processors are provided', async () => {
@@ -240,6 +247,7 @@ describe('Node SDK', () => {
240247
assert(listOfProcessors[0] instanceof NoopSpanProcessor);
241248
assert(listOfProcessors[1] instanceof SimpleSpanProcessor);
242249
assert(listOfProcessors[2] instanceof BatchSpanProcessor);
250+
await sdk.shutdown();
243251
});
244252

245253
it('should register a meter provider if a reader is provided', async () => {
@@ -446,6 +454,7 @@ describe('Node SDK', () => {
446454
namespace: 'default',
447455
version: '0.0.1',
448456
});
457+
await sdk.shutdown();
449458
});
450459
});
451460

@@ -497,6 +506,7 @@ describe('Node SDK', () => {
497506
namespace: 'default',
498507
version: '0.0.1',
499508
});
509+
await sdk.shutdown();
500510
});
501511
});
502512

@@ -551,6 +561,7 @@ describe('Node SDK', () => {
551561
/{\s+"service\.instance\.id":\s+"627cc493",\s+"service\.name":\s+"my-service",\s+"service\.namespace":\s+"default",\s+"service\.version":\s+"0.0.1"\s+}\s*/gm
552562
)
553563
);
564+
await sdk.shutdown();
554565
});
555566

556567
describe('with a faulty environment variable', () => {
@@ -578,6 +589,7 @@ describe('Node SDK', () => {
578589
'EnvDetector failed: Attribute value should be a ASCII string with a length not exceed 255 characters.'
579590
)
580591
);
592+
await sdk.shutdown();
581593
});
582594
});
583595
});
@@ -595,6 +607,7 @@ describe('Node SDK', () => {
595607
assertServiceResource(resource, {
596608
name: 'config-set-name',
597609
});
610+
await sdk.shutdown();
598611
});
599612

600613
it('should configure service name via OTEL_SERVICE_NAME env var', async () => {
@@ -609,6 +622,7 @@ describe('Node SDK', () => {
609622
name: 'env-set-name',
610623
});
611624
delete process.env.OTEL_SERVICE_NAME;
625+
await sdk.shutdown();
612626
});
613627

614628
it('should favor config set service name over OTEL_SERVICE_NAME env set service name', async () => {
@@ -625,11 +639,12 @@ describe('Node SDK', () => {
625639
name: 'config-set-name',
626640
});
627641
delete process.env.OTEL_SERVICE_NAME;
642+
await sdk.shutdown();
628643
});
629644

630645
it('should configure service name via OTEL_RESOURCE_ATTRIBUTES env var', async () => {
631646
process.env.OTEL_RESOURCE_ATTRIBUTES =
632-
'service.name=resource-env-set-name';
647+
'service.name=resource-env-set-name,service.instance.id=my-instance-id';
633648
const sdk = new NodeSDK();
634649

635650
sdk.start();
@@ -638,13 +653,15 @@ describe('Node SDK', () => {
638653

639654
assertServiceResource(resource, {
640655
name: 'resource-env-set-name',
656+
instanceId: 'my-instance-id',
641657
});
642658
delete process.env.OTEL_RESOURCE_ATTRIBUTES;
659+
await sdk.shutdown();
643660
});
644661

645662
it('should favor config set service name over OTEL_RESOURCE_ATTRIBUTES env set service name', async () => {
646663
process.env.OTEL_RESOURCE_ATTRIBUTES =
647-
'service.name=resource-env-set-name';
664+
'service.name=resource-env-set-name,service.instance.id=my-instance-id';
648665
const sdk = new NodeSDK({
649666
serviceName: 'config-set-name',
650667
});
@@ -655,8 +672,55 @@ describe('Node SDK', () => {
655672

656673
assertServiceResource(resource, {
657674
name: 'config-set-name',
675+
instanceId: 'my-instance-id',
658676
});
659677
delete process.env.OTEL_RESOURCE_ATTRIBUTES;
678+
await sdk.shutdown();
679+
});
680+
});
681+
682+
describe('configureServiceInstanceId', async () => {
683+
it('should configure service instance id via OTEL_RESOURCE_ATTRIBUTES env var', async () => {
684+
process.env.OTEL_RESOURCE_ATTRIBUTES =
685+
'service.instance.id=627cc493,service.name=my-service';
686+
const sdk = new NodeSDK();
687+
688+
sdk.start();
689+
const resource = sdk['_resource'];
690+
await resource.waitForAsyncAttributes?.();
691+
692+
assertServiceResource(resource, {
693+
name: 'my-service',
694+
instanceId: '627cc493',
695+
});
696+
delete process.env.OTEL_RESOURCE_ATTRIBUTES;
697+
sdk.shutdown();
698+
});
699+
700+
it('should configure service instance id with random UUID', async () => {
701+
const sdk = new NodeSDK({
702+
autoDetectResources: true,
703+
resourceDetectors: [
704+
processDetector,
705+
envDetector,
706+
hostDetector,
707+
serviceInstanceIdDetectorSync,
708+
],
709+
});
710+
711+
sdk.start();
712+
const resource = sdk['_resource'];
713+
await resource.waitForAsyncAttributes?.();
714+
715+
const UUID_REGEX =
716+
/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
717+
assert.equal(
718+
UUID_REGEX.test(
719+
resource.attributes[SEMRESATTRS_SERVICE_INSTANCE_ID]?.toString() || ''
720+
),
721+
true
722+
);
723+
await sdk.shutdown();
660724
});
661725
});
662726

@@ -671,7 +735,7 @@ describe('Node SDK', () => {
671735

672736
it('should not register a trace provider', async () => {
673737
const sdk = new NodeSDK({});
674-
await sdk.start();
738+
sdk.start();
675739

676740
assert.strictEqual(
677741
(trace.getTracerProvider() as ProxyTracerProvider).getDelegate(),
@@ -694,7 +758,7 @@ describe('Node SDK', () => {
694758
metricReader: metricReader,
695759
autoDetectResources: false,
696760
});
697-
await sdk.start();
761+
sdk.start();
698762

699763
assert.ok(!(metrics.getMeterProvider() instanceof MeterProvider));
700764

@@ -730,6 +794,7 @@ describe('Node SDK', () => {
730794
await resource.waitForAsyncAttributes?.();
731795

732796
assert.deepStrictEqual(resource, Resource.empty());
797+
await sdk.shutdown();
733798
});
734799
});
735800
});
@@ -758,6 +823,7 @@ describe('Node SDK', () => {
758823

759824
assert.strictEqual(span.spanContext().spanId, 'constant-test-span-id');
760825
assert.strictEqual(span.spanContext().traceId, 'constant-test-trace-id');
826+
await sdk.shutdown();
761827
});
762828
});
763829
});
@@ -786,6 +852,7 @@ describe('setup exporter from env', () => {
786852
assert(sdk['_tracerProvider'] instanceof TracerProviderWithEnvExporters);
787853
assert(listOfProcessors.length === 1);
788854
assert(listOfProcessors[0] instanceof BatchSpanProcessor);
855+
await sdk.shutdown();
789856
});
790857
it('ignore env exporter when user provides exporter to sdk config', async () => {
791858
const traceExporter = new ConsoleSpanExporter();
@@ -802,6 +869,7 @@ describe('setup exporter from env', () => {
802869
assert(listOfProcessors.length === 1);
803870
assert(listOfProcessors[0] instanceof SimpleSpanProcessor === false);
804871
assert(listOfProcessors[0] instanceof BatchSpanProcessor);
872+
await sdk.shutdown();
805873
});
806874
it('ignores default env exporter when user provides span processor to sdk config', async () => {
807875
const traceExporter = new ConsoleSpanExporter();
@@ -819,6 +887,7 @@ describe('setup exporter from env', () => {
819887
assert(listOfProcessors.length === 1);
820888
assert(listOfProcessors[0] instanceof SimpleSpanProcessor);
821889
assert(listOfProcessors[0] instanceof BatchSpanProcessor === false);
890+
await sdk.shutdown();
822891
});
823892
it('ignores env exporter when user provides tracer exporter to sdk config and sets exporter via env', async () => {
824893
env.OTEL_TRACES_EXPORTER = 'console';
@@ -837,6 +906,7 @@ describe('setup exporter from env', () => {
837906
assert(listOfProcessors[0] instanceof SimpleSpanProcessor === false);
838907
assert(listOfProcessors[0] instanceof BatchSpanProcessor);
839908
delete env.OTEL_TRACES_EXPORTER;
909+
await sdk.shutdown();
840910
});
841911
it('should only create one span processor when configured using env vars and config', async () => {
842912
env.OTEL_TRACES_EXPORTER = 'console';
@@ -852,6 +922,7 @@ describe('setup exporter from env', () => {
852922
);
853923
assert.strictEqual(listOfProcessors.length, 1);
854924
delete env.OTEL_TRACES_EXPORTER;
925+
await sdk.shutdown();
855926
});
856927
it('use otlp exporter and defined exporter protocol env value', async () => {
857928
env.OTEL_TRACES_EXPORTER = 'otlp';
@@ -866,6 +937,7 @@ describe('setup exporter from env', () => {
866937
assert(listOfProcessors[0] instanceof BatchSpanProcessor);
867938
delete env.OTEL_TRACES_EXPORTER;
868939
delete env.OTEL_EXPORTER_OTLP_TRACES_PROTOCOL;
940+
await sdk.shutdown();
869941
});
870942
it('use noop span processor when user sets env exporter to none', async () => {
871943
env.OTEL_TRACES_EXPORTER = 'none';
@@ -879,6 +951,7 @@ describe('setup exporter from env', () => {
879951
assert(listOfProcessors.length === 0);
880952
assert(activeProcessor instanceof NoopSpanProcessor);
881953
delete env.OTEL_TRACES_EXPORTER;
954+
await sdk.shutdown();
882955
});
883956
it('log warning that sdk will not be initialized when exporter is set to none', async () => {
884957
env.OTEL_TRACES_EXPORTER = 'none';
@@ -890,16 +963,18 @@ describe('setup exporter from env', () => {
890963
'OTEL_TRACES_EXPORTER contains "none". SDK will not be initialized.'
891964
);
892965
delete env.OTEL_TRACES_EXPORTER;
966+
await sdk.shutdown();
893967
});
894968
it('use default otlp exporter when user does not set exporter via env or config', async () => {
895969
const sdk = new NodeSDK();
896-
await sdk.start();
970+
sdk.start();
897971

898972
const listOfProcessors =
899973
sdk['_tracerProvider']!['_registeredSpanProcessors']!;
900974
assert(sdk['_tracerProvider'] instanceof TracerProviderWithEnvExporters);
901975
assert(listOfProcessors.length === 1);
902976
assert(listOfProcessors[0] instanceof BatchSpanProcessor);
977+
await sdk.shutdown();
903978
});
904979
it('use default otlp exporter when empty value is provided for exporter via env', async () => {
905980
env.OTEL_TRACES_EXPORTER = '';
@@ -912,6 +987,7 @@ describe('setup exporter from env', () => {
912987
assert(listOfProcessors.length === 1);
913988
assert(listOfProcessors[0] instanceof BatchSpanProcessor);
914989
env.OTEL_TRACES_EXPORTER = '';
990+
await sdk.shutdown();
915991
});
916992

917993
it('use only default exporter when none value is provided with other exporters', async () => {
@@ -926,6 +1002,7 @@ describe('setup exporter from env', () => {
9261002
assert(listOfProcessors[0] instanceof BatchSpanProcessor);
9271003

9281004
delete env.OTEL_TRACES_EXPORTER;
1005+
await sdk.shutdown();
9291006
});
9301007
it('log warning that only default exporter will be used since exporter list contains none with other exports ', async () => {
9311008
env.OTEL_TRACES_EXPORTER = 'otlp,zipkin,none';
@@ -937,6 +1014,7 @@ describe('setup exporter from env', () => {
9371014
'OTEL_TRACES_EXPORTER contains "none" along with other exporters. Using default otlp exporter.'
9381015
);
9391016
delete env.OTEL_TRACES_EXPORTER;
1017+
await sdk.shutdown();
9401018
});
9411019
it('should warn that provided exporter value is unrecognized and not able to be set up', async () => {
9421020
env.OTEL_TRACES_EXPORTER = 'invalid';
@@ -954,6 +1032,7 @@ describe('setup exporter from env', () => {
9541032
);
9551033

9561034
delete env.OTEL_TRACES_EXPORTER;
1035+
await sdk.shutdown();
9571036
});
9581037
it('setup zipkin, jaeger and otlp exporters', async () => {
9591038
env.OTEL_TRACES_EXPORTER = 'zipkin, otlp, jaeger';
@@ -971,6 +1050,7 @@ describe('setup exporter from env', () => {
9711050

9721051
delete env.OTEL_TRACES_EXPORTER;
9731052
delete env.OTEL_EXPORTER_OTLP_TRACES_PROTOCOL;
1053+
await sdk.shutdown();
9741054
});
9751055
it('use the console exporter', async () => {
9761056
env.OTEL_TRACES_EXPORTER = 'console, otlp';
@@ -983,5 +1063,6 @@ describe('setup exporter from env', () => {
9831063
assert(listOfProcessors[0] instanceof SimpleSpanProcessor);
9841064
assert(listOfProcessors[1] instanceof BatchSpanProcessor);
9851065
delete env.OTEL_TRACES_EXPORTER;
1066+
await sdk.shutdown();
9861067
});
9871068
});

package-lock.json

-15
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)