forked from open-telemetry/opentelemetry-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathProcessDetector.ts
68 lines (65 loc) · 2.26 KB
/
ProcessDetector.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/*
* 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 {
Detector,
Resource,
PROCESS_RESOURCE,
ResourceDetectionConfigWithLogger,
} from '../../../';
import { ResourceAttributes } from '../../../types';
/**
* ProcessDetector will be used to detect the resoureces related current process running
* and being instumented from the NodeJS Process module.
*/
class ProcessDetector implements Detector {
async detect(config: ResourceDetectionConfigWithLogger): Promise<Resource> {
const processResource: ResourceAttributes = {
[PROCESS_RESOURCE.PID]: process.pid,
[PROCESS_RESOURCE.NAME]: process.title || '',
[PROCESS_RESOURCE.COMMAND]: process.argv[1] || '',
[PROCESS_RESOURCE.COMMAND_LINE]: process.argv.join(' ') || '',
};
return this._getResourceAttributes(processResource, config);
}
/**
* Validates process resource attribute map from process varaibls
*
* @param processResource The unsantized resource attributes from process as key/value pairs.
* @param config: Config
* @returns The sanitized resource attributes.
*/
private _getResourceAttributes(
processResource: ResourceAttributes,
config: ResourceDetectionConfigWithLogger
) {
if (
processResource[PROCESS_RESOURCE.NAME] === '' ||
processResource[PROCESS_RESOURCE.PATH] === '' ||
processResource[PROCESS_RESOURCE.COMMAND] === '' ||
processResource[PROCESS_RESOURCE.COMMAND_LINE] === ''
) {
config.logger.debug(
'ProcessDetector failed: Unable to find required process resources. '
);
return Resource.empty();
} else {
return new Resource({
...processResource,
});
}
}
}
export const processDetector = new ProcessDetector();