1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-05-03 01:18:43 +02:00

refactor: move metrics service scheduling (#5129)

This commit is contained in:
Mateusz Kwasniewski 2023-10-23 16:28:19 +02:00 committed by GitHub
parent 8d8a975c6c
commit 8bc04c59f3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 21 additions and 40 deletions

View File

@ -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 {}
}

View File

@ -58,8 +58,6 @@ async function createApp(
}
services.schedulerService.stop();
metricsMonitor.stopMonitoring();
stores.clientInstanceStore.destroy();
services.clientMetricsServiceV2.destroy();
services.addonService.destroy();
await db.destroy();
};

View File

@ -11,8 +11,6 @@ export type LastSeenInput = {
};
export class LastSeenService {
private timers: NodeJS.Timeout[] = [];
private lastSeenToggles: Map<String, LastSeenInput> = new Map();
private logger: Logger;
@ -79,8 +77,4 @@ export class LastSeenService {
async cleanLastSeen() {
await this.lastSeenStore.cleanLastSeen();
}
destroy(): void {
this.timers.forEach(clearInterval);
}
}

View File

@ -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<IUnleashStores, 'clientMetricsStoreV2'>,
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<string[]> {
@ -245,9 +234,4 @@ export default class ClientMetricsServiceV2 {
}
return 'default';
}
destroy(): void {
this.timers.forEach(clearInterval);
this.lastSeenService.destroy();
}
}

View File

@ -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 = (

View File

@ -117,9 +117,7 @@ export default async function init(
await setupDatabase(stores);
},
destroy: async () => {
const { clientInstanceStore } = stores;
return new Promise<void>((resolve, reject) => {
clientInstanceStore.destroy();
testDb.destroy((error) => (error ? reject(error) : resolve()));
});
},

View File

@ -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();
});