Implement cron-like scheduling for presets

This commit is contained in:
Zaid Abdulla committed 2016-07-20 07:03:24 +03:00
1 parent 1537603945
commit d9f8b1c695
3 files changed
+48 -2

No files matched your search

+19 -1
View File
@@ -18,6 +18,8 @@
vm = require 'vm'
crypto = require 'crypto'
later = require 'later'
db = require './db'
REFRESH = 3000
@@ -101,6 +103,22 @@ refresh = (callback) ->
presets = []
for preset in res
schedule = null
if preset.schedule
parts = preset.schedule.trim().split(/\s+/)
schedule = {
md5: crypto.createHash('md5').update(preset.schedule).digest('hex')
}
try
schedule.duration = +(parts.shift()) * 1000
parts.unshift('0') if parts.length == 5
# TODO later.js doesn't throw erorr if expression is invalid!
schedule.schedule = later.schedule(later.parse.cron(parts.join(' '), true))
catch err
# TODO show a warning
schedule.schedule = false
precondition = JSON.parse(preset.precondition)
_provisions = preset.provisions or []
@@ -121,7 +139,7 @@ refresh = (callback) ->
else
throw new Error("Unknown configuration type #{c.type}")
presets.push({name: preset._id, precondition: precondition, provisions: _provisions})
presets.push({name: preset._id, schedule: schedule, precondition: precondition, provisions: _provisions})
if -- counter == 0
computeHash()