]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/schedulers/abstract-scheduler.ts
Merge branch 'release/3.2.0' into develop
[github/Chocobozzz/PeerTube.git] / server / lib / schedulers / abstract-scheduler.ts
index 473544ddfff1d78ba23ed5861f4597c9be779b11..0e6088911752df4a91f8db5e0f531e3af3dd0e15 100644 (file)
@@ -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<any> | Bluebird<any>
 }