@contrail/telemetry 2.0.3 → 2.0.4-beta.0

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/lib/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './logger';
2
+ export * from './metrics';
2
3
  export * from './semantic-conventions';
package/lib/index.js CHANGED
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./logger"), exports);
18
+ __exportStar(require("./metrics"), exports);
18
19
  __exportStar(require("./semantic-conventions"), exports);
@@ -0,0 +1,4 @@
1
+ export declare function getMeter(name: string): import("@opentelemetry/api").Meter;
2
+ export declare function flushMetrics(options?: {
3
+ timeoutMs?: number;
4
+ }): Promise<void>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMeter = getMeter;
4
+ exports.flushMetrics = flushMetrics;
5
+ const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
6
+ const exporter_metrics_otlp_http_1 = require("@opentelemetry/exporter-metrics-otlp-http");
7
+ const resources_1 = require("@opentelemetry/resources");
8
+ const parse_otel_resource_attributes_1 = require("../logger/parse-otel-resource-attributes");
9
+ const otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT;
10
+ const shouldExportToOtlp = Boolean(otlpEndpoint);
11
+ const resource = (0, resources_1.resourceFromAttributes)((0, parse_otel_resource_attributes_1.parseOtelResourceAttributes)());
12
+ const readers = shouldExportToOtlp
13
+ ? [
14
+ new sdk_metrics_1.PeriodicExportingMetricReader({
15
+ exporter: new exporter_metrics_otlp_http_1.OTLPMetricExporter(),
16
+ exportIntervalMillis: 30000,
17
+ }),
18
+ ]
19
+ : [];
20
+ const meterProvider = new sdk_metrics_1.MeterProvider({ resource, readers });
21
+ function getMeter(name) {
22
+ return meterProvider.getMeter(name);
23
+ }
24
+ async function flushMetrics(options) {
25
+ var _a;
26
+ const timeoutMs = (_a = options === null || options === void 0 ? void 0 : options.timeoutMs) !== null && _a !== void 0 ? _a : 5000;
27
+ try {
28
+ await Promise.race([
29
+ meterProvider.forceFlush(),
30
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`Metrics flush timed out after ${timeoutMs}ms`)), timeoutMs)),
31
+ ]);
32
+ }
33
+ catch (error) {
34
+ process.stderr.write(`[OTel Metrics Flush Failed] ${JSON.stringify({
35
+ error: error instanceof Error ? error.message : String(error),
36
+ timeoutMs,
37
+ timestamp: new Date().toISOString(),
38
+ })}\n`);
39
+ }
40
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contrail/telemetry",
3
- "version": "2.0.3",
3
+ "version": "2.0.4-beta.0",
4
4
  "description": "Telemetry and monitoring utilities for contrail services",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -20,8 +20,10 @@
20
20
  "@opentelemetry/api-logs": "^0.211.0",
21
21
  "@opentelemetry/core": "^2.5.0",
22
22
  "@opentelemetry/exporter-logs-otlp-http": "^0.211.0",
23
+ "@opentelemetry/exporter-metrics-otlp-http": "^0.211.0",
23
24
  "@opentelemetry/resources": "^2.5.0",
24
25
  "@opentelemetry/sdk-logs": "^0.211.0",
26
+ "@opentelemetry/sdk-metrics": "^2.5.0",
25
27
  "@opentelemetry/sdk-trace-base": "^2.5.0",
26
28
  "@opentelemetry/semantic-conventions": "^1.39.0",
27
29
  "pino": "^10.1.0"