From 2ad8dfe462fc5a7f5ceeddb00056c1f9a1efa3a5 Mon Sep 17 00:00:00 2001 From: "Arend van Beelen jr." Date: Tue, 12 Sep 2023 10:34:28 +0200 Subject: [PATCH] Clear timer on handover --- packages/autometrics/src/temporaryMeter.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/autometrics/src/temporaryMeter.ts b/packages/autometrics/src/temporaryMeter.ts index 63ee0fa..29df099 100644 --- a/packages/autometrics/src/temporaryMeter.ts +++ b/packages/autometrics/src/temporaryMeter.ts @@ -191,6 +191,9 @@ export class TemporaryMeter implements Meter { * their newly created counterparts, as consumers might be holding on to the * instances created by the temporary exporter. * + * Do NOT create new metrics from this meter after the handover! It will only + * yield noop metrics from that moment on. + * * @internal */ handover(meter: Meter) { @@ -235,6 +238,11 @@ export class TemporaryMeter implements Meter { this._createdObservableGauges = []; this._createdObservableUpDownCounters = []; this._registeredBatchObservableCallbacks = []; + + if (this._timer) { + clearTimeout(this._timer); + this._timer = false; + } } metricsRecorded() {} @@ -250,6 +258,11 @@ export class TemporaryMeter implements Meter { * shooting themselves in the foot, we will log a warning if the timer expires * and stop the collecting of metrics when that happens. * + * The timer remains `undefined` as long as no metrics are registered and is + * only initialized on the first metric registration. A value of `false` means + * a timer was created, but has already expired, in which case no new timer + * should be scheduled. + * * @internal */ private _timer: ReturnType | false | undefined;