From c396c8da8825d9025ecb10d8810c9da5a7a9fd9a Mon Sep 17 00:00:00 2001 From: Christian Hofmaier Date: Thu, 18 Apr 2019 02:24:47 +0000 Subject: [scheduler] allow timeouts greater than 25 days --- server/bin/scheduler.js | 15 ++++++--------- server/package-lock.json | 5 +++++ server/package.json | 1 + 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/server/bin/scheduler.js b/server/bin/scheduler.js index f13e329..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') @@ -26,7 +27,7 @@ async function calcNextWake (id) { // 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 } @@ -36,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) } @@ -59,7 +56,7 @@ async function calcNextWake (id) { }, nextWake) */ } - if (nextWake > 0) console.log('Scheduled event ' + event.name + ' in ' + nextWake + 'ms') + if (nextWake > now) console.log('Scheduled event ' + event.name + ' at ' + nextWake) } // Wake all clients of event diff --git a/server/package-lock.json b/server/package-lock.json index e6c98bd..bd8def2 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -3593,6 +3593,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, + "safe-timers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-timers/-/safe-timers-1.1.0.tgz", + "integrity": "sha1-xYroMl2407BnMi8KTvOgytZ6rYM=" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", diff --git a/server/package.json b/server/package.json index d726807..817149a 100644 --- a/server/package.json +++ b/server/package.json @@ -23,6 +23,7 @@ "mysql2": "^1.6.5", "node-wol": "^0.1.1", "nodemailer": "^4.7.0", + "safe-timers": "^1.1.0", "secure-password": "^3.1.0", "sequelize": "^4.43.0", "sequelize-cli": "^4.1.1", -- cgit v1.2.3-55-g7522