X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Fschedulers%2Fabstract-scheduler.ts;h=0e6088911752df4a91f8db5e0f531e3af3dd0e15;hb=1c5e49e75284100b7b1fc8b4e73c8ba53fe22e89;hp=473544ddfff1d78ba23ed5861f4597c9be779b11;hpb=60650c77c8a2a98e92d869b237ae4900f369a8fc;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/schedulers/abstract-scheduler.ts b/server/lib/schedulers/abstract-scheduler.ts index 473544ddf..0e6088911 100644 --- a/server/lib/schedulers/abstract-scheduler.ts +++ b/server/lib/schedulers/abstract-scheduler.ts @@ -1,16 +1,35 @@ -import { SCHEDULER_INTERVAL } from '../../initializers' +import { logger } from '../../helpers/logger' +import * as Bluebird from 'bluebird' export abstract class AbstractScheduler { + protected abstract schedulerIntervalMs: number + private interval: NodeJS.Timer + private isRunning = false enable () { - this.interval = setInterval(() => this.execute(), SCHEDULER_INTERVAL) + if (!this.schedulerIntervalMs) throw new Error('Interval is not correctly set.') + + this.interval = setInterval(() => this.execute(), this.schedulerIntervalMs) } disable () { clearInterval(this.interval) } - protected abstract execute () + async execute () { + if (this.isRunning === true) return + this.isRunning = true + + try { + await this.internalExecute() + } catch (err) { + logger.error('Cannot execute %s scheduler.', this.constructor.name, { err }) + } finally { + this.isRunning = false + } + } + + protected abstract internalExecute (): Promise | Bluebird }