UNPKG

@azure/monitor-opentelemetry

Version:
129 lines 4.55 kB
import { envDetector, hostDetector, osDetector, processDetector, serviceInstanceIdDetector, } from "@opentelemetry/resources"; import { diag } from "@opentelemetry/api"; export function ignoreOutgoingRequestHook(request) { if (request && request.headers && !Array.isArray(request.headers)) { const outgoingHeaders = request.headers; if ((outgoingHeaders["User-Agent"] && outgoingHeaders["User-Agent"] .toString() .indexOf("azsdk-js-monitor-opentelemetry-exporter") > -1) || (outgoingHeaders["user-agent"] && outgoingHeaders["user-agent"] .toString() .indexOf("azsdk-js-monitor-opentelemetry-exporter") > -1)) { return true; } } return false; } export const isWindows = () => { return process.platform === "win32"; }; export const isLinux = () => { return process.platform === "linux"; }; export const isDarwin = () => { return process.platform === "darwin"; }; /** * Get prefix for OS * Windows system: "w" * Linux system: "l" * non-Windows and non-Linux system: "u" (unknown) */ export const getOsPrefix = () => { return isWindows() ? "w" : isLinux() ? "l" : "u"; }; /** * Get prefix resource provider, vm will considered as "unknown RP" * Web App: "a" * Function App: "f" * non-Web and non-Function APP: "u" (unknown) */ export const isAppService = () => { return process.env.WEBSITE_SITE_NAME && !process.env.FUNCTIONS_WORKER_RUNTIME ? true : false; }; export const isFunctionApp = () => { return process.env.FUNCTIONS_WORKER_RUNTIME ? true : false; }; export const isAks = () => { return process.env.AKS_ARM_NAMESPACE_ID || process.env.KUBERNETES_SERVICE_HOST ? true : false; }; /** * 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) */ export const getResourceProvider = () => { if (isAppService()) { return "a"; } if (isFunctionApp()) { return "f"; } if (isAks()) { return "k"; } return "u"; }; /** * Convert milliseconds to Breeze expected time. * @internal */ export 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. export function parseResourceDetectorsFromEnvVar() { const resourceDetectors = new Map([ ["env", envDetector], ["host", hostDetector], ["os", osDetector], ["process", processDetector], ["serviceinstance", serviceInstanceIdDetector], ]); if (process.env.OTEL_NODE_RESOURCE_DETECTORS != null) { const resourceDetectorsFromEnv = process.env.OTEL_NODE_RESOURCE_DETECTORS?.split(",") ?? [ "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) { 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 [envDetector, hostDetector, osDetector]; } } //# sourceMappingURL=common.js.map