summaryrefslogtreecommitdiffstats
path: root/modules-available/rebootcontrol
diff options
context:
space:
mode:
authorSimon Rettberg2021-03-17 15:39:55 +0100
committerSimon Rettberg2021-03-17 15:39:55 +0100
commitdc516c24685518b41bcce0751caf286dc65e471f (patch)
treec4db8569fe044752f9cf4ba58c8c5ad986a27b55 /modules-available/rebootcontrol
parentAdd missing changes (diff)
downloadslx-admin-dc516c24685518b41bcce0751caf286dc65e471f.tar.gz
slx-admin-dc516c24685518b41bcce0751caf286dc65e471f.tar.xz
slx-admin-dc516c24685518b41bcce0751caf286dc65e471f.zip
[locations/rebootcontrol] Change ENUM constants; display next event
Diffstat (limited to 'modules-available/rebootcontrol')
-rw-r--r--modules-available/rebootcontrol/hooks/cron.inc.php8
-rw-r--r--modules-available/rebootcontrol/inc/scheduler.inc.php16
-rw-r--r--modules-available/rebootcontrol/install.inc.php15
3 files changed, 26 insertions, 13 deletions
diff --git a/modules-available/rebootcontrol/hooks/cron.inc.php b/modules-available/rebootcontrol/hooks/cron.inc.php
index 56446c49..c1136c98 100644
--- a/modules-available/rebootcontrol/hooks/cron.inc.php
+++ b/modules-available/rebootcontrol/hooks/cron.inc.php
@@ -27,12 +27,14 @@ while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
$machines = Database::queryAll("SELECT machineuuid, clientip, macaddr, locationid FROM machine
WHERE locationid = :locid", ['locid' => $row['locationid']]);
- if ($row['action'] === 'sd') {
+ if ($row['action'] === Scheduler::SHUTDOWN) {
RebootControl::execute($machines, RebootControl::SHUTDOWN, 0);
- } elseif ($row['action'] === 'wol') {
+ } elseif ($row['action'] === Scheduler::WOL) {
RebootControl::wakeMachines($machines);
- } elseif ($row['action'] === 'rb') {
+ } elseif ($row['action'] === Scheduler::REBOOT) {
RebootControl::execute($machines, RebootControl::REBOOT, 0);
+ } else {
+ EventLog::warning("Invalid action '{$row['action']}' in schedule for location " . $row['locationid']);
}
}
diff --git a/modules-available/rebootcontrol/inc/scheduler.inc.php b/modules-available/rebootcontrol/inc/scheduler.inc.php
index 613fbbee..45aedcc1 100644
--- a/modules-available/rebootcontrol/inc/scheduler.inc.php
+++ b/modules-available/rebootcontrol/inc/scheduler.inc.php
@@ -3,6 +3,10 @@
class Scheduler
{
+ const SHUTDOWN = 'SHUTDOWN';
+ const REBOOT = 'REBOOT';
+ const WOL = 'WOL';
+
public static function updateSchedule($locationid, $options, $openingTimes)
{
if (empty($openingTimes)) {
@@ -57,11 +61,11 @@ class Scheduler
foreach ($openingTimes as $row) {
foreach ($row['days'] as $day) {
if ($options['wol']) {
- $events[] = ['action' => 'wol',
+ $events[] = ['action' => self::WOL,
'time' => self::calculateTimestamp($now, $day, $row['openingtime'])];
}
if ($options['sd']) {
- $events[] = ['action' => 'sd',
+ $events[] = ['action' => self::SHUTDOWN,
'time' => self::calculateTimestamp($now, $day, $row['closingtime'])];
}
}
@@ -75,9 +79,9 @@ class Scheduler
$prev = PHP_INT_MAX;
for ($i = count($events) - 1; $i >= 0; --$i) {
$event =& $events[$i];
- if ($event['action'] === 'wol') {
+ if ($event['action'] === self::WOL) {
$event['time'] -= $wolOffset;
- } elseif ($event['action'] === 'sd') {
+ } elseif ($event['action'] === self::SHUTDOWN) {
$event['time'] += $sdOffset;
} else {
error_log('BUG Unhandled event type ' . $event['action']);
@@ -102,9 +106,9 @@ class Scheduler
// If difference to next event is < 5 min, ignore.
continue;
}
- if ($diff < 900 && $event['action'] === 'sd' && $events[$i + 1]['action'] === 'wol') {
+ if ($diff < 900 && $event['action'] === self::SHUTDOWN && $events[$i + 1]['action'] === self::WOL) {
// If difference to next WOL is < 15 min and this is a shutdown, reboot instead.
- $res['action'] = 'rb';
+ $res['action'] = self::REBOOT;
$res['time'] = $event['time'];
} else {
// Use first event.
diff --git a/modules-available/rebootcontrol/install.inc.php b/modules-available/rebootcontrol/install.inc.php
index f400129e..d45a2443 100644
--- a/modules-available/rebootcontrol/install.inc.php
+++ b/modules-available/rebootcontrol/install.inc.php
@@ -39,7 +39,7 @@ $output[] = tableCreate('reboot_subnet_x_subnet', "
$output[] = tableCreate('reboot_scheduler', "
`locationid` INT(11) NOT NULL,
- `action` ENUM('wol', 'sd', 'rb'),
+ `action` ENUM('WOL', 'SHUTDOWN', 'REBOOT'),
`nextexecution` INT(10) UNSIGNED NOT NULL DEFAULT 0,
`options` BLOB,
PRIMARY KEY (`locationid`)");
@@ -60,9 +60,16 @@ if (tableColumnKeyType('reboot_scheduler', 'action') === 'PRI') {
$res = Database::exec("ALTER TABLE `reboot_scheduler` DROP PRIMARY KEY, ADD PRIMARY KEY (`locationid`)");
$output[] = $res !== false ? UPDATE_DONE : UPDATE_FAILED;
}
-if (strpos(tableColumnType('reboot_scheduler', 'action'), 'rb') === false) {
- $res = Database::exec("ALTER TABLE `reboot_scheduler` MODIFY COLUMN `action` ENUM('wol', 'sd', 'rb')");
- $output[] = $res !== false ? UPDATE_DONE : UPDATE_FAILED;
+if (strpos(tableColumnType('reboot_scheduler', 'action'), 'REBOOT') === false) {
+ // Fiddle with column to rename ENUM values
+ $res = Database::exec("ALTER TABLE `reboot_scheduler` MODIFY COLUMN `action` ENUM('sd', 'rb', 'WOL', 'SHUTDOWN', 'REBOOT')");
+ handleUpdateResult($res);
+ $res = Database::exec("UPDATE reboot_scheduler SET action =
+ CASE WHEN action = 'sd' THEN 'SHUTDOWN' WHEN action = 'rb' THEN 'REBOOT' ELSE 'WOL' END");
+ handleUpdateResult($res);
+ $res = Database::exec("ALTER TABLE `reboot_scheduler` MODIFY COLUMN `action` ENUM('WOL', 'SHUTDOWN', 'REBOOT')");
+ handleUpdateResult($res);
+ $output[] = UPDATE_DONE;
}