Skip to content

[Tech Debt] Extract shared job routine helper to eliminate boilerplate duplication #268

@sonikro

Description

@sonikro

Problem

Five job routines in packages/entrypoints/src/jobs/ share identical boilerplate:

  • ServerCleanupRoutine.ts
  • PendingServerCleanupRoutine.ts
  • TerminateLongRunningServerRoutine.ts
  • ConsumeCreditsRoutine.ts
  • TerminateServersWithoutCreditRoutine.ts

Each one repeats this exact ~15 line pattern:

schedule.scheduleJob('<cron>', async () => {
    try {
        logger.emit({ severityText: 'INFO', body: 'Running <Routine Name>...' });
        await dependencies.<useCase>.execute();
        logger.emit({ severityText: 'INFO', body: '<Routine Name> completed successfully.' });
    } catch (error) {
        logger.emit({ severityText: 'ERROR', body: 'Error during <Routine Name>', attributes: { error: JSON.stringify(error, Object.getOwnPropertyNames(error)) } });
        await dependencies.eventLogger.log({
            eventMessage: `Error during <Routine Name>: ${error instanceof Error ? error.message : String(error)}`,
            actorId: 'system',
        });
    }
});

Only the cron expression, routine name, and the use case call differ.

Fix

  1. Extract a helper function (e.g., createScheduledRoutine) in packages/entrypoints/src/jobs/:
export function createScheduledRoutine(
    cronExpression: string,
    routineName: string,
    fn: () => Promise<void>,
    eventLogger: EventLogger
): void {
    schedule.scheduleJob(cronExpression, async () => {
        try {
            logger.emit({ severityText: 'INFO', body: `Running ${routineName}...` });
            await fn();
            logger.emit({ severityText: 'INFO', body: `${routineName} completed successfully.` });
        } catch (error) {
            logger.emit({ severityText: 'ERROR', body: `Error during ${routineName}`, attributes: { error: JSON.stringify(error, Object.getOwnPropertyNames(error)) } });
            await eventLogger.log({
                eventMessage: `Error during ${routineName}: ${error instanceof Error ? error.message : String(error)}`,
                actorId: 'system',
            });
        }
    });
}
  1. Refactor all 5 routines to use createScheduledRoutine.

Metadata

Metadata

Assignees

No one assigned

    Labels

    tech-debtTechnical debt items

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions