Skip to content

Commit 07327b3

Browse files
authored
sdk-core: unref setinterval (#291)
* Unref setinterval * Remove additional ; * Formatting once again
1 parent edb832c commit 07327b3

File tree

3 files changed

+22
-4
lines changed

3 files changed

+22
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
/**
2+
* Due to the event loop, NodeJS application might not exit
3+
* due to some background work that the SDK delegates to setIntervals.
4+
* Thanks to this helper we can cancell interval in NodeJS process.
5+
* @param interval setInterval interval
6+
*/
7+
export function unrefInterval(interval: number | NodeJS.Timeout) {
8+
if (!interval || typeof interval === 'number') {
9+
return;
10+
}
11+
12+
interval.unref();
13+
}

packages/sdk-core/src/modules/database/BacktraceDatabase.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { anySignal, createAbortController } from '../../common/AbortController.js';
22
import { IdGenerator } from '../../common/IdGenerator.js';
3+
import { unrefInterval } from '../../common/intervalHelper.js';
34
import { TimeHelper } from '../../common/TimeHelper.js';
45
import { BacktraceAttachment } from '../../model/attachment/index.js';
56
import { BacktraceDatabaseConfiguration } from '../../model/configuration/BacktraceDatabaseConfiguration.js';
@@ -35,7 +36,7 @@ export class BacktraceDatabase implements BacktraceModule {
3536

3637
private readonly _recordLimits: BacktraceDatabaseRecordCountByType;
3738
private readonly _retryInterval: number;
38-
private _intervalId?: ReturnType<typeof setInterval>;
39+
private _intervalId?: NodeJS.Timeout | number;
3940

4041
private _enabled = false;
4142

@@ -368,6 +369,7 @@ export class BacktraceDatabase implements BacktraceModule {
368369
await this.send();
369370
};
370371
this._intervalId = setInterval(sendDatabaseReports, this._retryInterval);
372+
unrefInterval(this._intervalId);
371373
await this.send();
372374
}
373375

packages/sdk-core/src/modules/metrics/BacktraceMetrics.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { createAbortController } from '../../common/AbortController.js';
22
import { AbortError } from '../../common/AbortError.js';
3+
import { unrefInterval } from '../../common/intervalHelper.js';
34
import { TimeHelper } from '../../common/TimeHelper.js';
45
import { BacktraceMetricsOptions } from '../../model/configuration/BacktraceConfiguration.js';
56
import { AttributeType } from '../../model/data/BacktraceData.js';
6-
import { BacktraceModule } from '../BacktraceModule.js';
77
import { AttributeManager } from '../attribute/AttributeManager.js';
88
import { ReportDataBuilder } from '../attribute/ReportDataBuilder.js';
9+
import { BacktraceModule } from '../BacktraceModule.js';
910
import { BacktraceSessionProvider } from './BacktraceSessionProvider.js';
1011
import { MetricsQueue } from './MetricsQueue.js';
1112
import { SummedEvent } from './model/SummedEvent.js';
@@ -28,7 +29,7 @@ export class BacktraceMetrics implements BacktraceModule {
2829
public readonly metricsHost: string;
2930
private readonly _updateInterval: number;
3031

31-
private _updateIntervalId?: ReturnType<typeof setTimeout>;
32+
private _updateIntervalId?: NodeJS.Timeout | number;
3233
private readonly _abortController: AbortController;
3334

3435
constructor(
@@ -60,7 +61,9 @@ export class BacktraceMetrics implements BacktraceModule {
6061
}
6162
this._updateIntervalId = setInterval(() => {
6263
this.handleAbort(() => this.send(this._abortController.signal));
63-
}, this._updateInterval);
64+
}, this._updateInterval) as NodeJS.Timeout | number;
65+
66+
unrefInterval(this._updateIntervalId);
6467
}
6568

6669
/**

0 commit comments

Comments
 (0)