summaryrefslogtreecommitdiffstats
path: root/modules-available/remoteaccess/inc/remoteaccess.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2020-06-29 14:04:45 +0200
committerSimon Rettberg2020-07-30 13:27:19 +0200
commit6635ff74f8266aa72f4243258561a5ae8d3915ac (patch)
tree062ae0d9c2a28943fb7a0e7f87a64f78281c6ab3 /modules-available/remoteaccess/inc/remoteaccess.inc.php
parent[statistics_reporting] Fix numer of unique users and server CPU model (diff)
downloadslx-admin-6635ff74f8266aa72f4243258561a5ae8d3915ac.tar.gz
slx-admin-6635ff74f8266aa72f4243258561a5ae8d3915ac.tar.xz
slx-admin-6635ff74f8266aa72f4243258561a5ae8d3915ac.zip
[remoteaccess] Fix/Improve WOL behavior
Enable rebootcontrol module in ensureMachinesRunning(), so it works from the call in api.inc.php. Consider machines that we sent a WOL packet to during the last 90 seconds as online when counting number of idle machines, so slow booting machines won't cause us to wake too many machines.
Diffstat (limited to 'modules-available/remoteaccess/inc/remoteaccess.inc.php')
-rw-r--r--modules-available/remoteaccess/inc/remoteaccess.inc.php17
1 files changed, 12 insertions, 5 deletions
diff --git a/modules-available/remoteaccess/inc/remoteaccess.inc.php b/modules-available/remoteaccess/inc/remoteaccess.inc.php
index fc719b37..37d33d45 100644
--- a/modules-available/remoteaccess/inc/remoteaccess.inc.php
+++ b/modules-available/remoteaccess/inc/remoteaccess.inc.php
@@ -19,11 +19,18 @@ class RemoteAccess
public static function ensureMachinesRunning()
{
- $res = Database::simpleQuery("SELECT rg.groupid, rg.wolcount, GROUP_CONCAT(rxl.locationid) AS locs FROM remoteaccess_group rg
- INNER JOIN remoteaccess_x_location rxl USING (groupid)
- WHERE rg.active = 1
- GROUP BY groupid");
+ if (!Module::isAvailable('rebootcontrol')) {
+ error_log("Not waking remote access machines: rebootcontrol missing");
+ return;
+ }
+
+ $res = Database::simpleQuery("SELECT rg.groupid, rg.groupname, rg.wolcount, GROUP_CONCAT(rxl.locationid) AS locs FROM remoteaccess_group rg
+ INNER JOIN remoteaccess_x_location rxl USING (groupid)
+ WHERE rg.active = 1
+ GROUP BY groupid");
+ // Consider machines we tried to wake in the past 90 seconds as online
+ $wolDeadline = time() - 90;
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
if ($row['wolcount'] <= 0)
continue;
@@ -33,7 +40,7 @@ class RemoteAccess
continue;
$active = Database::queryFirst("SELECT Count(*) AS cnt FROM machine m
INNER JOIN remoteaccess_machine rm USING (machineuuid)
- WHERE m.locationid IN ($locs) AND m.state = 'IDLE'");
+ WHERE m.locationid IN ($locs) AND (m.state = 'IDLE' OR rm.woltime > $wolDeadline)");
$active = (isset($active['cnt']) ? $active['cnt'] : 0);
$wantNum = $row['wolcount'] - $active;
if ($wantNum <= 0)