mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	refactor: separate scheduling from DI (#3017)
This commit is contained in:
		
							parent
							
								
									1e35c30fde
								
							
						
					
					
						commit
						d9110b6ce5
					
				@ -5,7 +5,7 @@ import { migrateDb } from '../migrator';
 | 
				
			|||||||
import getApp from './app';
 | 
					import getApp from './app';
 | 
				
			||||||
import { createMetricsMonitor } from './metrics';
 | 
					import { createMetricsMonitor } from './metrics';
 | 
				
			||||||
import { createStores } from './db';
 | 
					import { createStores } from './db';
 | 
				
			||||||
import { createServices } from './services';
 | 
					import { createServices, scheduleServices } from './services';
 | 
				
			||||||
import { createConfig } from './create-config';
 | 
					import { createConfig } from './create-config';
 | 
				
			||||||
import { addEventHook } from './event-hook';
 | 
					import { addEventHook } from './event-hook';
 | 
				
			||||||
import registerGracefulShutdown from './util/graceful-shutdown';
 | 
					import registerGracefulShutdown from './util/graceful-shutdown';
 | 
				
			||||||
@ -43,6 +43,7 @@ async function createApp(
 | 
				
			|||||||
    const db = createDb(config);
 | 
					    const db = createDb(config);
 | 
				
			||||||
    const stores = createStores(config, db);
 | 
					    const stores = createStores(config, db);
 | 
				
			||||||
    const services = createServices(stores, config);
 | 
					    const services = createServices(stores, config);
 | 
				
			||||||
 | 
					    scheduleServices(services, config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const metricsMonitor = createMetricsMonitor();
 | 
					    const metricsMonitor = createMetricsMonitor();
 | 
				
			||||||
    const unleashSession = sessionDb(config, db);
 | 
					    const unleashSession = sessionDb(config, db);
 | 
				
			||||||
 | 
				
			|||||||
@ -40,9 +40,44 @@ import { InstanceStatsService } from './instance-stats-service';
 | 
				
			|||||||
import { FavoritesService } from './favorites-service';
 | 
					import { FavoritesService } from './favorites-service';
 | 
				
			||||||
import MaintenanceService from './maintenance-service';
 | 
					import MaintenanceService from './maintenance-service';
 | 
				
			||||||
import ExportImportService from './export-import-service';
 | 
					import ExportImportService from './export-import-service';
 | 
				
			||||||
import SchedulerService from './scheduler-service';
 | 
					 | 
				
			||||||
import { minutesToMilliseconds } from 'date-fns';
 | 
					import { minutesToMilliseconds } from 'date-fns';
 | 
				
			||||||
import { AccountService } from './account-service';
 | 
					import { AccountService } from './account-service';
 | 
				
			||||||
 | 
					import { SchedulerService } from './scheduler-service';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const scheduleServices = (
 | 
				
			||||||
 | 
					    services: IUnleashServices,
 | 
				
			||||||
 | 
					    config: IUnleashConfig,
 | 
				
			||||||
 | 
					): void => {
 | 
				
			||||||
 | 
					    const {
 | 
				
			||||||
 | 
					        schedulerService,
 | 
				
			||||||
 | 
					        apiTokenService,
 | 
				
			||||||
 | 
					        instanceStatsService,
 | 
				
			||||||
 | 
					        projectService,
 | 
				
			||||||
 | 
					    } = services;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    schedulerService.schedule(
 | 
				
			||||||
 | 
					        apiTokenService.fetchActiveTokens.bind(apiTokenService),
 | 
				
			||||||
 | 
					        minutesToMilliseconds(1),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    schedulerService.schedule(
 | 
				
			||||||
 | 
					        apiTokenService.updateLastSeen.bind(apiTokenService),
 | 
				
			||||||
 | 
					        minutesToMilliseconds(3),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    schedulerService.schedule(
 | 
				
			||||||
 | 
					        instanceStatsService.refreshStatsSnapshot.bind(instanceStatsService),
 | 
				
			||||||
 | 
					        minutesToMilliseconds(5),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (config.flagResolver.isEnabled('projectStatusApi')) {
 | 
				
			||||||
 | 
					        const ONE_DAY = 1440;
 | 
				
			||||||
 | 
					        schedulerService.schedule(
 | 
				
			||||||
 | 
					            projectService.statusJob.bind(projectService),
 | 
				
			||||||
 | 
					            minutesToMilliseconds(ONE_DAY),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export const createServices = (
 | 
					export const createServices = (
 | 
				
			||||||
    stores: IUnleashStores,
 | 
					    stores: IUnleashStores,
 | 
				
			||||||
@ -146,28 +181,6 @@ export const createServices = (
 | 
				
			|||||||
    );
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const schedulerService = new SchedulerService(config.getLogger);
 | 
					    const schedulerService = new SchedulerService(config.getLogger);
 | 
				
			||||||
    schedulerService.schedule(
 | 
					 | 
				
			||||||
        apiTokenService.fetchActiveTokens.bind(apiTokenService),
 | 
					 | 
				
			||||||
        minutesToMilliseconds(1),
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    schedulerService.schedule(
 | 
					 | 
				
			||||||
        apiTokenService.updateLastSeen.bind(apiTokenService),
 | 
					 | 
				
			||||||
        minutesToMilliseconds(3),
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    schedulerService.schedule(
 | 
					 | 
				
			||||||
        instanceStatsService.refreshStatsSnapshot.bind(instanceStatsService),
 | 
					 | 
				
			||||||
        minutesToMilliseconds(5),
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (config.flagResolver.isEnabled('projectStatusApi')) {
 | 
					 | 
				
			||||||
        const ONE_DAY = 1440;
 | 
					 | 
				
			||||||
        schedulerService.schedule(
 | 
					 | 
				
			||||||
            projectService.statusJob.bind(projectService),
 | 
					 | 
				
			||||||
            minutesToMilliseconds(ONE_DAY),
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
        accessService,
 | 
					        accessService,
 | 
				
			||||||
@ -212,6 +225,7 @@ export const createServices = (
 | 
				
			|||||||
        favoritesService,
 | 
					        favoritesService,
 | 
				
			||||||
        maintenanceService,
 | 
					        maintenanceService,
 | 
				
			||||||
        exportImportService,
 | 
					        exportImportService,
 | 
				
			||||||
 | 
					        schedulerService,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -255,4 +269,5 @@ export {
 | 
				
			|||||||
    InstanceStatsService,
 | 
					    InstanceStatsService,
 | 
				
			||||||
    FavoritesService,
 | 
					    FavoritesService,
 | 
				
			||||||
    ExportImportService,
 | 
					    ExportImportService,
 | 
				
			||||||
 | 
					    SchedulerService,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
import SchedulerService from './scheduler-service';
 | 
					import { SchedulerService } from './scheduler-service';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function ms(timeMs) {
 | 
					function ms(timeMs) {
 | 
				
			||||||
    return new Promise((resolve) => setTimeout(resolve, timeMs));
 | 
					    return new Promise((resolve) => setTimeout(resolve, timeMs));
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
import { Logger, LogProvider } from '../logger';
 | 
					import { Logger, LogProvider } from '../logger';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class SchedulerService {
 | 
					export class SchedulerService {
 | 
				
			||||||
    private intervalIds: NodeJS.Timer[] = [];
 | 
					    private intervalIds: NodeJS.Timer[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private logger: Logger;
 | 
					    private logger: Logger;
 | 
				
			||||||
 | 
				
			|||||||
@ -35,10 +35,11 @@ import PatService from '../services/pat-service';
 | 
				
			|||||||
import { PublicSignupTokenService } from '../services/public-signup-token-service';
 | 
					import { PublicSignupTokenService } from '../services/public-signup-token-service';
 | 
				
			||||||
import { LastSeenService } from '../services/client-metrics/last-seen-service';
 | 
					import { LastSeenService } from '../services/client-metrics/last-seen-service';
 | 
				
			||||||
import { InstanceStatsService } from '../services/instance-stats-service';
 | 
					import { InstanceStatsService } from '../services/instance-stats-service';
 | 
				
			||||||
import { FavoritesService } from '../services';
 | 
					import { FavoritesService } from '../services/favorites-service';
 | 
				
			||||||
import MaintenanceService from '../services/maintenance-service';
 | 
					import MaintenanceService from '../services/maintenance-service';
 | 
				
			||||||
import ExportImportService from 'lib/services/export-import-service';
 | 
					import ExportImportService from 'lib/services/export-import-service';
 | 
				
			||||||
import { AccountService } from '../services/account-service';
 | 
					import { AccountService } from '../services/account-service';
 | 
				
			||||||
 | 
					import { SchedulerService } from '../services/scheduler-service';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export interface IUnleashServices {
 | 
					export interface IUnleashServices {
 | 
				
			||||||
    accessService: AccessService;
 | 
					    accessService: AccessService;
 | 
				
			||||||
@ -83,4 +84,5 @@ export interface IUnleashServices {
 | 
				
			|||||||
    favoritesService: FavoritesService;
 | 
					    favoritesService: FavoritesService;
 | 
				
			||||||
    maintenanceService: MaintenanceService;
 | 
					    maintenanceService: MaintenanceService;
 | 
				
			||||||
    exportImportService: ExportImportService;
 | 
					    exportImportService: ExportImportService;
 | 
				
			||||||
 | 
					    schedulerService: SchedulerService;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user