Skip to content

Commit fc11a5a

Browse files
committed
resource-detector-container
chore(resource-detector-container)!: `ContainerDetector` class is no longer exported
1 parent e79ca80 commit fc11a5a

File tree

8 files changed

+84
-55
lines changed

8 files changed

+84
-55
lines changed

detectors/node/opentelemetry-resource-detector-container/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ const tracerProvider = new NodeTracerProvider({ resource });
3030

3131
This package uses `@opentelemetry/semantic-conventions` version `1.22+`, which implements Semantic Convention [Version 1.7.0](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.7.0/semantic_conventions/README.md)
3232

33-
### ContainerDetector
33+
### Container Detector
3434

3535
Populates `container.id` for processes running on containers supporting : docker( cgroup v1 or v2 ) or with containerd
3636

detectors/node/opentelemetry-resource-detector-container/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"author": "OpenTelemetry Authors",
2222
"license": "Apache-2.0",
2323
"engines": {
24-
"node": ">=14"
24+
"node": "^18.19.0 || >=20.6.0"
2525
},
2626
"files": [
2727
"build/src/**/*.js",
@@ -52,8 +52,8 @@
5252
"@opentelemetry/api": "^1.0.0"
5353
},
5454
"dependencies": {
55-
"@opentelemetry/core": "^1.26.0",
56-
"@opentelemetry/resources": "^1.10.0",
55+
"@opentelemetry/core": "^2.0.0-dev.0",
56+
"@opentelemetry/resources": "^2.0.0-dev.0",
5757
"@opentelemetry/semantic-conventions": "^1.27.0"
5858
},
5959
"homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/detectors/node/opentelemetry-resource-detector-container#readme",

detectors/node/opentelemetry-resource-detector-container/src/detectors/ContainerDetector.ts

Lines changed: 12 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@
1414
* limitations under the License.
1515
*/
1616
import {
17-
DetectorSync,
18-
IResource,
19-
Resource,
20-
ResourceAttributes,
2117
ResourceDetectionConfig,
18+
ResourceDetector,
19+
DetectedResource,
2220
} from '@opentelemetry/resources';
2321

2422
import { SEMRESATTRS_CONTAINER_ID } from '@opentelemetry/semantic-conventions';
@@ -29,7 +27,7 @@ import { context, diag } from '@opentelemetry/api';
2927
import { suppressTracing } from '@opentelemetry/core';
3028
import { extractContainerIdFromLine } from './utils';
3129

