@azure/monitor-opentelemetry
Version:
Azure Monitor OpenTelemetry (Node.js)
143 lines • 5.32 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getResourceProvider = exports.isAks = exports.isFunctionApp = exports.isAppService = exports.getOsPrefix = exports.isDarwin = exports.isLinux = exports.isWindows = void 0;
exports.ignoreOutgoingRequestHook = ignoreOutgoingRequestHook;
exports.msToTimeSpan = msToTimeSpan;
exports.parseResourceDetectorsFromEnvVar = parseResourceDetectorsFromEnvVar;
const resources_1 = require("@opentelemetry/resources");
const api_1 = require("@opentelemetry/api");
function ignoreOutgoingRequestHook(request) {
if (request && request.headers) {
if ((request.headers["User-Agent"] &&
request.headers["User-Agent"]
.toString()
.indexOf("azsdk-js-monitor-opentelemetry-exporter") > -1) ||
(request.headers["user-agent"] &&
request.headers["user-agent"]
.toString()
.indexOf("azsdk-js-monitor-opentelemetry-exporter") > -1)) {
return true;
}
}
return false;
}
const isWindows = () => {
return process.platform === "win32";
};
exports.isWindows = isWindows;
const isLinux = () => {
return process.platform === "linux";
};
exports.isLinux = isLinux;
const isDarwin = () => {
return process.platform === "darwin";
};
exports.isDarwin = isDarwin;
/**
* Get prefix for OS
* Windows system: "w"
* Linux system: "l"
* non-Windows and non-Linux system: "u" (unknown)
*/
const getOsPrefix = () => {
return (0, exports.isWindows)() ? "w" : (0, exports.isLinux)() ? "l" : "u";
};
exports.getOsPrefix = getOsPrefix;
/**
* Get prefix resource provider, vm will considered as "unknown RP"
* Web App: "a"
* Function App: "f"
* non-Web and non-Function APP: "u" (unknown)
*/
const isAppService = () => {
return process.env.WEBSITE_SITE_NAME && !process.env.FUNCTIONS_WORKER_RUNTIME ? true : false;
};
exports.isAppService = isAppService;
const isFunctionApp = () => {
return process.env.FUNCTIONS_WORKER_RUNTIME ? true : false;
};
exports.isFunctionApp = isFunctionApp;
const isAks = () => {
return process.env.AKS_ARM_NAMESPACE_ID || process.env.KUBERNETES_SERVICE_HOST ? true : false;
};
exports.isAks = isAks;
/**
* Get prefix resource provider, vm will considered as "unknown RP"
* Web App: "a"
* Function App: "f"
* AKS: "k"
* non-Web and non-Function APP: "u" (unknown)
*/
const getResourceProvider = () => {
if ((0, exports.isAppService)()) {
return "a";
}
if ((0, exports.isFunctionApp)()) {
return "f";
}
if ((0, exports.isAks)()) {
return "k";
}
return "u";
};
exports.getResourceProvider = getResourceProvider;
/**
* Convert milliseconds to Breeze expected time.
* @internal
*/
function msToTimeSpan(ms) {
let totalms = ms;
if (Number.isNaN(totalms) || totalms < 0 || !Number.isFinite(ms)) {
totalms = 0;
}
let sec = ((totalms / 1000) % 60).toFixed(7).replace(/0{0,4}$/, "");
let min = `${Math.floor(totalms / (1000 * 60)) % 60}`;
let hour = `${Math.floor(totalms / (1000 * 60 * 60)) % 24}`;
const days = Math.floor(totalms / (1000 * 60 * 60 * 24));
sec = sec.indexOf(".") < 2 ? `0${sec}` : sec;
min = min.length < 2 ? `0${min}` : min;
hour = hour.length < 2 ? `0${hour}` : hour;
const daysText = days > 0 ? `${days}.` : "";
return `${daysText + hour}:${min}:${sec}`;
}
// This function is a slight modification of an upstream otel util function -
// mainly for prioritizing the resource detectors customer may specify over
// env var & not enabling process detector by default.
function parseResourceDetectorsFromEnvVar() {
var _a, _b;
const resourceDetectors = new Map([
["env", resources_1.envDetectorSync],
["host", resources_1.hostDetectorSync],
["os", resources_1.osDetectorSync],
["process", resources_1.processDetectorSync],
["serviceinstance", resources_1.serviceInstanceIdDetectorSync],
]);
if (process.env.OTEL_NODE_RESOURCE_DETECTORS != null) {
const resourceDetectorsFromEnv = (_b = (_a = process.env.OTEL_NODE_RESOURCE_DETECTORS) === null || _a === void 0 ? void 0 : _a.split(",")) !== null && _b !== void 0 ? _b : [
"env",
"host",
"os",
];
if (resourceDetectorsFromEnv.includes("all")) {
return [...resourceDetectors.values()];
}
if (resourceDetectorsFromEnv.includes("none")) {
return [];
}
return resourceDetectorsFromEnv.flatMap((detector) => {
const resourceDetector = resourceDetectors.get(detector);
if (!resourceDetector) {
api_1.diag.error(`Invalid resource detector "${detector}" specified in the environment variable OTEL_NODE_RESOURCE_DETECTORS`);
return [];
}
return [resourceDetector];
});
}
else {
// leaving out the process detector as that can add many resource attributes
// with large values. Also not enabling service instance attributes by default
// as this is still experimental.
return [resources_1.envDetectorSync, resources_1.hostDetectorSync, resources_1.osDetectorSync];
}
}
//# sourceMappingURL=common.js.map
;