Skip to content

Commit

Permalink
feat: implement HostDetector
Browse files Browse the repository at this point in the history
  • Loading branch information
rauno56 committed Apr 22, 2022
1 parent e5031bd commit 3d2a656
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 1 deletion.
53 changes: 53 additions & 0 deletions packages/opentelemetry-resources/src/detectors/HostDetector.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright The OpenTelemetry Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { diag } from '@opentelemetry/api';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { Resource } from '../Resource';
import { Detector, ResourceAttributes } from '../types';
import { ResourceDetectionConfig } from '../config';
import { arch, hostname } from 'os';

/**
* HostDetector detects the resources related to the host current process is
* running on. Currently only non-cloud-based attributes are included.
*/
class HostDetector implements Detector {
async detect(config?: ResourceDetectionConfig): Promise<Resource> {
const attributes: ResourceAttributes = {
[SemanticResourceAttributes.HOST_NAME]: hostname(),
[SemanticResourceAttributes.HOST_ARCH]: this._normalizeArch(arch()),
};
return new Resource(attributes);
}

private _normalizeArch(nodeArchString: string): string {
// Maps from https://nodejs.org/api/os.html#osarch to arch values in spec:
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/semantic_conventions/host.md
switch (nodeArchString) {
case 'arm':
return 'arm32';
case 'ppc':
return 'ppc32';
case 'x64':
return 'amd64';
default:
return nodeArchString;
}
}
}

export const hostDetector = new HostDetector();
3 changes: 2 additions & 1 deletion packages/opentelemetry-resources/src/detectors/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
* limitations under the License.
*/

export * from './BrowserDetector';
export * from './EnvDetector';
export * from './HostDetector';
export * from './ProcessDetector';
export * from './BrowserDetector';
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* Copyright The OpenTelemetry Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import * as sinon from 'sinon';
import * as assert from 'assert';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { describeNode } from '../../util';
import { hostDetector, Resource } from '../../../src';

describeNode('hostDetector() on Node.js', () => {
afterEach(() => {
sinon.restore();
});

it('should return resource information from process', async () => {
const os = require('os');

sinon.stub(os, 'arch').returns('x64');
sinon.stub(os, 'hostname').returns('opentelemetry-test');

const resource: Resource = await hostDetector.detect();

assert.strictEqual(
resource.attributes[SemanticResourceAttributes.HOST_NAME],
'opentelemetry-test'
);
assert.strictEqual(
resource.attributes[SemanticResourceAttributes.HOST_ARCH],
'amd64'
);
});
});

0 comments on commit 3d2a656

Please sign in to comment.