import { logger , loggerTagsFactory } from '@server/helpers/logger' ; import { SCHEDULER_INTERVALS_MS } from '@server/initializers/constants' ; import { uploadx } from '../uploadx' ; import { AbstractScheduler } from './abstract-scheduler' ; const lTags = loggerTagsFactory ( 'scheduler' , 'resumable-upload' , 'cleaner' ) ; export class RemoveDanglingResumableUploadsScheduler extends AbstractScheduler { private static instance : AbstractScheduler ; private lastExecutionTimeMs : number ; protected schedulerIntervalMs = SCHEDULER_INTERVALS_MS . REMOVE_DANGLING_RESUMABLE_UPLOADS ; private constructor ( ) { super ( ) ; this . lastExecutionTimeMs = new Date ( ) . getTime ( ) ; } protected async internalExecute ( ) { logger . debug ( 'Removing dangling resumable uploads' , lTags ( ) ) ; const now = new Date ( ) . getTime ( ) ; try { await uploadx . storage . purge ( now - this . lastExecutionTimeMs ) ; } catch ( error ) { logger . error ( 'Failed to handle file during resumable video upload folder cleanup' , { error , ... lTags ( ) } ) ; } finally { this . lastExecutionTimeMs = now ; } } static get Instance ( ) { return this . instance || ( this . instance = new this ( ) ) ; } }