summaryrefslogtreecommitdiff
path: root/shared/metrics-8/src/recorder/composite.ts
blob: 6302921477c94c7f0c2a5fc03872e1567cab6925 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import type { MetricsEventRecorder } from '@jet/engine';
import type { LintedMetricsEvent } from '@jet/environment/types/metrics';
import type { Opt } from '@jet/environment/types/optional';

export class CompositeEventRecorder implements MetricsEventRecorder {
    constructor(private readonly eventRecorders: MetricsEventRecorder[]) {}

    record(event: LintedMetricsEvent, topic: Opt<string>): void {
        for (const eventRecorder of this.eventRecorders) {
            eventRecorder.record(event, topic);
        }
    }

    async flush(): Promise<number> {
        const flushed: number[] = await Promise.all(
            this.eventRecorders.map((recorder) => recorder.flush()),
        );
        return Math.max(...flushed);
    }
}