diff options
author | Simon Rettberg | 2014-10-09 16:01:11 +0200 |
---|---|---|
committer | Simon Rettberg | 2014-10-09 16:01:11 +0200 |
commit | e1dc0d3c99217504de2ac8467156274786efc0bd (patch) | |
tree | 130d7fed1fff8aaaffe5942cf2a3d6bb1dad03c8 /inc/event.inc.php | |
parent | Minor fixes and improvements (diff) | |
download | slx-admin-e1dc0d3c99217504de2ac8467156274786efc0bd.tar.gz slx-admin-e1dc0d3c99217504de2ac8467156274786efc0bd.tar.xz slx-admin-e1dc0d3c99217504de2ac8467156274786efc0bd.zip |
Big load of changes
- Added callback functionality for taskmanager tasks. You can launch
a task and define a callback function to be run when the task finished.
This requires activating the cronjob
- Added cron functionality: Add cronjob that calls the cron api every 5
minutes to use it. (See cron.inc.php)
- Added eventlog
- Added missing translations
- Merged main-menu-login and main-menu-logout
Diffstat (limited to 'inc/event.inc.php')
-rw-r--r-- | inc/event.inc.php | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/inc/event.inc.php b/inc/event.inc.php new file mode 100644 index 00000000..6689e12f --- /dev/null +++ b/inc/event.inc.php @@ -0,0 +1,96 @@ +<?php + +/** + * Class with static functions that are called when a specific event + * took place, like the server has been booted, or the interface address + * has been changed. + * In contrast to the trigger class, this class should contain functions + * for things that happen semi-automatically in reaction to something else + * (which in turn might have been triggered explicitly). + */ +class Event +{ + + /** + * Called when the system (re)booted. Could be implemented + * by a @reboot entry in crontab (running as the same user php does) + */ + public static function systemBooted() + { + EventLog::info('System boot...'); + $everythingFine = true; + + DefaultData::populate(); + + // Tasks: fire away + $mountId = Trigger::mount(); + $autoIp = Trigger::autoUpdateServerIp(); + $ldadpId = Trigger::ldadp(); + $ipxeId = Trigger::ipxe(); + + // Check status of all tasks + // Mount vm store + if ($mountId === false) { + EventLog::info('No VM store type defined.'); + $everythingFine = false; + } else { + $res = Taskmanager::waitComplete($mountId, 5000); + if (Taskmanager::isFailed($res)) { + EventLog::failure('Mounting VM store failed', $res['data']['messages']); + $everythingFine = false; + } + } + // LDAP AD Proxy + if ($ldadpId === false) { + EventLog::failure('Cannot start LDAP-AD-Proxy: Taskmanager unreachable!'); + $everythingFine = false; + } else { + $res = Taskmanager::waitComplete($ldadpId, 5000); + if (Taskmanager::isFailed($res)) { + EventLog::failure('Starting LDAP-AD-Proxy failed', $res['data']['messages']); + $everythingFine = false; + } + } + // Primary IP address + if (!$autoIp) { + EventLog::failure("The server's IP address could not be determined automatically, and there is no valid address configured."); + $everythingFine = false; + } + // iPXE generation + if ($ipxeId === false) { + EventLog::failure('Cannot generate PXE menu: Taskmanager unreachable!'); + $everythingFine = false; + } else { + $res = Taskmanager::waitComplete($ipxeId, 5000); + if (Taskmanager::isFailed($res)) { + EventLog::failure('Update PXE Menu failed', $res['data']['error']); + $everythingFine = false; + } + } + + // Just so we know booting is done (and we don't expect any more errors from booting up) + if ($everythingFine) { + EventLog::info('Bootup finished without errors.'); + } else { + EventLog::info('There were errors during bootup. Maybe the server is not fully configured yet.'); + } + } + + /** + * Server's primary IP address changed. + */ + public static function serverIpChanged() + { + Trigger::rebuildAdModules(); + } + + /** + * The activated configuration changed. + */ + public static function activeConfigChanged() + { + $task = Trigger::ldadp(); + TaskmanagerCallback::addCallback($task, 'ldadpStartup'); + } + +} |