autotel
Version:
Write Once, Observe Anywhere
111 lines (107 loc) • 2.94 kB
TypeScript
import { EventAttributes, FunnelStatus, OutcomeStatus } from './event-subscriber.js';
/**
* Testing utilities for Metrics
*
* Provides in-memory collection of metrics for testing purposes.
*/
interface MetricsEvent {
event: string;
attributes?: EventAttributes;
service: string;
timestamp: number;
}
interface MetricsFunnelStep {
funnel: string;
status: FunnelStatus;
attributes?: EventAttributes;
service: string;
timestamp: number;
}
interface MetricsOutcome {
operation: string;
status: OutcomeStatus;
attributes?: EventAttributes;
service: string;
timestamp: number;
}
interface MetricsValue {
metric: string;
value: number;
attributes?: EventAttributes;
service: string;
timestamp: number;
}
/**
* In-memory metrics collector for testing
*/
interface MetricsCollector {
/** Get all collected events */
getEvents(): MetricsEvent[];
/** Get all collected funnel steps */
getFunnelSteps(): MetricsFunnelStep[];
/** Get all collected outcomes */
getOutcomes(): MetricsOutcome[];
/** Get all collected values */
getValues(): MetricsValue[];
/** Clear all collected metrics */
clear(): void;
/** Record an event (internal use) */
recordEvent(event: MetricsEvent): void;
/** Record a funnel step (internal use) */
recordFunnelStep(step: MetricsFunnelStep): void;
/** Record an outcome (internal use) */
recordOutcome(outcome: MetricsOutcome): void;
/** Record a value (internal use) */
recordValue(value: MetricsValue): void;
}
/**
* Create an in-memory metrics collector for testing
*
* @example
* ```typescript
* const collector = createMetricsCollector()
*
* const metrics = new Metric('test-service', { collector })
* metrics.trackEvent('order.completed', { orderId: '123' })
*
* const event =collector.getEvents()
* expect(events).toHaveLength(1)
* expect(events[0].event).toBe('order.completed')
* ```
*/
declare function createMetricsCollector(): MetricsCollector;
/**
* Assert that a metric event was tracked
*
* @example
* ```typescript
* assertEventTracked({
* collector,
* eventName: 'order.completed',
* attributes: { orderId: '123' }
* })
* ```
*/
declare function assertEventTracked(options: {
collector: MetricsCollector;
eventName: string;
attributes?: Record<string, unknown>;
}): void;
/**
* Assert that an outcome was tracked
*
* @example
* ```typescript
* assertOutcomeTracked({
* collector,
* operation: 'payment.process',
* status: 'success'
* })
* ```
*/
declare function assertOutcomeTracked(options: {
collector: MetricsCollector;
operation: string;
status: 'success' | 'failure' | 'partial';
}): void;
export { type MetricsCollector, type MetricsEvent, type MetricsFunnelStep, type MetricsOutcome, type MetricsValue, assertEventTracked, assertOutcomeTracked, createMetricsCollector };