Make sure getOpsMetrics$ only replays lastest value (#77673) (#77688)

This commit is contained in:
Josh Dover 2020-09-17 01:19:14 -06:00 committed by GitHub
parent 2b4eeee680
commit 79b19894b5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View file

@ -106,6 +106,25 @@ describe('MetricsService', () => {
`"#setup() needs to be run first"`
);
});
it('emits the last value on each getOpsMetrics$ call', async () => {
const firstMetrics = { metric: 'first' };
const secondMetrics = { metric: 'second' };
mockOpsCollector.collect
.mockResolvedValueOnce(firstMetrics)
.mockResolvedValueOnce(secondMetrics);
await metricsService.setup({ http: httpMock });
const { getOpsMetrics$ } = await metricsService.start();
const firstEmission = getOpsMetrics$().pipe(take(1)).toPromise();
jest.advanceTimersByTime(testInterval);
expect(await firstEmission).toEqual({ metric: 'first' });
const secondEmission = getOpsMetrics$().pipe(take(1)).toPromise();
jest.advanceTimersByTime(testInterval);
expect(await secondEmission).toEqual({ metric: 'second' });
});
});
describe('#stop', () => {

View file

@ -37,7 +37,7 @@ export class MetricsService
private readonly logger: Logger;
private metricsCollector?: OpsMetricsCollector;
private collectInterval?: NodeJS.Timeout;
private metrics$ = new ReplaySubject<OpsMetrics>();
private metrics$ = new ReplaySubject<OpsMetrics>(1);
private service?: InternalMetricsServiceSetup;
constructor(private readonly coreContext: CoreContext) {