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:
parent
8d8a975c6c
commit
8bc04c59f3
@ -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 {}
|
||||
}
|
||||
|
@ -58,8 +58,6 @@ async function createApp(
|
||||
}
|
||||
services.schedulerService.stop();
|
||||
metricsMonitor.stopMonitoring();
|
||||
stores.clientInstanceStore.destroy();
|
||||
services.clientMetricsServiceV2.destroy();
|
||||
services.addonService.destroy();
|
||||
await db.destroy();
|
||||
};
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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 = (
|
||||
|
@ -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()));
|
||||
});
|
||||
},
|
||||
|
@ -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();
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user