diff --git a/src/lib/db/client-instance-store.ts b/src/lib/db/client-instance-store.ts index 515544d9b6..bafe0ab053 100644 --- a/src/lib/db/client-instance-store.ts +++ b/src/lib/db/client-instance-store.ts @@ -51,8 +51,6 @@ export default class ClientInstanceStore implements IClientInstanceStore { private metricTimer: Function; - private timer: Timeout; - constructor(db: Db, eventBus: EventEmitter, getLogger: LogProvider) { this.db = db; this.eventBus = eventBus; @@ -197,7 +195,5 @@ export default class ClientInstanceStore implements IClientInstanceStore { return this.db(TABLE).where('app_name', appName).del(); } - destroy(): void { - clearInterval(this.timer); - } + destroy(): void {} } diff --git a/src/lib/server-impl.ts b/src/lib/server-impl.ts index bc90403645..ae7d3da7d3 100644 --- a/src/lib/server-impl.ts +++ b/src/lib/server-impl.ts @@ -58,8 +58,6 @@ async function createApp( } services.schedulerService.stop(); metricsMonitor.stopMonitoring(); - stores.clientInstanceStore.destroy(); - services.clientMetricsServiceV2.destroy(); services.addonService.destroy(); await db.destroy(); }; diff --git a/src/lib/services/client-metrics/last-seen/last-seen-service.ts b/src/lib/services/client-metrics/last-seen/last-seen-service.ts index 555b5eb930..4bb6d5a282 100644 --- a/src/lib/services/client-metrics/last-seen/last-seen-service.ts +++ b/src/lib/services/client-metrics/last-seen/last-seen-service.ts @@ -11,8 +11,6 @@ export type LastSeenInput = { }; export class LastSeenService { - private timers: NodeJS.Timeout[] = []; - private lastSeenToggles: Map = new Map(); private logger: Logger; @@ -79,8 +77,4 @@ export class LastSeenService { async cleanLastSeen() { await this.lastSeenStore.cleanLastSeen(); } - - destroy(): void { - this.timers.forEach(clearInterval); - } } diff --git a/src/lib/services/client-metrics/metrics-service-v2.ts b/src/lib/services/client-metrics/metrics-service-v2.ts index db950e342f..4a83f659a0 100644 --- a/src/lib/services/client-metrics/metrics-service-v2.ts +++ b/src/lib/services/client-metrics/metrics-service-v2.ts @@ -25,8 +25,6 @@ import { nameSchema } from '../../schema/feature-schema'; export default class ClientMetricsServiceV2 { private config: IUnleashConfig; - private timers: NodeJS.Timeout[] = []; - private unsavedMetrics: IClientMetricsEnv[] = []; private clientMetricsStoreV2: IClientMetricsStoreV2; @@ -41,7 +39,6 @@ export default class ClientMetricsServiceV2 { { clientMetricsStoreV2 }: Pick, config: IUnleashConfig, lastSeenService: LastSeenService, - bulkInterval = secondsToMilliseconds(5), ) { this.clientMetricsStoreV2 = clientMetricsStoreV2; this.lastSeenService = lastSeenService; @@ -50,18 +47,10 @@ export default class ClientMetricsServiceV2 { '/services/client-metrics/client-metrics-service-v2.ts', ); this.flagResolver = config.flagResolver; + } - this.timers.push( - setInterval(() => { - this.bulkAdd().catch(console.error); - }, bulkInterval).unref(), - ); - - this.timers.push( - setInterval(() => { - this.clientMetricsStoreV2.clearMetrics(48).catch(console.error); - }, hoursToMilliseconds(12)).unref(), - ); + async clearMetrics(hoursAgo: number) { + return this.clientMetricsStoreV2.clearMetrics(hoursAgo); } async filterValidToggleNames(toggleNames: string[]): Promise { @@ -245,9 +234,4 @@ export default class ClientMetricsServiceV2 { } return 'default'; } - - destroy(): void { - this.timers.forEach(clearInterval); - this.lastSeenService.destroy(); - } } diff --git a/src/lib/services/index.ts b/src/lib/services/index.ts index e5638cf7a9..d1823cdde3 100644 --- a/src/lib/services/index.ts +++ b/src/lib/services/index.ts @@ -119,6 +119,7 @@ export const scheduleServices = async ( versionService, lastSeenService, proxyService, + clientMetricsServiceV2, } = services; if (await maintenanceService.isMaintenanceMode()) { @@ -224,6 +225,22 @@ export const scheduleServices = async ( minutesToMilliseconds(2), 'fetchFrontendSettings', ); + + schedulerService.schedule( + () => { + clientMetricsServiceV2.bulkAdd().catch(console.error); + }, + secondsToMilliseconds(5), + 'bulkAddMetrics', + ); + + schedulerService.schedule( + () => { + clientMetricsServiceV2.clearMetrics(48).catch(console.error); + }, + hoursToMilliseconds(12), + 'clearMetrics', + ); }; export const createServices = ( diff --git a/src/test/e2e/helpers/database-init.ts b/src/test/e2e/helpers/database-init.ts index a5b7f93121..2a51f9dba2 100644 --- a/src/test/e2e/helpers/database-init.ts +++ b/src/test/e2e/helpers/database-init.ts @@ -117,9 +117,7 @@ export default async function init( await setupDatabase(stores); }, destroy: async () => { - const { clientInstanceStore } = stores; return new Promise((resolve, reject) => { - clientInstanceStore.destroy(); testDb.destroy((error) => (error ? reject(error) : resolve())); }); }, diff --git a/src/test/e2e/services/last-seen-service.e2e.test.ts b/src/test/e2e/services/last-seen-service.e2e.test.ts index e1745a8b1d..49ad347aac 100644 --- a/src/test/e2e/services/last-seen-service.e2e.test.ts +++ b/src/test/e2e/services/last-seen-service.e2e.test.ts @@ -56,8 +56,6 @@ test('Should update last seen for known toggles', async () => { const t1 = await stores.featureToggleStore.get('ta1'); expect(t1.lastSeenAt.getTime()).toBeGreaterThan(time); - - service.destroy(); }); test('Should not update last seen toggles with 0 metrics', async () => { @@ -102,8 +100,6 @@ test('Should not update last seen toggles with 0 metrics', async () => { expect(t2.lastSeenAt).toBeNull(); expect(t1.lastSeenAt.getTime()).toBeGreaterThanOrEqual(time); - - service.destroy(); }); test('Should not update anything for 0 toggles', async () => { @@ -144,6 +140,4 @@ test('Should not update anything for 0 toggles', async () => { const count = await service.store(); expect(count).toBe(0); - - service.destroy(); });