mirror of
https://github.com/oven-sh/setup-bun.git
synced 2025-02-24 03:00:39 +08:00
220 lines
7.7 KiB
JavaScript
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
|