summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules-available/remoteaccess/hooks/cron.inc.php3
-rw-r--r--modules-available/remoteaccess/inc/remoteaccess.inc.php17
2 files changed, 12 insertions, 8 deletions
diff --git a/modules-available/remoteaccess/hooks/cron.inc.php b/modules-available/remoteaccess/hooks/cron.inc.php
index 3e0e130b..2ee6e375 100644
--- a/modules-available/remoteaccess/hooks/cron.inc.php
+++ b/modules-available/remoteaccess/hooks/cron.inc.php
@@ -1,6 +1,3 @@
<?php
-if (!Module::isAvailable('rebootcontrol'))
- return;
-
RemoteAccess::ensureMachinesRunning();
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)