"use strict";
|
// Copyright (c) Microsoft Corporation.
|
// Licensed under the MIT License.
|
Object.defineProperty(exports, "__esModule", { value: true });
|
exports.createTracingClient = createTracingClient;
|
const instrumenter_js_1 = require("./instrumenter.js");
|
const tracingContext_js_1 = require("./tracingContext.js");
|
/**
|
* Creates a new tracing client.
|
*
|
* @param options - Options used to configure the tracing client.
|
* @returns - An instance of {@link TracingClient}.
|
*/
|
function createTracingClient(options) {
|
const { namespace, packageName, packageVersion } = options;
|
function startSpan(name, operationOptions, spanOptions) {
|
const startSpanResult = (0, instrumenter_js_1.getInstrumenter)().startSpan(name, {
|
...spanOptions,
|
packageName: packageName,
|
packageVersion: packageVersion,
|
tracingContext: operationOptions?.tracingOptions?.tracingContext,
|
});
|
let tracingContext = startSpanResult.tracingContext;
|
const span = startSpanResult.span;
|
if (!tracingContext.getValue(tracingContext_js_1.knownContextKeys.namespace)) {
|
tracingContext = tracingContext.setValue(tracingContext_js_1.knownContextKeys.namespace, namespace);
|
}
|
span.setAttribute("az.namespace", tracingContext.getValue(tracingContext_js_1.knownContextKeys.namespace));
|
const updatedOptions = Object.assign({}, operationOptions, {
|
tracingOptions: { ...operationOptions?.tracingOptions, tracingContext },
|
});
|
return {
|
span,
|
updatedOptions,
|
};
|
}
|
async function withSpan(name, operationOptions, callback, spanOptions) {
|
const { span, updatedOptions } = startSpan(name, operationOptions, spanOptions);
|
try {
|
const result = await withContext(updatedOptions.tracingOptions.tracingContext, () => Promise.resolve(callback(updatedOptions, span)));
|
span.setStatus({ status: "success" });
|
return result;
|
}
|
catch (err) {
|
span.setStatus({ status: "error", error: err });
|
throw err;
|
}
|
finally {
|
span.end();
|
}
|
}
|
function withContext(context, callback, ...callbackArgs) {
|
return (0, instrumenter_js_1.getInstrumenter)().withContext(context, callback, ...callbackArgs);
|
}
|
/**
|
* Parses a traceparent header value into a span identifier.
|
*
|
* @param traceparentHeader - The traceparent header to parse.
|
* @returns An implementation-specific identifier for the span.
|
*/
|
function parseTraceparentHeader(traceparentHeader) {
|
return (0, instrumenter_js_1.getInstrumenter)().parseTraceparentHeader(traceparentHeader);
|
}
|
/**
|
* Creates a set of request headers to propagate tracing information to a backend.
|
*
|
* @param tracingContext - The context containing the span to serialize.
|
* @returns The set of headers to add to a request.
|
*/
|
function createRequestHeaders(tracingContext) {
|
return (0, instrumenter_js_1.getInstrumenter)().createRequestHeaders(tracingContext);
|
}
|
return {
|
startSpan,
|
withSpan,
|
withContext,
|
parseTraceparentHeader,
|
createRequestHeaders,
|
};
|
}
|
//# sourceMappingURL=tracingClient.js.map
|