@manifest-cyber/observability-ts 0.2.20 → 0.2.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -297,11 +297,25 @@ extractMessageTraceContext(message.MessageAttributes);
297
297
  | `MFST_METRICS_PORT` | Metrics server port (also used by `initObservability` when `metricsPort` is omitted) | `9090` |
298
298
  | `OTEL_EXPORTER_OTLP_ENDPOINT` | OTLP endpoint | `'http://localhost:4317'` |
299
299
  | `OTEL_TRACING_ENABLED` | Enable/disable tracing | `true` |
300
+ | `OTEL_METRICS_EXPORTER` | Metrics exporter used by `initObservability`: `prometheus` (scrape), `otlp-grpc`/`otlp-http` (push), or `none` | `prometheus` |
300
301
  | `ENV` | Environment (dev/staging/prod) | `'development'` |
301
302
 
303
+ ## Push-Based Metrics (short-lived processes)
304
+
305
+ By default, `initObservability` exposes metrics on a Prometheus scrape endpoint. That model
306
+ assumes a long-lived process; short-lived workloads (e.g. single-task jobs running as
307
+ KEDA-scaled Kubernetes Jobs) terminate before they are ever scraped. For those, set
308
+ `OTEL_METRICS_EXPORTER=otlp-grpc` (or `otlp-http`):
309
+
310
+ - Metrics are pushed to `OTEL_EXPORTER_OTLP_ENDPOINT` instead of being scraped, and the
311
+ Prometheus scrape server is not started.
312
+ - The process exit interceptor performs a final metrics export on `process.exit()`, so
313
+ buffered metrics are not lost when the process ends before the periodic export interval
314
+ (60s) fires.
315
+
302
316
  ## Process Exit Interceptor
303
317
 
304
- When tracing is enabled, `process.exit()` is automatically intercepted to flush tracing data before termination (default: enabled, 2s timeout). This prevents telemetry loss on abrupt exits.
318
+ When tracing is enabled (or metrics use a push exporter), `process.exit()` is automatically intercepted to flush telemetry before termination (default: enabled, 2s timeout). This prevents telemetry loss on abrupt exits.
305
319
 
