{"version":3,"file":"eventLoopTimeCollector.js","sourceRoot":"","sources":["../../../src/metrics/eventLoopTimeCollector.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qDAAoE;AAEpE,mDAAgD;AAChD,wCAKoB;AAEpB,MAAM,EAAE,oBAAoB,EAAE,6BAA6B,EAAE,GAAG,6BAAW,CAAC;AAE5E,MAAa,sBAAuB,SAAQ,6BAAa;IAChD,uBAAuB,CAAC,KAAY;QACzC,MAAM,WAAW,GAAG,KAAK,CAAC,uBAAuB,CAC/C,sCAA4B,EAC5B;YACE,WAAW,EACT,oEAAoE;YACtE,IAAI,EAAE,GAAG;SACV,CACF,CAAC;QAEF,KAAK,CAAC,0BAA0B,CAC9B,KAAK,EAAC,gBAAgB,EAAC,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,OAAO;YAElC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO;YAE/B,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE;gBACxD,CAAC,qCAA2B,CAAC,EAAE,6CAAmC;aACnE,CAAC,CAAC;YACH,gBAAgB,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE;gBACtD,CAAC,qCAA2B,CAAC,EAAE,2CAAiC;aACjE,CAAC,CAAC;QACL,CAAC,EACD,CAAC,WAAW,CAAC,CACd,CAAC;IACJ,CAAC;IAES,eAAe,KAAU,CAAC;IAE1B,cAAc,KAAU,CAAC;IAE3B,MAAM;QACZ,OAAO,6BAA6B,EAAE,CAAC;IACzC,CAAC;CACF;AApCD,wDAoCC","sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { EventLoopUtilization, performance } from 'node:perf_hooks';\nimport { Meter } from '@opentelemetry/api';\nimport { BaseCollector } from './baseCollector';\nimport {\n  METRIC_NODEJS_EVENTLOOP_TIME,\n  ATTR_NODEJS_EVENTLOOP_STATE,\n  NODEJS_EVENTLOOP_STATE_VALUE_ACTIVE,\n  NODEJS_EVENTLOOP_STATE_VALUE_IDLE,\n} from '../semconv';\n\nconst { eventLoopUtilization: eventLoopUtilizationCollector } = performance;\n\nexport class EventLoopTimeCollector extends BaseCollector {\n  public updateMetricInstruments(meter: Meter): void {\n    const timeCounter = meter.createObservableCounter(\n      METRIC_NODEJS_EVENTLOOP_TIME,\n      {\n        description:\n          'Cumulative duration of time the event loop has been in each state.',\n        unit: 's',\n      }\n    );\n\n    meter.addBatchObservableCallback(\n      async observableResult => {\n        if (!this._config.enabled) return;\n\n        const data = this.scrape();\n        if (data === undefined) return;\n\n        observableResult.observe(timeCounter, data.active / 1000, {\n          [ATTR_NODEJS_EVENTLOOP_STATE]: NODEJS_EVENTLOOP_STATE_VALUE_ACTIVE,\n        });\n        observableResult.observe(timeCounter, data.idle / 1000, {\n          [ATTR_NODEJS_EVENTLOOP_STATE]: NODEJS_EVENTLOOP_STATE_VALUE_IDLE,\n        });\n      },\n      [timeCounter]\n    );\n  }\n\n  protected internalDisable(): void {}\n\n  protected internalEnable(): void {}\n\n  private scrape(): EventLoopUtilization {\n    return eventLoopUtilizationCollector();\n  }\n}\n"]}