UNPKG

@gati-framework/observability

Version:

Observability stack for Gati framework - Prometheus, Grafana, Loki, and Tracing

66 lines (65 loc) 2.16 kB
export * from './prometheus/metrics.js'; export * from './loki/logger.js'; export * from './tracing/distributed-tracing.js'; export * from './adapters/index.js'; import { PrometheusMetrics, createPrometheusMiddleware } from './prometheus/metrics.js'; import { LokiLogger, createLokiMiddleware } from './loki/logger.js'; import { DistributedTracing, createTracingMiddleware } from './tracing/distributed-tracing.js'; export class ObservabilityStack { metrics; logger; tracing; constructor(config) { if (config.prometheus !== false) { this.metrics = new PrometheusMetrics(); } if (config.loki) { this.logger = new LokiLogger({ ...config.loki, labels: { service: config.serviceName, version: config.serviceVersion || '1.0.0', environment: config.environment || 'production', ...config.loki.labels, }, }); } if (config.tracing) { this.tracing = new DistributedTracing({ ...config.tracing, serviceVersion: config.serviceVersion, environment: config.environment, }); } } getMiddleware() { const middleware = []; if (this.metrics) { middleware.push(createPrometheusMiddleware(this.metrics)); } if (this.logger) { middleware.push(createLokiMiddleware(this.logger)); } if (this.tracing) { middleware.push(createTracingMiddleware(this.tracing)); } return middleware; } async getMetricsHandler() { if (!this.metrics) { throw new Error('Prometheus metrics not enabled'); } return async (_req, res) => { res.setHeader('Content-Type', 'text/plain'); res.send(await this.metrics.getMetrics()); }; } async shutdown() { if (this.logger) { await this.logger.flush(); } if (this.tracing) { await this.tracing.shutdown(); } } }