UNPKG

@azure/core-rest-pipeline

Version:

Isomorphic client library for making HTTP requests in node.js and browser.

144 lines (143 loc) 5.07 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var tracingPolicy_exports = {}; __export(tracingPolicy_exports, { tracingPolicy: () => tracingPolicy, tracingPolicyName: () => tracingPolicyName }); module.exports = __toCommonJS(tracingPolicy_exports); var import_core_tracing = require("@azure/core-tracing"); var import_constants = require("../constants.js"); var import_userAgent = require("../util/userAgent.js"); var import_log = require("../log.js"); var import_core_util = require("@azure/core-util"); var import_restError = require("../restError.js"); var import_util = require("@typespec/ts-http-runtime/internal/util"); const tracingPolicyName = "tracingPolicy"; function tracingPolicy(options = {}) { const userAgentPromise = (0, import_userAgent.getUserAgentValue)(options.userAgentPrefix); const sanitizer = new import_util.Sanitizer({ additionalAllowedQueryParameters: options.additionalAllowedQueryParameters }); const tracingClient = tryCreateTracingClient(); return { name: tracingPolicyName, async sendRequest(request, next) { if (!tracingClient) { return next(request); } const userAgent = await userAgentPromise; const spanAttributes = { "http.url": sanitizer.sanitizeUrl(request.url), "http.method": request.method, "http.user_agent": userAgent, requestId: request.requestId }; if (userAgent) { spanAttributes["http.user_agent"] = userAgent; } const { span, tracingContext } = tryCreateSpan(tracingClient, request, spanAttributes) ?? {}; if (!span || !tracingContext) { return next(request); } try { const response = await tracingClient.withContext(tracingContext, next, request); tryProcessResponse(span, response); return response; } catch (err) { tryProcessError(span, err); throw err; } } }; } function tryCreateTracingClient() { try { return (0, import_core_tracing.createTracingClient)({ namespace: "", packageName: "@azure/core-rest-pipeline", packageVersion: import_constants.SDK_VERSION }); } catch (e) { import_log.logger.warning(`Error when creating the TracingClient: ${(0, import_core_util.getErrorMessage)(e)}`); return void 0; } } function tryCreateSpan(tracingClient, request, spanAttributes) { try { const { span, updatedOptions } = tracingClient.startSpan( `HTTP ${request.method}`, { tracingOptions: request.tracingOptions }, { spanKind: "client", spanAttributes } ); if (!span.isRecording()) { span.end(); return void 0; } const headers = tracingClient.createRequestHeaders( updatedOptions.tracingOptions.tracingContext ); for (const [key, value] of Object.entries(headers)) { request.headers.set(key, value); } return { span, tracingContext: updatedOptions.tracingOptions.tracingContext }; } catch (e) { import_log.logger.warning(`Skipping creating a tracing span due to an error: ${(0, import_core_util.getErrorMessage)(e)}`); return void 0; } } function tryProcessError(span, error) { try { span.setStatus({ status: "error", error: (0, import_core_util.isError)(error) ? error : void 0 }); if ((0, import_restError.isRestError)(error) && error.statusCode) { span.setAttribute("http.status_code", error.statusCode); } span.end(); } catch (e) { import_log.logger.warning(`Skipping tracing span processing due to an error: ${(0, import_core_util.getErrorMessage)(e)}`); } } function tryProcessResponse(span, response) { try { span.setAttribute("http.status_code", response.status); const serviceRequestId = response.headers.get("x-ms-request-id"); if (serviceRequestId) { span.setAttribute("serviceRequestId", serviceRequestId); } if (response.status >= 400) { span.setStatus({ status: "error" }); } span.end(); } catch (e) { import_log.logger.warning(`Skipping tracing span processing due to an error: ${(0, import_core_util.getErrorMessage)(e)}`); } } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { tracingPolicy, tracingPolicyName }); //# sourceMappingURL=tracingPolicy.js.map