Skip to content

Commit 18a5731

Browse files
authored
feat(detector-container)!: change implementation to DetectorSync interface (#2334)
1 parent 5952127 commit 18a5731

File tree

4 files changed

+38
-18
lines changed

4 files changed

+38
-18
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
"@opentelemetry/api": "^1.0.0"
5252
},
5353
"dependencies": {
54-
"@opentelemetry/resources": "^1.0.0",
54+
"@opentelemetry/resources": "^1.10.0",
5555
"@opentelemetry/semantic-conventions": "^1.22.0"
5656
},
5757
"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: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
* limitations under the License.
1515
*/
1616
import {
17-
Detector,
17+
DetectorSync,
18+
IResource,
1819
Resource,
20+
ResourceAttributes,
1921
ResourceDetectionConfig,
2022
} from '@opentelemetry/resources';
2123

@@ -26,7 +28,7 @@ import * as util from 'util';
2628
import { diag } from '@opentelemetry/api';
2729
import { extractContainerIdFromLine } from './utils';
2830

29-
export class ContainerDetector implements Detector {
31+
export class ContainerDetector implements DetectorSync {
3032
readonly CONTAINER_ID_LENGTH = 64;
3133
readonly DEFAULT_CGROUP_V1_PATH = '/proc/self/cgroup';
3234
readonly DEFAULT_CGROUP_V2_PATH = '/proc/self/mountinfo';
@@ -40,20 +42,31 @@ export class ContainerDetector implements Detector {
4042

4143
private static readFileAsync = util.promisify(fs.readFile);
4244

43-
async detect(_config?: ResourceDetectionConfig): Promise<Resource> {
45+
detect(_config?: ResourceDetectionConfig): IResource {
46+
return new Resource({}, this._getAttributes());
47+
}
48+
49+
/**
50+
* Attempts to obtain the container ID from the file system. If the
51+
* file read is successful it returns a promise containing a {@link ResourceAttributes}
52+
* object with the container ID. Returns a promise containing an
53+
* empty {@link ResourceAttributes} if the paths do not exist or fail
54+
* to read.
55+
*/
56+
async _getAttributes(): Promise<ResourceAttributes> {
4457
try {
4558
const containerId = await this._getContainerId();
4659
return !containerId
47-
? Resource.empty()
48-
: new Resource({
60+
? {}
61+
: {
4962
[SEMRESATTRS_CONTAINER_ID]: containerId,
50-
});
63+
};
5164
} catch (e) {
5265
diag.info(
5366
'Container Detector did not identify running inside a supported container, no container attributes will be added to resource: ',
5467
e
5568
);
56-
return Resource.empty();
69+
return {};
5770
}
5871
}
5972

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import * as sinon from 'sinon';
1818
import * as assert from 'assert';
19-
import { Resource } from '@opentelemetry/resources';
19+
2020
import { containerDetector } from '../src';
2121
import {
2222
assertContainerResource,
@@ -46,7 +46,8 @@ describe('ContainerDetector', () => {
4646
.stub(ContainerDetector, 'readFileAsync' as any)
4747
.resolves(undefined);
4848

49-
const resource: Resource = await containerDetector.detect();
49+
const resource = containerDetector.detect();
50+
await resource.waitForAsyncAttributes?.();
5051

5152
assert.deepStrictEqual(resource.attributes, {});
5253
assert.ok(resource);
@@ -57,7 +58,8 @@ describe('ContainerDetector', () => {
5758
.stub(ContainerDetector, 'readFileAsync' as any)
5859
.resolves(correctCgroupV1Data);
5960

60-
const resource: Resource = await containerDetector.detect();
61+
const resource = containerDetector.detect();
62+
await resource.waitForAsyncAttributes?.();
6163

6264
sinon.assert.calledOnce(readStub);
6365

@@ -73,7 +75,8 @@ describe('ContainerDetector', () => {
7375
readStub.onFirstCall().resolves('');
7476
readStub.onSecondCall().resolves(correctCgroupV2Data);
7577

76-
const resource: Resource = await containerDetector.detect();
78+
const resource = containerDetector.detect();
79+
await resource.waitForAsyncAttributes?.();
7780
sinon.assert.calledTwice(readStub);
7881

7982
assert.ok(resource);
@@ -88,7 +91,8 @@ describe('ContainerDetector', () => {
8891
readStub.onFirstCall().resolves('');
8992
readStub.onSecondCall().resolves(wrongCgroupV2Data);
9093

91-
const resource: Resource = await containerDetector.detect();
94+
const resource = containerDetector.detect();
95+
await resource.waitForAsyncAttributes?.();
9296
sinon.assert.calledTwice(readStub);
9397

9498
assert.ok(resource);
@@ -109,7 +113,8 @@ describe('ContainerDetector', () => {
109113
.stub(ContainerDetector, 'readFileAsync' as any)
110114
.resolves('');
111115

112-
const resource: Resource = await containerDetector.detect();
116+
const resource = containerDetector.detect();
117+
await resource.waitForAsyncAttributes?.();
113118
assert.deepStrictEqual(resource.attributes, {});
114119

115120
sinon.assert.calledTwice(readStub);
@@ -125,7 +130,8 @@ describe('ContainerDetector', () => {
125130
.stub(ContainerDetector, 'readFileAsync' as any)
126131
.rejects(errorMsg.fileNotFoundError);
127132

128-
const resource: Resource = await containerDetector.detect();
133+
const resource = containerDetector.detect();
134+
await resource.waitForAsyncAttributes?.();
129135

130136
sinon.assert.calledOnce(readStub);
131137
assertEmptyResource(resource);
@@ -142,7 +148,8 @@ describe('ContainerDetector', () => {
142148
.stub(ContainerDetector, 'readFileAsync' as any)
143149
.rejects(errorMsg.fileNotFoundError);
144150

145-
const resource: Resource = await containerDetector.detect();
151+
const resource = containerDetector.detect();
152+
await resource.waitForAsyncAttributes?.();
146153
sinon.assert.calledOnce(readStub);
147154
assertEmptyResource(resource);
148155
});

package-lock.json

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

0 commit comments

Comments
 (0)