@manifest-cyber/observability-ts 0.2.11 → 0.2.13

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.
@@ -0,0 +1,462 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.initMetricsProvider = initMetricsProvider;
37
+ exports.getSharedMeterProvider = getSharedMeterProvider;
38
+ exports.getSharedResource = getSharedResource;
39
+ exports.getSharedPrometheusExporter = getSharedPrometheusExporter;
40
+ exports.getMeter = getMeter;
41
+ const api_1 = require("@opentelemetry/api");
42
+ const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
43
+ const resources_1 = require("@opentelemetry/resources");
44
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
45
+ /** All valid auto-instrumentation keys for validation */
46
+ const VALID_AUTO_INSTRUMENT_KEYS = [
47
+ 'http',
48
+ 'express',
49
+ 'fetch',
50
+ 'grpc',
51
+ 'mongo',
52
+ 'mongoose',
53
+ 'mysql',
54
+ 'pg',
55
+ 'redis',
56
+ 'aws-sdk',
57
+ ];
58
+ let sharedMeterProvider;
59
+ let sharedResource;
60
+ let sharedPrometheusExporter;
61
+ async function initMetricsProvider(options = {}) {
62
+ const logger = options.logger;
63
+ const enabled = options.enabled ?? process.env.OTEL_METRICS_ENABLED !== 'false';
64
+ if (!enabled) {
65
+ logger?.info?.('[metrics] Metrics disabled');
66
+ return {
67
+ exporterType: 'none',
68
+ shutdown: async () => undefined,
69
+ };
70
+ }
71
+ // Cleanup any existing provider before creating a new one
72
+ if (sharedMeterProvider) {
73
+ logger?.debug?.('[metrics] Shutting down existing MeterProvider before reinitializing');
74
+ await sharedMeterProvider.shutdown().catch(() => undefined);
75
+ }
76
+ sharedMeterProvider = undefined;
77
+ sharedResource = undefined;
78
+ sharedPrometheusExporter = undefined;
79
+ const exporterType = resolveExporter(options, logger);
80
+ const resource = (0, resources_1.resourceFromAttributes)({
81
+ [semantic_conventions_1.ATTR_SERVICE_NAME]: options.serviceName || process.env.SERVICE_NAME || 'unknown-service',
82
+ 'deployment.environment': options.environment || process.env.ENV || 'development',
83
+ ...options.resourceAttributes,
84
+ });
85
+ let prometheusUrl;
86
+ let prometheusExporter;
87
+ const readers = [];
88
+ if (exporterType === 'prometheus') {
89
+ const prom = await createPrometheusExporter(options, logger);
90
+ if (prom) {
91
+ // PrometheusExporter implements MetricReader but types don't align perfectly
92
+ readers.push(prom.reader);
93
+ prometheusUrl = prom.url;
94
+ prometheusExporter = prom.reader;
95
+ sharedPrometheusExporter = prom.reader;
96
+ }
97
+ }
98
+ else if (exporterType === 'otlp-grpc' || exporterType === 'otlp-http') {
99
+ const periodicReader = await createOtlpReader(exporterType, options, logger);
100
+ if (periodicReader) {
101
+ readers.push(periodicReader);
102
+ }
103
+ }
104
+ const meterProviderOptions = { resource, readers };
105
+ const meterProvider = new sdk_metrics_1.MeterProvider(meterProviderOptions);
106
+ api_1.metrics.setGlobalMeterProvider(meterProvider);
107
+ sharedMeterProvider = meterProvider;
108
+ sharedResource = resource;
109
+ if (options.enableRuntimeMetrics ?? true) {
110
+ await maybeEnableRuntimeMetrics(meterProvider, logger);
111
+ }
112
+ await maybeEnableAutoInstrumentation(meterProvider, options, logger);
113
+ return {
114
+ meterProvider,
115
+ exporterType,
116
+ prometheusUrl,
117
+ prometheusExporter,
118
+ shutdown: async () => {
119
+ await meterProvider.shutdown().catch(() => undefined);
120
+ // Clear shared singletons to prevent stale references
121
+ sharedMeterProvider = undefined;
122
+ sharedResource = undefined;
123
+ sharedPrometheusExporter = undefined;
124
+ },
125
+ };
126
+ }
127
+ function resolveExporter(options, logger) {
128
+ const validExporters = ['otlp-grpc', 'otlp-http', 'prometheus', 'none'];
129
+ const fromEnv = process.env.OTEL_METRICS_EXPORTER;
130
+ if (fromEnv) {
131
+ if (validExporters.includes(fromEnv)) {
132
+ return fromEnv;
133
+ }
134
+ const message = `[metrics] Invalid OTEL_METRICS_EXPORTER value: '${fromEnv}'. ` +
135
+ `Valid values: ${validExporters.join(', ')}. Falling back to default.`;
136
+ (logger?.warn ?? console.warn)(message);
137
+ }
138
+ if (options.exporter) {
139
+ if (validExporters.includes(options.exporter)) {
140
+ return options.exporter;
141
+ }
142
+ const message = `[metrics] Invalid exporter option: '${options.exporter}'. ` +
143
+ `Valid values: ${validExporters.join(', ')}. Falling back to default.`;
144
+ (logger?.warn ?? console.warn)(message);
145
+ }
146
+ return 'otlp-grpc';
147
+ }
148
+ async function createOtlpReader(exporterType, options, logger) {
149
+ try {
150
+ const { PeriodicExportingMetricReader } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/sdk-metrics')));
151
+ const otlpEndpoint = options.otlpEndpoint ||
152
+ process.env.OTEL_EXPORTER_OTLP_ENDPOINT ||
153
+ (exporterType === 'otlp-grpc'
154
+ ? 'http://localhost:4317'
155
+ : 'http://localhost:4318/v1/metrics');
156
+ const exporter = exporterType === 'otlp-grpc'
157
+ ? await createOtlpGrpcExporter(otlpEndpoint, logger)
158
+ : await createOtlpHttpExporter(otlpEndpoint, logger);
159
+ if (!exporter)
160
+ return undefined;
161
+ return new PeriodicExportingMetricReader({
162
+ exporter,
163
+ exportIntervalMillis: options.exportIntervalMillis ?? 60000,
164
+ });
165
+ }
166
+ catch (error) {
167
+ logger?.error?.('[metrics] Failed to create OTLP metric reader', error);
168
+ return undefined;
169
+ }
170
+ }
171
+ async function createOtlpGrpcExporter(endpoint, logger) {
172
+ try {
173
+ const { OTLPMetricExporter } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/exporter-metrics-otlp-grpc')));
174
+ return new OTLPMetricExporter({ url: endpoint });
175
+ }
176
+ catch (error) {
177
+ logger?.error?.('[metrics] Failed to load OTLP gRPC metrics exporter', error);
178
+ return undefined;
179
+ }
180
+ }
181
+ async function createOtlpHttpExporter(endpoint, logger) {
182
+ try {
183
+ const { OTLPMetricExporter } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/exporter-metrics-otlp-http')));
184
+ return new OTLPMetricExporter({ url: endpoint });
185
+ }
186
+ catch (error) {
187
+ logger?.error?.('[metrics] Failed to load OTLP HTTP metrics exporter', error);
188
+ return undefined;
189
+ }
190
+ }
191
+ async function createPrometheusExporter(options, logger) {
192
+ try {
193
+ const { PrometheusExporter } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/exporter-prometheus')));
194
+ const port = options.prometheusPort ?? parseInt(process.env.OTEL_PROMETHEUS_PORT || '9464', 10);
195
+ const endpoint = options.prometheusEndpoint || process.env.OTEL_PROMETHEUS_ENDPOINT || '/metrics';
196
+ const disableServer = options.prometheusDisableServer ??
197
+ process.env.OTEL_PROMETHEUS_DISABLE_SERVER === 'true';
198
+ const exporter = new PrometheusExporter({
199
+ port,
200
+ endpoint,
201
+ preventServerStart: disableServer,
202
+ });
203
+ let url;
204
+ if (!disableServer) {
205
+ await exporter.startServer();
206
+ // Log with localhost instead of 0.0.0.0 for client-accessible URL
207
+ const clientUrl = `http://localhost:${port}${endpoint}`;
208
+ url = `http://0.0.0.0:${port}${endpoint}`;
209
+ logger?.info?.(`[metrics] Prometheus exporter listening at ${clientUrl}`);
210
+ }
211
+ else {
212
+ logger?.info?.('[metrics] Prometheus exporter created without server; attach handler to existing server');
213
+ }
214
+ return { reader: exporter, url };
215
+ }
216
+ catch (error) {
217
+ logger?.error?.('[metrics] Failed to start Prometheus exporter', error);
218
+ return undefined;
219
+ }
220
+ }
221
+ function getSharedMeterProvider() {
222
+ return sharedMeterProvider;
223
+ }
224
+ function getSharedResource() {
225
+ return sharedResource;
226
+ }
227
+ function getSharedPrometheusExporter() {
228
+ return sharedPrometheusExporter;
229
+ }
230
+ /**
231
+ * Get a Meter instance from the shared MeterProvider.
232
+ *
233
+ * @throws Error if metrics provider has not been initialized
234
+ * @param name Optional meter name (default: 'default')
235
+ */
236
+ function getMeter(name = 'default') {
237
+ if (!sharedMeterProvider) {
238
+ throw new Error('Metrics provider not initialized - call initMetricsProvider() before getMeter()');
239
+ }
240
+ return sharedMeterProvider.getMeter(name);
241
+ }
242
+ async function maybeEnableRuntimeMetrics(meterProvider, logger) {
243
+ const enabledMetrics = [];
244
+ // Try to enable host metrics (CPU, memory, network, etc.)
245
+ try {
246
+ const { HostMetrics } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/host-metrics')));
247
+ const hostMetrics = new HostMetrics({ meterProvider });
248
+ hostMetrics.start();
249
+ enabledMetrics.push('host');
250
+ }
251
+ catch (_err) {
252
+ logger?.debug?.('[metrics] @opentelemetry/host-metrics not installed; skipping host metrics');
253
+ }
254
+ // Try to enable runtime metrics (event loop, GC, heap, etc.)
255
+ try {
256
+ const { RuntimeNodeInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-runtime-node')));
257
+ const runtimeMetrics = new RuntimeNodeInstrumentation();
258
+ runtimeMetrics.setMeterProvider(meterProvider);
259
+ enabledMetrics.push('runtime');
260
+ }
261
+ catch (_err) {
262
+ logger?.debug?.('[metrics] @opentelemetry/instrumentation-runtime-node not installed; skipping runtime metrics');
263
+ }
264
+ if (enabledMetrics.length > 0) {
265
+ logger?.info?.(`[metrics] Enabled metrics: ${enabledMetrics.join(', ')}`);
266
+ }
267
+ else {
268
+ logger?.debug?.('[metrics] No runtime/host metrics packages installed. Install @opentelemetry/host-metrics and/or @opentelemetry/instrumentation-runtime-node for automatic metrics.');
269
+ }
270
+ }
271
+ /**
272
+ * Enable auto-instrumentation based on the provided selection.
273
+ *
274
+ * **IMPORTANT**: OpenTelemetry instrumentations primarily emit spans (traces), not metrics.
275
+ * Only a MeterProvider is registered here. For span instrumentation to work, a TracerProvider
276
+ * must be configured and registered separately (e.g., using initTracing from this package).
277
+ * Without a TracerProvider, span-producing instrumentations will be no-ops.
278
+ */
279
+ async function maybeEnableAutoInstrumentation(meterProvider, options, logger) {
280
+ const selection = resolveAutoInstrumentSelection(options, logger);
281
+ if (!selection.length) {
282
+ logger?.debug?.('[metrics] No auto-instrumentation requested');
283
+ return;
284
+ }
285
+ logger?.debug?.(`[metrics] Attempting auto-instrumentation for: ${selection.join(', ')}`);
286
+ try {
287
+ const { registerInstrumentations } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation')));
288
+ const instrumentations = [];
289
+ for (const key of selection) {
290
+ const instrumentation = await loadInstrumentation(key, logger);
291
+ if (instrumentation) {
292
+ instrumentations.push(instrumentation);
293
+ }
294
+ }
295
+ if (instrumentations.length === 0) {
296
+ logger?.warn?.('[metrics] No instrumentation packages found. Install the required packages:\n' +
297
+ selection.map((k) => ` - ${getPackageNameForKey(k)}`).join('\n'));
298
+ return;
299
+ }
300
+ // Register instrumentations with MeterProvider only.
301
+ // Note: Most instrumentations emit spans, which require a TracerProvider to be registered separately.
302
+ registerInstrumentations({
303
+ meterProvider,
304
+ instrumentations,
305
+ });
306
+ logger?.info?.(`[metrics] Auto-instrumentation enabled for: ${instrumentations
307
+ .map((i) => i.constructor?.name || 'unknown')
308
+ .join(', ')}`);
309
+ }
310
+ catch (_err) {
311
+ logger?.warn?.('[metrics] @opentelemetry/instrumentation not installed; skipping auto-instrumentation');
312
+ }
313
+ }
314
+ /**
315
+ * Get the npm package name for an instrumentation key (for helpful error messages)
316
+ */
317
+ function getPackageNameForKey(key) {
318
+ const packageMap = {
319
+ http: '@opentelemetry/instrumentation-http',
320
+ express: '@opentelemetry/instrumentation-express',
321
+ fetch: '@opentelemetry/instrumentation-undici or @opentelemetry/instrumentation-fetch',
322
+ grpc: '@opentelemetry/instrumentation-grpc',
323
+ mongo: '@opentelemetry/instrumentation-mongodb',
324
+ mongoose: '@opentelemetry/instrumentation-mongoose',
325
+ mysql: '@opentelemetry/instrumentation-mysql',
326
+ pg: '@opentelemetry/instrumentation-pg',
327
+ redis: '@opentelemetry/instrumentation-redis',
328
+ 'aws-sdk': '@opentelemetry/instrumentation-aws-sdk',
329
+ };
330
+ return packageMap[key] || `@opentelemetry/instrumentation-${key}`;
331
+ }
332
+ /**
333
+ * Resolve which auto-instrumentations to enable.
334
+ *
335
+ * Priority:
336
+ * 1. Environment variable OTEL_METRICS_AUTO_INSTRUMENT (comma-separated)
337
+ * 2. Explicit options.autoInstrument config
338
+ * 3. Empty array (no defaults - explicit opt-in only)
339
+ */
340
+ function resolveAutoInstrumentSelection(options, logger) {
341
+ // Priority 1: Environment variable
342
+ const fromEnv = process.env.OTEL_METRICS_AUTO_INSTRUMENT;
343
+ if (fromEnv) {
344
+ const keys = fromEnv
345
+ .split(',')
346
+ .map((s) => s.trim())
347
+ .filter(Boolean)
348
+ .filter((key) => {
349
+ const valid = VALID_AUTO_INSTRUMENT_KEYS.includes(key);
350
+ if (!valid) {
351
+ logger?.warn?.(`[metrics] Unknown auto-instrument key from env: '${key}'`);
352
+ }
353
+ return valid;
354
+ });
355
+ return keys;
356
+ }
357
+ // Priority 2: Explicit config
358
+ if (options.autoInstrument) {
359
+ // Handle array format: ['http', 'express', 'mongo']
360
+ if (Array.isArray(options.autoInstrument)) {
361
+ return options.autoInstrument.filter((key) => {
362
+ const valid = VALID_AUTO_INSTRUMENT_KEYS.includes(key);
363
+ if (!valid) {
364
+ logger?.warn?.(`[metrics] Unknown auto-instrument key: '${key}'`);
365
+ }
366
+ return valid;
367
+ });
368
+ }
369
+ // Handle object format: { http: true, express: true }
370
+ return Object.entries(options.autoInstrument)
371
+ .filter(([key, enabled]) => {
372
+ if (!VALID_AUTO_INSTRUMENT_KEYS.includes(key)) {
373
+ logger?.warn?.(`[metrics] Unknown auto-instrument key: '${key}'`);
374
+ return false;
375
+ }
376
+ return enabled;
377
+ })
378
+ .map(([key]) => key);
379
+ }
380
+ // Priority 3: No defaults - explicit opt-in only
381
+ return [];
382
+ }
383
+ async function loadInstrumentation(key, logger) {
384
+ try {
385
+ switch (key) {
386
+ case 'http': {
387
+ const { HttpInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-http')));
388
+ return new HttpInstrumentation();
389
+ }
390
+ case 'express': {
391
+ const { ExpressInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-express')));
392
+ return new ExpressInstrumentation();
393
+ }
394
+ case 'fetch': {
395
+ // Attempt to instrument fetch/undici with dynamic imports and fallback logic.
396
+ // String interpolation for undiciPkg and fetchPkg avoids TypeScript checking
397
+ // of potentially uninstalled packages (peer dependencies), allowing the code
398
+ // to compile even when @opentelemetry/instrumentation-undici or
399
+ // @opentelemetry/instrumentation-fetch are not present. The try/catch structure
400
+ // first attempts UndiciInstrumentation (for Node.js native fetch via undici),
401
+ // then falls back to FetchInstrumentation (browser-based), and finally logs
402
+ // via logger when neither package is available.
403
+ try {
404
+ const undiciPkg = `@opentelemetry/instrumentation-${'undici'}`;
405
+ const { UndiciInstrumentation } = await Promise.resolve(`${undiciPkg}`).then(s => __importStar(require(s)));
406
+ return new UndiciInstrumentation();
407
+ }
408
+ catch {
409
+ // Fall back to fetch instrumentation (browser-based)
410
+ try {
411
+ const fetchPkg = `@opentelemetry/instrumentation-${'fetch'}`;
412
+ const { FetchInstrumentation } = await Promise.resolve(`${fetchPkg}`).then(s => __importStar(require(s)));
413
+ return new FetchInstrumentation();
414
+ }
415
+ catch {
416
+ logger?.debug?.('[metrics] Neither undici nor fetch instrumentation installed');
417
+ return undefined;
418
+ }
419
+ }
420
+ }
421
+ case 'grpc': {
422
+ const { GrpcInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-grpc')));
423
+ return new GrpcInstrumentation();
424
+ }
425
+ case 'mongo': {
426
+ const { MongoDBInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-mongodb')));
427
+ return new MongoDBInstrumentation();
428
+ }
429
+ case 'mongoose': {
430
+ const { MongooseInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-mongoose')));
431
+ return new MongooseInstrumentation();
432
+ }
433
+ case 'mysql': {
434
+ const { MySQLInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-mysql')));
435
+ return new MySQLInstrumentation();
436
+ }
437
+ case 'pg': {
438
+ const { PgInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-pg')));
439
+ return new PgInstrumentation();
440
+ }
441
+ case 'redis': {
442
+ const { RedisInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-redis')));
443
+ return new RedisInstrumentation();
444
+ }
445
+ case 'aws-sdk': {
446
+ const { AwsInstrumentation } = await Promise.resolve().then(() => __importStar(require('@opentelemetry/instrumentation-aws-sdk')));
447
+ return new AwsInstrumentation({
448
+ suppressInternalInstrumentation: true,
449
+ });
450
+ }
451
+ default:
452
+ logger?.warn?.(`[metrics] Unknown instrumentation key: '${key}'`);
453
+ return undefined;
454
+ }
455
+ }
456
+ catch (_error) {
457
+ // Package not installed - this is expected, not an error
458
+ logger?.debug?.(`[metrics] Instrumentation '${key}' not available (package not installed)`);
459
+ return undefined;
460
+ }
461
+ }
462
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/metrics/provider.ts"],"names":[],"mappings":"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"}
@@ -68,5 +68,5 @@ export interface MetricsServerOptions {
68
68
  * });
69
69
  * ```
70
70
  */
71
- export declare function startMetricsServer(options?: MetricsServerOptions): Express;
71
+ export declare function startMetricsServer(options?: MetricsServerOptions): Promise<Express>;
72
72
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/metrics/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAG3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClD;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CA+D9E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/metrics/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAW9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGvC,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,OAAO,CAAC,CA6GlB"}
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.startMetricsServer = startMetricsServer;
7
7
  const express_1 = __importDefault(require("express"));
8
- const registry_1 = require("./registry");
8
+ const exporter_prometheus_1 = require("@opentelemetry/exporter-prometheus");
9
+ const provider_1 = require("./provider");
9
10
  const builders_1 = require("./builders");
10
- const startTime = Date.now();
11
11
  /**
12
12
  * Start a metrics server with /metrics and /health endpoints
13
13
  *
@@ -55,28 +55,60 @@ const startTime = Date.now();
55
55
  * });
56
56
  * ```
57
57
  */
58
- function startMetricsServer(options = {}) {
58
+ async function startMetricsServer(options = {}) {
59
59
  // Validate inputs
60
60
  if (options.port !== undefined && (options.port < 1 || options.port > 65535)) {
61
61
  throw new Error('Port must be between 1 and 65535');
62
62
  }
63
+ if (options.serviceName !== undefined && options.serviceName.trim() === '') {
64
+ throw new Error('Service name is required');
65
+ }
63
66
  const { port = parseInt(process.env.MFST_METRICS_PORT || '9090', 10), serviceName = process.env[builders_1.ENV_KEY_SERVICE_NAME] || 'unknown-service', logger, additionalHealthData, } = options;
64
67
  // Validate parsed port
65
68
  if (isNaN(port) || port < 1 || port > 65535) {
66
69
  throw new Error(`Invalid port: ${port}. Port must be between 1 and 65535`);
67
70
  }
71
+ const startTime = Date.now();
68
72
  const app = (0, express_1.default)();
69
- const register = (0, registry_1.getRegistry)();
70
- // Prometheus metrics endpoint
73
+ let meterProvider = (0, provider_1.getSharedMeterProvider)();
74
+ let exporter = (0, provider_1.getSharedPrometheusExporter)();
75
+ // If no meter provider exists, or if provider exists but no prometheus exporter,
76
+ // initialize a new provider with prometheus exporter
77
+ if (!meterProvider || !exporter) {
78
+ const result = await (0, provider_1.initMetricsProvider)({
79
+ serviceName,
80
+ environment: process.env.ENV,
81
+ exporter: 'prometheus',
82
+ prometheusDisableServer: true,
83
+ logger,
84
+ });
85
+ meterProvider = result.meterProvider;
86
+ exporter = result.prometheusExporter;
87
+ }
88
+ if (!meterProvider) {
89
+ throw new Error('Metrics provider not initialized');
90
+ }
91
+ if (!exporter) {
92
+ throw new Error('Failed to create Prometheus exporter');
93
+ }
94
+ // Create a single serializer instance for reuse
95
+ const serializer = new exporter_prometheus_1.PrometheusSerializer();
96
+ // Prometheus metrics endpoint - use the exporter's collect method
71
97
  app.get('/metrics', async (_req, res) => {
72
98
  try {
73
- res.set('Content-Type', register.contentType);
74
- const metrics = await register.metrics();
75
- res.end(metrics);
99
+ // Collect and serialize metrics
100
+ const { resourceMetrics, errors } = await exporter.collect();
101
+ if (errors.length > 0) {
102
+ logger?.warn?.('Metrics collection had errors:', errors);
103
+ }
104
+ // Use the PrometheusSerializer to format metrics
105
+ const metricsString = serializer.serialize(resourceMetrics);
106
+ res.set('Content-Type', 'text/plain; charset=utf-8');
107
+ res.send(metricsString);
76
108
  }
77
109
  catch (err) {
78
110
  const errorMessage = err instanceof Error ? err.message : String(err);
79
- logger?.error('Error generating metrics:', errorMessage);
111
+ logger?.error?.('Error generating metrics:', errorMessage);
80
112
  res.status(500).json({ error: 'Internal server error', message: errorMessage });
81
113
  }
82
114
  });
@@ -94,7 +126,7 @@ function startMetricsServer(options = {}) {
94
126
  }
95
127
  catch (err) {
96
128
  const errorMessage = err instanceof Error ? err.message : String(err);
97
- logger?.error('Error generating health data:', errorMessage);
129
+ logger?.error?.('Error generating health data:', errorMessage);
98
130
  res.status(500).json({
99
131
  status: 'unhealthy',
100
132
  error: errorMessage,
@@ -102,11 +134,16 @@ function startMetricsServer(options = {}) {
102
134
  });
103
135
  }
104
136
  });
105
- app.listen(port, () => {
106
- logger?.info(`Metrics server listening on port ${port}`);
107
- logger?.info(`Metrics endpoint: http://localhost:${port}/metrics`);
108
- logger?.info(`Health endpoint: http://localhost:${port}/health`);
137
+ return new Promise((resolve, reject) => {
138
+ const server = app.listen(port, () => {
139
+ logger?.info(`Metrics server listening on port ${port}`);
140
+ logger?.info(`Metrics endpoint: http://localhost:${port}/metrics`);
141
+ logger?.info(`Health endpoint: http://localhost:${port}/health`);
142
+ resolve(app);
143
+ });
144
+ server.once('error', (err) => {
145
+ reject(err);
146
+ });
109
147
  });
110
- return app;
111
148
  }
112
149
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/metrics/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/metrics/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tracing/setup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,EAAE,MAAM,SAAS,CAAC;AAcrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,WAAW,CAC/B,MAAM,GAAE,aAAkB,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAoFf;AAwDD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAEvC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAepE"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/tracing/setup.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,EAAE,MAAM,SAAS,CAAC;AAerE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAsB,WAAW,CAC/B,MAAM,GAAE,aAAkB,EAC1B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAuFf;AAiGD;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,GAAG,CAEvC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBpE"}