{"version":3,"file":"SpanProcessorMetrics.js","sourceRoot":"","sources":["../../../src/export/SpanProcessorMetrics.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AASH,8EAAsE;AACtE,wCAMoB;AAEpB,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAOnD,MAAa,oBAAoB;IACd,cAAc,CAAU;IACxB,SAAS,CAAsC;IAC/C,iBAAiB,CAAiC;IAElD,aAAa,CAAa;IAC1B,YAAY,CAAa;IAE1C,YAAY,aAAqB,EAAE,KAAY,EAAE,WAAyB;QACxE,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzD,gBAAgB,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QAEjD,IAAI,CAAC,aAAa,GAAG;YACnB,CAAC,kCAAwB,CAAC,EAAE,aAAa;YACzC,CAAC,kCAAwB,CAAC,EAAE,GAAG,aAAa,IAAI,OAAO,EAAE;SAC1D,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG;YAClB,GAAG,IAAI,CAAC,aAAa;YACrB,CAAC,sCAAe,CAAC,EAAE,YAAY;SAChC,CAAC;QAEF,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,aAAa,CACvC,kDAAwC,EACxC;YACE,IAAI,EAAE,QAAQ;YACd,WAAW,EACT,yFAAyF;SAC5F,CACF,CAAC;QAEF,IAAI,WAAW,EAAE;YACf,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC;YAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAC7C,uDAA6C,EAC7C;gBACE,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,8FAA8F;aACjG,CACF,CAAC;YACF,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAEhD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,6BAA6B,CAClD,mDAAyC,EACzC;gBACE,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,gFAAgF;aACnF,CACF,CAAC;YACF,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAChC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACpD;IACH,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACpD,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,KAAwB;QACjD,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACnD,OAAO;SACR;QAED,MAAM,KAAK,GAAG;YACZ,GAAG,IAAI,CAAC,aAAa;YACrB,CAAC,sCAAe,CAAC,EAAE,KAAK,CAAC,IAAI;SAC9B,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ;QACN,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC5C,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SACvD;IACH,CAAC;CACF;AA/ED,oDA+EC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type {\n Attributes,\n Counter,\n Meter,\n ObservableCallback,\n ObservableUpDownCounter,\n} from '@opentelemetry/api';\nimport { ATTR_ERROR_TYPE } from '@opentelemetry/semantic-conventions';\nimport {\n ATTR_OTEL_COMPONENT_NAME,\n ATTR_OTEL_COMPONENT_TYPE,\n METRIC_OTEL_SDK_PROCESSOR_SPAN_PROCESSED,\n METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_CAPACITY,\n METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_SIZE,\n} from '../semconv';\n\nconst componentCounter = new Map();\n\ninterface QueueConfig {\n capacity: number;\n getQueueSize: () => number;\n}\n\nexport class SpanProcessorMetrics {\n private readonly processedSpans: Counter;\n private readonly queueSize: ObservableUpDownCounter | undefined;\n private readonly queueSizeCallback: ObservableCallback | undefined;\n\n private readonly standardAttrs: Attributes;\n private readonly droppedAttrs: Attributes;\n\n constructor(componentType: string, meter: Meter, queueConfig?: QueueConfig) {\n const counter = componentCounter.get(componentType) ?? 0;\n componentCounter.set(componentType, counter + 1);\n\n this.standardAttrs = {\n [ATTR_OTEL_COMPONENT_TYPE]: componentType,\n [ATTR_OTEL_COMPONENT_NAME]: `${componentType}/${counter}`,\n };\n\n this.droppedAttrs = {\n ...this.standardAttrs,\n [ATTR_ERROR_TYPE]: 'queue_full',\n };\n\n this.processedSpans = meter.createCounter(\n METRIC_OTEL_SDK_PROCESSOR_SPAN_PROCESSED,\n {\n unit: '{span}',\n description:\n 'The number of spans for which the processing has finished, either successful or failed.',\n }\n );\n\n if (queueConfig) {\n const { capacity, getQueueSize } = queueConfig;\n const queueCapacity = meter.createUpDownCounter(\n METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_CAPACITY,\n {\n unit: '{span}',\n description:\n 'The maximum number of spans the queue of a given instance of an SDK span processor can hold.',\n }\n );\n queueCapacity.add(capacity, this.standardAttrs);\n\n this.queueSize = meter.createObservableUpDownCounter(\n METRIC_OTEL_SDK_PROCESSOR_SPAN_QUEUE_SIZE,\n {\n unit: '{span}',\n description:\n 'The number of spans in the queue of a given instance of an SDK span processor.',\n }\n );\n this.queueSizeCallback = result =>\n result.observe(getQueueSize(), this.standardAttrs);\n this.queueSize.addCallback(this.queueSizeCallback);\n }\n }\n\n dropSpans(count: number) {\n this.processedSpans.add(count, this.droppedAttrs);\n }\n\n finishSpans(count: number, error: Error | undefined) {\n if (!error) {\n this.processedSpans.add(count, this.standardAttrs);\n return;\n }\n\n const attrs = {\n ...this.standardAttrs,\n [ATTR_ERROR_TYPE]: error.name,\n };\n this.processedSpans.add(count, attrs);\n }\n\n shutdown() {\n if (this.queueSize && this.queueSizeCallback) {\n this.queueSize.removeCallback(this.queueSizeCallback);\n }\n }\n}\n"]}