32-
export class ContainerDetector implements DetectorSync {
30+
export class ContainerDetector implements ResourceDetector {
3331
readonly CONTAINER_ID_LENGTH = 64;
3432
readonly DEFAULT_CGROUP_V1_PATH = '/proc/self/cgroup';
3533
readonly DEFAULT_CGROUP_V2_PATH = '/proc/self/mountinfo';
@@ -43,35 +41,17 @@ export class ContainerDetector implements DetectorSync {
4341

4442
private static readFileAsync = util.promisify(fs.readFile);
4543

46-
detect(_config?: ResourceDetectionConfig): IResource {
47-
const attributes = context.with(suppressTracing(context.active()), () =>
48-
this._getAttributes()
49-
);
50-
return new Resource({}, attributes);
44+
detect(_config?: ResourceDetectionConfig): DetectedResource {
45+
const attributes = {
46+
[SEMRESATTRS_CONTAINER_ID]: this._getContainerIdWithSuppressedTracing()
47+
}
48+
return { attributes };
5149
}
5250

53-
/**
54-
* Attempts to obtain the container ID from the file system. If the
55-
* file read is successful it returns a promise containing a {@link ResourceAttributes}
56-
* object with the container ID. Returns a promise containing an
57-
* empty {@link ResourceAttributes} if the paths do not exist or fail
58-
* to read.
59-
*/
60-
async _getAttributes(): Promise<ResourceAttributes> {
61-
try {
62-
const containerId = await this._getContainerId();
63-
return !containerId
64-
? {}
65-
: {
66-
[SEMRESATTRS_CONTAINER_ID]: containerId,
67-
};
68-
} catch (e) {
69-
diag.debug(
70-
'Container Detector did not identify running inside a supported container, no container attributes will be added to resource: ',
71-
e
72-
);
73-
return {};
74-
}
51+
async _getContainerIdWithSuppressedTracing(): Promise<string | undefined> {
52+
return context.with(suppressTracing(context.active()), () =>
53+
this._getContainerId()
54+
);
7555
}
7656

7757
private async _getContainerIdV1(): Promise<string | undefined> {

detectors/node/opentelemetry-resource-detector-container/src/detectors/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
export * from './ContainerDetector';
16+
export { containerDetector } from './ContainerDetector';

detectors/node/opentelemetry-resource-detector-container/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
export * from './detectors';
16+
export { containerDetector } from './detectors';

detectors/node/opentelemetry-resource-detector-container/test/ContainerDetector.test.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@
1717
import * as sinon from 'sinon';
1818
import * as assert from 'assert';
1919

20-
import { containerDetector } from '../src';
2120
import {
2221
assertContainerResource,
2322
assertEmptyResource,
2423
} from '@opentelemetry/contrib-test-utils';
24+
import { detectResources } from '@opentelemetry/resources';
2525

26-
import { ContainerDetector } from '../src';
26+
import { containerDetector } from '../src';
27+
import { ContainerDetector } from '../src/detectors/ContainerDetector';
2728

2829
describe('ContainerDetector', () => {
2930
let readStub: sinon.SinonStub;
@@ -48,7 +49,7 @@ describe('ContainerDetector', () => {
4849
.stub(ContainerDetector, 'readFileAsync' as any)
4950
.resolves(undefined);
5051

51-
const resource = containerDetector.detect();
52+
const resource = detectResources({detectors: [containerDetector]});
5253
await resource.waitForAsyncAttributes?.();
5354

5455
assert.deepStrictEqual(resource.attributes, {});
@@ -60,7 +61,7 @@ describe('ContainerDetector', () => {
6061
.stub(ContainerDetector, 'readFileAsync' as any)
6162
.resolves(correctCgroupV1Data);
6263

63-
const resource = containerDetector.detect();
64+
const resource = detectResources({detectors: [containerDetector]});
6465
await resource.waitForAsyncAttributes?.();
6566

6667
sinon.assert.calledOnce(readStub);
@@ -77,7 +78,7 @@ describe('ContainerDetector', () => {
7778
readStub.onFirstCall().resolves('');
7879
readStub.onSecondCall().resolves(correctCgroupV2Data);
7980

80-
const resource = containerDetector.detect();
81+
const resource = detectResources({detectors: [containerDetector]});
8182
await resource.waitForAsyncAttributes?.();
8283
sinon.assert.calledTwice(readStub);
8384

@@ -93,7 +94,7 @@ describe('ContainerDetector', () => {
9394
readStub.onFirstCall().resolves('');
9495
readStub.onSecondCall().resolves(correctCgroupV2PodmanData);
9596

96-
const resource = containerDetector.detect();
97+
const resource = detectResources({detectors: [containerDetector]});
9798
await resource.waitForAsyncAttributes?.();
9899
sinon.assert.calledTwice(readStub);
99100

@@ -109,7 +110,7 @@ describe('ContainerDetector', () => {
109110
readStub.onFirstCall().resolves('');
110111
readStub.onSecondCall().resolves(wrongCgroupV2Data);
111112

112-
const resource = containerDetector.detect();
113+
const resource = detectResources({detectors: [containerDetector]});
113114
await resource.waitForAsyncAttributes?.();
114115
sinon.assert.calledTwice(readStub);
115116

@@ -131,7 +132,7 @@ describe('ContainerDetector', () => {
131132
.stub(ContainerDetector, 'readFileAsync' as any)
132133
.resolves('');
133134

134-
const resource = containerDetector.detect();
135+
const resource = detectResources({detectors: [containerDetector]});
135136
await resource.waitForAsyncAttributes?.();
136137
assert.deepStrictEqual(resource.attributes, {});
137138

@@ -148,7 +149,7 @@ describe('ContainerDetector', () => {
148149
.stub(ContainerDetector, 'readFileAsync' as any)
149150
.rejects(errorMsg.fileNotFoundError);
150151

151-
const resource = containerDetector.detect();
152+
const resource = detectResources({detectors: [containerDetector]});
152153
await resource.waitForAsyncAttributes?.();
153154

154155
sinon.assert.calledOnce(readStub);
@@ -166,7 +167,7 @@ describe('ContainerDetector', () => {
166167
.stub(ContainerDetector, 'readFileAsync' as any)
167168
.rejects(errorMsg.fileNotFoundError);
168169

169-
const resource = containerDetector.detect();
170+
const resource = detectResources({detectors: [containerDetector]});
170171
await resource.waitForAsyncAttributes?.();
171172
sinon.assert.calledOnce(readStub);
172173
assertEmptyResource(resource);

detectors/node/opentelemetry-resource-detector-container/test/ContainerDetectorIntegration.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
SimpleSpanProcessor,
2323
} from '@opentelemetry/sdk-trace-base';
2424
import { NodeSDK } from '@opentelemetry/sdk-node';
25-
import { IResource } from '@opentelemetry/resources';
25+
import { detectResources } from '@opentelemetry/resources';
2626

2727
describe('[Integration] ContainerDetector', () => {
2828
it('should not start spans for detector reads to filesystem', async () => {
@@ -54,7 +54,7 @@ describe('[Integration] ContainerDetector', () => {
5454
await spanProcessor.forceFlush();
5555
const numSpansAfterRequire = memoryExporter.getFinishedSpans().length;
5656

57-
const resource = containerDetector.detect() as IResource;
57+
const resource = detectResources({detectors: [containerDetector]});
5858
await resource.waitForAsyncAttributes?.();
5959

6060
// Wait for the next loop to let the span close properly

package-lock.json

Lines changed: 53 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)