2022-07-12 09:00:22 +02:00

220 lines
7.7 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var api = require('@opentelemetry/api');
// Copyright (c) Microsoft Corporation.
(function (SpanKind) {
/** Default value. Indicates that the span is used internally. */
SpanKind[SpanKind["INTERNAL"] = 0] = "INTERNAL";
/**
* Indicates that the span covers server-side handling of an RPC or other
* remote request.
*/
SpanKind[SpanKind["SERVER"] = 1] = "SERVER";
/**
* Indicates that the span covers the client-side wrapper around an RPC or
* other remote request.
*/
SpanKind[SpanKind["CLIENT"] = 2] = "CLIENT";
/**
* Indicates that the span describes producer sending a message to a
* broker. Unlike client and server, there is no direct critical path latency
* relationship between producer and consumer spans.
*/
SpanKind[SpanKind["PRODUCER"] = 3] = "PRODUCER";
/**
* Indicates that the span describes consumer receiving a message from a
* broker. Unlike client and server, there is no direct critical path latency
* relationship between producer and consumer spans.
*/
SpanKind[SpanKind["CONSUMER"] = 4] = "CONSUMER";
})(exports.SpanKind || (exports.SpanKind = {}));
/**
* Return the span if one exists
*
* @param context - context to get span from
*/
function getSpan(context) {
return api.trace.getSpan(context);
}
/**
* Set the span on a context
*
* @param context - context to use as parent
* @param span - span to set active
*/
function setSpan(context, span) {
return api.trace.setSpan(context, span);
}
/**
* Wrap span context in a NoopSpan and set as span in a new
* context
*
* @param context - context to set active span on
* @param spanContext - span context to be wrapped
*/
function setSpanContext(context, spanContext) {
return api.trace.setSpanContext(context, spanContext);
}
/**
* Get the span context of the span if it exists.
*
* @param context - context to get values from
*/
function getSpanContext(context) {
return api.trace.getSpanContext(context);
}
/**
* Returns true of the given {@link SpanContext} is valid.
* A valid {@link SpanContext} is one which has a valid trace ID and span ID as per the spec.
*
* @param context - the {@link SpanContext} to validate.
*
* @returns true if the {@link SpanContext} is valid, false otherwise.
*/
function isSpanContextValid(context) {
return api.trace.isSpanContextValid(context);
}
function getTracer(name, version) {
return api.trace.getTracer(name || "azure/core-tracing", version);
}
/** Entrypoint for context API */
const context = api.context;
(function (SpanStatusCode) {
/**
* The default status.
*/
SpanStatusCode[SpanStatusCode["UNSET"] = 0] = "UNSET";
/**
* The operation has been validated by an Application developer or
* Operator to have completed successfully.
*/
SpanStatusCode[SpanStatusCode["OK"] = 1] = "OK";
/**
* The operation contains an error.
*/
SpanStatusCode[SpanStatusCode["ERROR"] = 2] = "ERROR";
})(exports.SpanStatusCode || (exports.SpanStatusCode = {}));
// Copyright (c) Microsoft Corporation.
function isTracingDisabled() {
var _a;
if (typeof process === "undefined") {
// not supported in browser for now without polyfills
return false;
}
const azureTracingDisabledValue = (_a = process.env.AZURE_TRACING_DISABLED) === null || _a === void 0 ? void 0 : _a.toLowerCase();
if (azureTracingDisabledValue === "false" || azureTracingDisabledValue === "0") {
return false;
}
return Boolean(azureTracingDisabledValue);
}
/**
* Creates a function that can be used to create spans using the global tracer.
*
* Usage:
*
* ```typescript
* // once
* const createSpan = createSpanFunction({ packagePrefix: "Azure.Data.AppConfiguration", namespace: "Microsoft.AppConfiguration" });
*
* // in each operation
* const span = createSpan("deleteConfigurationSetting", operationOptions);
* // code...
* span.end();
* ```
*
* @hidden
* @param args - allows configuration of the prefix for each span as well as the az.namespace field.
*/
function createSpanFunction(args) {
return function (operationName, operationOptions) {
const tracer = getTracer();
const tracingOptions = (operationOptions === null || operationOptions === void 0 ? void 0 : operationOptions.tracingOptions) || {};
const spanOptions = Object.assign({ kind: exports.SpanKind.INTERNAL }, tracingOptions.spanOptions);
const spanName = args.packagePrefix ? `${args.packagePrefix}.${operationName}` : operationName;
let span;
if (isTracingDisabled()) {
span = api.trace.wrapSpanContext(api.INVALID_SPAN_CONTEXT);
}
else {
span = tracer.startSpan(spanName, spanOptions, tracingOptions.tracingContext);
}
if (args.namespace) {
span.setAttribute("az.namespace", args.namespace);
}
let newSpanOptions = tracingOptions.spanOptions || {};
if (span.isRecording() && args.namespace) {
newSpanOptions = Object.assign(Object.assign({}, tracingOptions.spanOptions), { attributes: Object.assign(Object.assign({}, spanOptions.attributes), { "az.namespace": args.namespace }) });
}
const newTracingOptions = Object.assign(Object.assign({}, tracingOptions), { spanOptions: newSpanOptions, tracingContext: setSpan(tracingOptions.tracingContext || context.active(), span) });
const newOperationOptions = Object.assign(Object.assign({}, operationOptions), { tracingOptions: newTracingOptions });
return {
span,
updatedOptions: newOperationOptions
};
};
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
const VERSION = "00";
/**
* Generates a `SpanContext` given a `traceparent` header value.
* @param traceParent - Serialized span context data as a `traceparent` header value.
* @returns The `SpanContext` generated from the `traceparent` value.
*/
function extractSpanContextFromTraceParentHeader(traceParentHeader) {
const parts = traceParentHeader.split("-");
if (parts.length !== 4) {
return;
}
const [version, traceId, spanId, traceOptions] = parts;
if (version !== VERSION) {
return;
}
const traceFlags = parseInt(traceOptions, 16);
const spanContext = {
spanId,
traceId,
traceFlags
};
return spanContext;
}
/**
* Generates a `traceparent` value given a span context.
* @param spanContext - Contains context for a specific span.
* @returns The `spanContext` represented as a `traceparent` value.
*/
function getTraceParentHeader(spanContext) {
const missingFields = [];
if (!spanContext.traceId) {
missingFields.push("traceId");
}
if (!spanContext.spanId) {
missingFields.push("spanId");
}
if (missingFields.length) {
return;
}
const flags = spanContext.traceFlags || 0 /* NONE */;
const hexFlags = flags.toString(16);
const traceFlags = hexFlags.length === 1 ? `0${hexFlags}` : hexFlags;
// https://www.w3.org/TR/trace-context/#traceparent-header-field-values
return `${VERSION}-${spanContext.traceId}-${spanContext.spanId}-${traceFlags}`;
}
exports.context = context;
exports.createSpanFunction = createSpanFunction;
exports.extractSpanContextFromTraceParentHeader = extractSpanContextFromTraceParentHeader;
exports.getSpan = getSpan;
exports.getSpanContext = getSpanContext;
exports.getTraceParentHeader = getTraceParentHeader;
exports.getTracer = getTracer;
exports.isSpanContextValid = isSpanContextValid;
exports.setSpan = setSpan;
exports.setSpanContext = setSpanContext;
//# sourceMappingURL=index.js.map