Skip to content

Commit 97af8e6

Browse files
feat(sdk-node): add HostDetector as default resource detector (#4566)
* feat(node-sdk): add `HostDetector` as default resource detector Fixes #4282 - Add `HostDetector` to the list of default resource detectors - Add test to make sure host and process values are being set by default - Update from deprecated `sdk.detectResources()` to `sdk.start()` on tests - Update from deprecated `SemanticResourceAttributes.SERVICE_NAME` to `SEMRESATTRS_SERVICE_NAME` on SDK file * Update experimental/CHANGELOG.md * fix lint remove extra lint causing lint error --------- Co-authored-by: Marc Pichler <[email protected]>
1 parent fec6286 commit 97af8e6

File tree

3 files changed

+40
-7
lines changed

3 files changed

+40
-7
lines changed

experimental/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ All notable changes to experimental packages in this project will be documented
2424
### :rocket: (Enhancement)
2525

2626
* refactor(instr-http): use exported strings for semconv. [#4573](https://github.com/open-telemetry/opentelemetry-js/pull/4573/) @JamieDanielson
27+
* feat(sdk-node): add `HostDetector` as default resource detector
2728

2829
### :bug: (Bug Fix)
2930

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {
3131
DetectorSync,
3232
detectResourcesSync,
3333
envDetector,
34+
hostDetector,
3435
IResource,
3536
processDetector,
3637
Resource,
@@ -46,7 +47,7 @@ import {
4647
NodeTracerConfig,
4748
NodeTracerProvider,
4849
} from '@opentelemetry/sdk-trace-node';
49-
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
50+
import { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
5051
import { NodeSDKConfiguration } from './types';
5152
import { TracerProviderWithEnvExporters } from './TracerProviderWithEnvExporter';
5253
import { getEnv, getEnvWithoutDefaults } from '@opentelemetry/core';
@@ -123,6 +124,7 @@ export class NodeSDK {
123124
this._resourceDetectors = configuration.resourceDetectors ?? [
124125
envDetector,
125126
processDetector,
127+
hostDetector,
126128
];
127129

128130
this._serviceName = configuration.serviceName;
@@ -328,7 +330,7 @@ export class NodeSDK {
328330
? this._resource
329331
: this._resource.merge(
330332
new Resource({
331-
[SemanticResourceAttributes.SERVICE_NAME]: this._serviceName,
333+
[SEMRESATTRS_SERVICE_NAME]: this._serviceName,
332334
})
333335
);
334336

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

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import { TracerProviderWithEnvExporters } from '../src/TracerProviderWithEnvExpo
5757
import {
5858
envDetector,
5959
processDetector,
60+
hostDetector,
6061
Resource,
6162
} from '@opentelemetry/resources';
6263
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
@@ -66,6 +67,10 @@ import {
6667
InMemoryLogRecordExporter,
6768
LoggerProvider,
6869
} from '@opentelemetry/sdk-logs';
70+
import {
71+
SEMRESATTRS_HOST_NAME,
72+
SEMRESATTRS_PROCESS_PID,
73+
} from '@opentelemetry/semantic-conventions';
6974

7075
const DefaultContextManager = semver.gte(process.version, '14.8.0')
7176
? AsyncLocalStorageContextManager
@@ -527,9 +532,10 @@ describe('Node SDK', () => {
527532
},
528533
},
529534
envDetector,
535+
hostDetector,
530536
],
531537
});
532-
sdk.detectResources();
538+
sdk.start();
533539
const resource = sdk['_resource'];
534540
await resource.waitForAsyncAttributes?.();
535541

@@ -544,6 +550,28 @@ describe('Node SDK', () => {
544550
});
545551
});
546552

553+
describe('default resource detectors', () => {
554+
it('default detectors populate values properly', async () => {
555+
const sdk = new NodeSDK();
556+
sdk.start();
557+
const resource = sdk['_resource'];
558+
await resource.waitForAsyncAttributes?.();
559+
560+
assertServiceResource(resource, {
561+
instanceId: '627cc493',
562+
name: 'my-service',
563+
namespace: 'default',
564+
version: '0.0.1',
565+
});
566+
567+
assert.notEqual(
568+
resource.attributes[SEMRESATTRS_PROCESS_PID],
569+
undefined
570+
);
571+
assert.notEqual(resource.attributes[SEMRESATTRS_HOST_NAME], undefined);
572+
});
573+
});
574+
547575
describe('with a buggy detector', () => {
548576
it('returns a merged resource', async () => {
549577
const sdk = new NodeSDK({
@@ -556,10 +584,11 @@ describe('Node SDK', () => {
556584
},
557585
},
558586
envDetector,
587+
hostDetector,
559588
],
560589
});
561590

562-
sdk.detectResources();
591+
sdk.start();
563592
const resource = sdk['_resource'];
564593
await resource.waitForAsyncAttributes?.();
565594

@@ -609,7 +638,7 @@ describe('Node SDK', () => {
609638
DiagLogLevel.VERBOSE
610639
);
611640

612-
sdk.detectResources();
641+
sdk.start();
613642
await sdk['_resource'].waitForAsyncAttributes?.();
614643

615644
// Test that the Env Detector successfully found its resource and populated it with the right values.
@@ -642,7 +671,7 @@ describe('Node SDK', () => {
642671
DiagLogLevel.DEBUG
643672
);
644673

645-
sdk.detectResources();
674+
sdk.start();
646675

647676
assert.ok(
648677
callArgsContains(
@@ -794,9 +823,10 @@ describe('Node SDK', () => {
794823
},
795824
},
796825
envDetector,
826+
hostDetector,
797827
],
798828
});
799-
sdk.detectResources();
829+
sdk.start();
800830
const resource = sdk['_resource'];
801831
await resource.waitForAsyncAttributes?.();
802832

0 commit comments

Comments
 (0)