summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/bin/scheduler.js25
-rw-r--r--server/lib/external-backends/backends/infoblox-backend.js4
-rw-r--r--server/lib/wolhelper.js8
-rw-r--r--server/package-lock.json5
-rw-r--r--server/package.json1
5 files changed, 29 insertions, 14 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
diff --git a/server/lib/external-backends/backends/infoblox-backend.js b/server/lib/external-backends/backends/infoblox-backend.js
index e639270..b81c76f 100644
--- a/server/lib/external-backends/backends/infoblox-backend.js
+++ b/server/lib/external-backends/backends/infoblox-backend.js
@@ -158,8 +158,8 @@ class InfobloxBackend extends ExternalBackends {
for (let index in client.networks) {
const network = client.networks[index]
- if (client.hostname && network.domain) {
- data.name = client.hostname + '.' + network.domain
+ if (network.hostname && network.domain) {
+ data.name = network.hostname + '.' + network.domain
}
let ipv4addr = {}
diff --git a/server/lib/wolhelper.js b/server/lib/wolhelper.js
index e9cb3b0..97c0958 100644
--- a/server/lib/wolhelper.js
+++ b/server/lib/wolhelper.js
@@ -5,13 +5,15 @@ function wakeUp (clients) {
const loop = () => {
setTimeout(() => {
let client = clients[i]
- console.log('Waking up: ' + client.name + ' (' + client.mac + ')')
- wol.wake(client.mac, { address: client.ip.slice(0, client.ip.lastIndexOf('.') + 1) + '255' }, err => { if (err) console.log(err) })
+ if (client.mac !== null && client.ip !== null) {
+ console.log('Waking up: ' + client.name + ' (' + client.mac + ')')
+ wol.wake(client.mac, { address: client.ip.slice(0, client.ip.lastIndexOf('.') + 1) + '255' }, err => { if (err) console.log(err) })
+ }
i++
if (i < clients.length) loop()
}, 10)
}
- loop()
+ if (clients.length !== 0) loop()
}
module.exports = { wakeUp }
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",