n8n/packages/testing/containers/services/observability.ts
2026-01-05 09:54:19 +00:00

49 lines
1.6 KiB
TypeScript

/**
* Combined observability helper that provides unified access to logs and metrics.
* The actual services are in victoria-logs.ts and victoria-metrics.ts.
*/
import type { HelperContext } from './types';
import { LogsHelper, type VictoriaLogsResult, escapeLogsQL } from './victoria-logs';
import { MetricsHelper, type VictoriaMetricsResult } from './victoria-metrics';
export { escapeLogsQL };
export { LogsHelper, type LogEntry, type LogQueryOptions } from './victoria-logs';
export {
MetricsHelper,
type MetricResult,
type WaitForMetricOptions,
type ScrapeTarget,
} from './victoria-metrics';
export class ObservabilityHelper {
readonly logs: LogsHelper;
readonly metrics: MetricsHelper;
readonly syslog: VictoriaLogsResult['meta']['syslog'];
constructor(logsMeta: VictoriaLogsResult['meta'], metricsMeta: VictoriaMetricsResult['meta']) {
this.logs = new LogsHelper(logsMeta.queryEndpoint);
this.metrics = new MetricsHelper(metricsMeta.queryEndpoint);
this.syslog = logsMeta.syslog;
}
}
export function createObservabilityHelper(ctx: HelperContext): ObservabilityHelper {
const logsResult = ctx.serviceResults.victoriaLogs as VictoriaLogsResult | undefined;
const metricsResult = ctx.serviceResults.victoriaMetrics as VictoriaMetricsResult | undefined;
if (!logsResult) {
throw new Error('VictoriaLogs service not found in context');
}
if (!metricsResult) {
throw new Error('VictoriaMetrics service not found in context');
}
return new ObservabilityHelper(logsResult.meta, metricsResult.meta);
}
declare module './types' {
interface ServiceHelpers {
observability: ObservabilityHelper;
}
}