summaryrefslogtreecommitdiffstats
path: root/server/bin/scheduler.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/bin/scheduler.js')
-rw-r--r--server/bin/scheduler.js25
1 files changed, 16 insertions, 9 deletions
diff --git a/server/bin/scheduler.js b/server/bin/scheduler.js
index ddb96d8..dab37a4 100644
--- a/server/bin/scheduler.js
+++ b/server/bin/scheduler.js
@@ -4,6 +4,7 @@ global.__appdir = path.join(__dirname, '..')
const db = require(path.join(__appdir, 'lib', 'sequelize'))
const groupHelper = require(path.join(__appdir, 'lib', 'grouphelper'))
const wolHelper = require(path.join(__appdir, 'lib', 'wolhelper'))
+const setTimeoutAt = require('safe-timers').setTimeoutAt
const zmq = require('zeromq')
const socket = zmq.socket('pull')
socket.bindSync('ipc:///tmp/bas_zeromq_events')
@@ -11,13 +12,22 @@ socket.on('message', calcNextWake)
const runningTimeouts = {}
+scheduleAllEvents()
+
+async function scheduleAllEvents () {
+ var events = await db.event.findAll()
+ events.forEach(event => {
+ if (event.wakeonlan) calcNextWake(event.id)
+ })
+}
+
async function calcNextWake (id) {
id = id.toString()
var event = await db.event.findOne({ where: { id: id }, include: ['groups', 'clients'] })
- // Event got deleted
+ // Event got deleted or was updated to be not wakeonlan anymore
if (event === null || !event.wakeonlan) {
- clearTimeout(runningTimeouts[id])
+ runningTimeouts[id].clear()
delete runningTimeouts[id]
return
}
@@ -27,13 +37,9 @@ async function calcNextWake (id) {
var now = new Date()
if (!times.repetitive) {
- var start = new Date(times.start * 1000)
- if (start > now) {
- // 1. Calculate next wake
- nextWake = start - now
-
- // 2. Set timeout
- runningTimeouts[id] = setTimeout(function () {
+ nextWake = new Date(times.start * 1000)
+ if (nextWake > now) {
+ runningTimeouts[id] = setTimeoutAt(function () {
wakeUpClients(id)
}, nextWake)
}
@@ -50,6 +56,7 @@ async function calcNextWake (id) {
}, nextWake)
*/
}
+ if (nextWake > now) console.log('Scheduled event ' + event.name + ' at ' + nextWake)
}
// Wake all clients of event