306
320
  ```typescript
307
321
  import { initObservability } from '@manifest-cyber/observability-ts';
package/dist/init.d.ts CHANGED
@@ -34,12 +34,15 @@ export interface InitObservabilityConfig {
34
34
  */
35
35
  autoInstrument?: AutoInstrumentKey[];
36
36
  /**
37
- * Intercept process.exit() to flush tracing data before termination.
37
+ * Intercept process.exit() to flush telemetry before termination. Flushes
38
+ * tracing data and, when metrics use a push exporter (OTLP), buffered
39
+ * metrics. Required for short-lived processes (e.g. single-task jobs) that
40
+ * would otherwise exit before the periodic metric reader ever exports.
38
41
  * @default true
39
42
  */
40
43
  interceptProcessExit?: boolean;
41
44
  /**
42
- * Timeout (ms) for flushing tracing data on process.exit().
45
+ * Timeout (ms) for flushing telemetry on process.exit().
43
46
  * @default 2000
44
47
  */
45
48
  exitFlushTimeoutMs?: number;
@@ -57,6 +60,12 @@ export interface InitObservabilityResult {
57
60
  metricsPort: number;
58
61
  /** Whether default metrics are currently registered (first call wins) */
59
62
  defaultMetricsEnabled: boolean;
63
+ /**
64
+ * Metrics exporter actually in use. Defaults to 'prometheus' (scrape);
65
+ * override with the OTEL_METRICS_EXPORTER environment variable
66
+ * (e.g. 'otlp-grpc' for push-based export from short-lived jobs).
67
+ */
68
+ metricsExporterType: 'otlp-grpc' | 'otlp-http' | 'prometheus' | 'none';
60
69
  }
61
70
  /**
62
71
  * Initialize observability for a service (metrics + tracing).
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,uBAAuB;IACtC,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAiElC"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,WAAW,uBAAuB;IACtC,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,0BAA0B;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,qBAAqB,EAAE,OAAO,CAAC;IAC/B;;;;OAIG;IACH,mBAAmB,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,CAAC;CACxE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,uBAAuB,CAAC,CAsGlC"}
package/dist/init.js CHANGED
@@ -30,12 +30,15 @@ const provider_1 = require("./metrics/provider");
30
30
  async function initObservability(config) {
31
31
  const { serviceName = process.env.SERVICE_NAME || 'unknown-service', metricsPort = parseInt(process.env.MFST_METRICS_PORT || '9090', 10), tracingEnabled = process.env.OTEL_TRACING_ENABLED !== 'false', samplingRatio = getSamplingRatio(), otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://localhost:4317', enableDefaultMetrics = true, autoInstrument, interceptProcessExit = true, exitFlushTimeoutMs = 2000, logger, } = config;
32
32
  let tracingInitialized = false;
33
- // Initialize OpenTelemetry metrics provider with Prometheus exporter.
34
- // Using 'prometheus' here ensures the exporter is created on the first init,
35
- // so startMetricsServer() reuses it instead of triggering a second
33
+ // Initialize OpenTelemetry metrics provider with the Prometheus exporter by
34
+ // default; the OTEL_METRICS_EXPORTER environment variable takes priority and
35
+ // can select a push exporter ('otlp-grpc'/'otlp-http') instead - required
36
+ // for short-lived processes (e.g. single-task jobs) that are never scraped.
37
+ // Defaulting to 'prometheus' ensures the exporter is created on the first
38
+ // init, so startMetricsServer() reuses it instead of triggering a second
36
39
  // initMetricsProvider() call — which would silently fail because
37
40
  // @opentelemetry/api rejects duplicate setGlobalMeterProvider() calls.
38
- await (0, provider_1.initMetricsProvider)({
41
+ const metricsResult = await (0, provider_1.initMetricsProvider)({
39
42
  serviceName,
40
43
  environment: process.env.ENV,
41
44
  exporter: 'prometheus',
@@ -44,6 +47,8 @@ async function initObservability(config) {
44
47
  enableRuntimeMetrics: enableDefaultMetrics,
45
48
  autoInstrument,
46
49
  });
50
+ const metricsPush = metricsResult.exporterType === 'otlp-grpc' ||
51
+ metricsResult.exporterType === 'otlp-http';
47
52
  // Initialize tracing
48
53
  if (tracingEnabled) {
49
54
  await (0, setup_1.initTracing)({
@@ -59,21 +64,47 @@ async function initObservability(config) {
59
64
  });
60
65
  tracingInitialized = true;
61
66
  }
62
- // Install process.exit interceptor if tracing is enabled
63
- if (tracingInitialized && interceptProcessExit) {
67
+ // Register what the exit interceptor must flush for THIS init. Stored in a
68
+ // module-level slot (rather than closed over by the interceptor) so re-init
69
+ // always flushes the current providers, not stale ones.
70
+ currentTelemetryFlush = async () => {
71
+ const tasks = [];
72
+ if (tracingInitialized) {
73
+ tasks.push((0, setup_1.shutdownTracing)(logger).catch((error) => {
74
+ logger?.error('Error flushing tracing data', { error });
75
+ }));
76
+ }
77
+ if (metricsPush) {
78
+ // Shutting down the MeterProvider performs a final export of buffered
79
+ // metrics; without it, short-lived processes exit before the periodic
80
+ // reader ever fires.
81
+ tasks.push(metricsResult.shutdown().catch((error) => {
82
+ logger?.error('Error flushing metrics data', { error });
83
+ }));
84
+ }
85
+ await Promise.all(tasks);
86
+ };
87
+ // Install process.exit interceptor when there is telemetry to flush:
88
+ // tracing data, or buffered metrics in push mode
89
+ if ((tracingInitialized || metricsPush) && interceptProcessExit) {
64
90
  installExitInterceptor(exitFlushTimeoutMs, logger);
65
91
  }
66
- // Start metrics server
67
- await (0, server_1.startMetricsServer)({
68
- serviceName,
69
- port: metricsPort,
70
- });
92
+ // Start the Prometheus scrape server only when scraping is the export
93
+ // model; push-mode (OTLP) and disabled metrics have no server to scrape
94
+ // (startMetricsServer would fail looking for a Prometheus exporter)
95
+ if (metricsResult.exporterType === 'prometheus') {
96
+ await (0, server_1.startMetricsServer)({
97
+ serviceName,
98
+ port: metricsPort,
99
+ });
100
+ }
71
101
  return {
72
102
  serviceName,
73
103
  tracingInitialized,
74
104
  metricsPort,
75
105
  // Runtime metrics enabled via OpenTelemetry host-metrics/runtime-metrics packages
76
106
  defaultMetricsEnabled: enableDefaultMetrics,
107
+ metricsExporterType: metricsResult.exporterType,
77
108
  };
78
109
  }
79
110
  /**
@@ -100,11 +131,20 @@ function getSamplingRatio() {
100
131
  }
101
132
  // Symbol to mark process.exit as already intercepted
102
133
  const EXIT_INTERCEPTOR_INSTALLED = Symbol('__exitInterceptorInstalled');
134
+ // Exit-interceptor state; (re)assigned by every initObservability() call so the
135
+ // interceptor - which is only ever installed once per process - always uses the
136
+ // flush function, timeout, and logger from the most recent initialization.
137
+ let currentTelemetryFlush;
138
+ let currentExitFlushTimeoutMs = 2000;
139
+ let currentExitLogger;
103
140
  /**
104
- * Intercepts process.exit() to flush tracing data before termination.
141
+ * Intercepts process.exit() to flush telemetry (tracing and, in push mode,
142
+ * metrics) before termination.
105
143
  * This function is idempotent - calling it multiple times is safe.
106
144
  */
107
145
  function installExitInterceptor(timeoutMs, logger) {
146
+ currentExitFlushTimeoutMs = timeoutMs;
147
+ currentExitLogger = logger;
108
148
  // Check if our interceptor is already installed using a symbol property
109
149
  if (process.exit[EXIT_INTERCEPTOR_INSTALLED]) {
110
150
  return;
@@ -118,20 +158,22 @@ function installExitInterceptor(timeoutMs, logger) {
118
158
  return;
119
159
  }
120
160
  isExiting = true;
121
- logger?.info('Process exiting, flushing tracing data...', { exitCode: code });
161
+ const exitLogger = currentExitLogger;
162
+ const exitTimeoutMs = currentExitFlushTimeoutMs;
163
+ exitLogger?.info('Process exiting, flushing telemetry...', { exitCode: code });
122
164
  const forceExitTimer = setTimeout(() => {
123
- logger?.warn?.('Tracing flush timed out, forcing exit', {
165
+ exitLogger?.warn?.('Telemetry flush timed out, forcing exit', {
124
166
  exitCode: code,
125
- timeoutMs,
167
+ timeoutMs: exitTimeoutMs,
126
168
  });
127
169
  originalExit(code);
128
- }, timeoutMs);
129
- void (0, setup_1.shutdownTracing)(logger)
170
+ }, exitTimeoutMs);
171
+ void (currentTelemetryFlush ? currentTelemetryFlush() : Promise.resolve())
130
172
  .then(() => {
131
- logger?.info('Tracing data flushed successfully', { exitCode: code });
173
+ exitLogger?.info('Telemetry flushed successfully', { exitCode: code });
132
174
  })
133
175
  .catch((error) => {
134
- logger?.error('Error flushing tracing data', { error, exitCode: code });
176
+ exitLogger?.error('Error flushing telemetry', { error, exitCode: code });
135
177
  })
136
178
  .finally(() => {
137
179
  clearTimeout(forceExitTimer);
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AA2FH,8CAwGC;AAjMD,2CAA+D;AAC/D,6CAAsD;AACtD,iDAAiF;AAoEjF;;;;;;;;;;;;;;;;;;GAkBG;AACI,KAAK,UAAU,iBAAiB,CACrC,MAA+B;IAE/B,MAAM,EACJ,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,iBAAiB,EAC3D,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,EAAE,EAAE,CAAC,EACnE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,OAAO,EAC7D,aAAa,GAAG,gBAAgB,EAAE,EAClC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,uBAAuB,EACjF,oBAAoB,GAAG,IAAI,EAC3B,cAAc,EACd,oBAAoB,GAAG,IAAI,EAC3B,kBAAkB,GAAG,IAAI,EACzB,MAAM,GACP,GAAG,MAAM,CAAC;IAEX,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,0EAA0E;IAC1E,yEAAyE;IACzE,iEAAiE;IACjE,uEAAuE;IACvE,MAAM,aAAa,GAAG,MAAM,IAAA,8BAAmB,EAAC;QAC9C,WAAW;QACX,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG;QAC5B,QAAQ,EAAE,YAAY;QACtB,cAAc,EAAE,WAAW;QAC3B,uBAAuB,EAAE,IAAI;QAC7B,oBAAoB,EAAE,oBAAoB;QAC1C,cAAc;KACf,CAAC,CAAC;IACH,MAAM,WAAW,GACf,aAAa,CAAC,YAAY,KAAK,WAAW;QAC1C,aAAa,CAAC,YAAY,KAAK,WAAW,CAAC;IAE7C,qBAAqB;IACrB,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAA,mBAAW,EAAC;YAChB,WAAW;YACX,QAAQ,EAAE;gBACR,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,YAAY;aACvB;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,aAAa;gBACnB,aAAa,EAAE,IAAI;aACpB;SACF,CAAC,CAAC;QACH,kBAAkB,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,wDAAwD;IACxD,qBAAqB,GAAG,KAAK,IAAmB,EAAE;QAChD,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,IAAI,kBAAkB,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CACR,IAAA,uBAAe,EAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtC,MAAM,EAAE,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,sEAAsE;YACtE,sEAAsE;YACtE,qBAAqB;YACrB,KAAK,CAAC,IAAI,CACR,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACvC,MAAM,EAAE,KAAK,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1D,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,qEAAqE;IACrE,iDAAiD;IACjD,IAAI,CAAC,kBAAkB,IAAI,WAAW,CAAC,IAAI,oBAAoB,EAAE,CAAC;QAChE,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,sEAAsE;IACtE,wEAAwE;IACxE,oEAAoE;IACpE,IAAI,aAAa,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;QAChD,MAAM,IAAA,2BAAkB,EAAC;YACvB,WAAW;YACX,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,WAAW;QACX,kBAAkB;QAClB,WAAW;QACX,kFAAkF;QAClF,qBAAqB,EAAE,oBAAoB;QAC3C,mBAAmB,EAAE,aAAa,CAAC,YAAY;KAChD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB;IACvB,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACzD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,aAAa,CAAC;IAE7C,+BAA+B;IAC/B,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6BAA6B;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,qDAAqD;AACrD,MAAM,0BAA0B,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAExE,gFAAgF;AAChF,gFAAgF;AAChF,2EAA2E;AAC3E,IAAI,qBAAwD,CAAC;AAC7D,IAAI,yBAAyB,GAAG,IAAI,CAAC;AACrC,IAAI,iBAAqC,CAAC;AAE1C;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,SAAiB,EAAE,MAAe;IAChE,yBAAyB,GAAG,SAAS,CAAC;IACtC,iBAAiB,GAAG,MAAM,CAAC;IAE3B,wEAAwE;IACxE,IAAK,OAAO,CAAC,IAAY,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACtD,OAAO;IACT,CAAC;IAED,8CAA8C;IAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,MAAM,eAAe,GAAG,CAAC,CAAC,IAAa,EAAE,EAAE;QACzC,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,SAAS,GAAG,IAAI,CAAC;QACjB,MAAM,UAAU,GAAG,iBAAiB,CAAC;QACrC,MAAM,aAAa,GAAG,yBAAyB,CAAC;QAChD,UAAU,EAAE,IAAI,CAAC,wCAAwC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/E,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACrC,UAAU,EAAE,IAAI,EAAE,CAAC,yCAAyC,EAAE;gBAC5D,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,EAAE,aAAa,CAAC,CAAC;QAElB,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACvE,IAAI,CAAC,GAAG,EAAE;YACT,UAAU,EAAE,IAAI,CAAC,gCAAgC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,UAAU,EAAE,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,YAAY,CAAC,cAAc,CAAC,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACP,CAAC,CAAwB,CAAC;IAE1B,sEAAsE;IACtE,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,0BAA0B,EAAE;QACjE,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC;IAE/B,MAAM,EAAE,IAAI,CAAC,oCAAoC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AACpE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manifest-cyber/observability-ts",
3
- "version": "0.2.20",
3
+ "version": "0.2.22",
4
4
  "description": "Unified observability library for Manifest Cyber services - Metrics (Prometheus) and Tracing (OpenTelemetry)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",