Skip to content

Commit 58be943

Browse files
committed
Make sure getOpsMetrics$ only replays lastest value (#77673)
1 parent 375b7ff commit 58be943

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/core/server/metrics/metrics_service.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,25 @@ describe('MetricsService', () => {
106106
`"#setup() needs to be run first"`
107107
);
108108
});
109+
110+
it('emits the last value on each getOpsMetrics$ call', async () => {
111+
const firstMetrics = { metric: 'first' };
112+
const secondMetrics = { metric: 'second' };
113+
mockOpsCollector.collect
114+
.mockResolvedValueOnce(firstMetrics)
115+
.mockResolvedValueOnce(secondMetrics);
116+
117+
await metricsService.setup({ http: httpMock });
118+
const { getOpsMetrics$ } = await metricsService.start();
119+
120+
const firstEmission = getOpsMetrics$().pipe(take(1)).toPromise();
121+
jest.advanceTimersByTime(testInterval);
122+
expect(await firstEmission).toEqual({ metric: 'first' });
123+
124+
const secondEmission = getOpsMetrics$().pipe(take(1)).toPromise();
125+
jest.advanceTimersByTime(testInterval);
126+
expect(await secondEmission).toEqual({ metric: 'second' });
127+
});
109128
});
110129

111130
describe('#stop', () => {

src/core/server/metrics/metrics_service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export class MetricsService
3737
private readonly logger: Logger;
3838
private metricsCollector?: OpsMetricsCollector;
3939
private collectInterval?: NodeJS.Timeout;
40-
private metrics$ = new ReplaySubject<OpsMetrics>();
40+
private metrics$ = new ReplaySubject<OpsMetrics>(1);
4141
private service?: InternalMetricsServiceSetup;
4242

4343
constructor(private readonly coreContext: CoreContext) {

0 commit comments

Comments
 (0)