public function run() { Logger::debug('main', 'ServerStatusChangedTask::run'); $needs_cleanup = false; $data = get_from_cache('events', 'ServerStatusChanged'); if ($data == NULL) { $data[$this->ev->fqdn] = $this->ev->status; if ($this->ev->status != ServerStatusChanged::$ONLINE) { $needs_cleanup = true; } } else { if ($this->ev->status != ServerStatusChanged::$ONLINE) { $needs_cleanup = true; } } if ($needs_cleanup) { Logger::debug('main', 'ServerStatusChangedTask::run cleanup task for ' . $this->ev->fqdn); set_cache($data, 'events', 'ServerStatusChanged'); $tm = new Tasks_Manager(); $tm->load_from_server($this->ev->fqdn); foreach ($tm->tasks as $a_task) { $tm->remove($a_task->id); } } return true; }
public static function removeRole($fqdn_, $role_) { Logger::debug('main', "Starting Abstract_Server::removeRole for '{$fqdn_}' removing '{$role_}'"); if (substr($fqdn_, -1) == '.') { $fqdn_ = substr($fqdn_, 0, strlen($fqdn_) - 1); } $a_server = Abstract_Server::load($fqdn_); if (is_object($a_server) == false) { Logger::error('main', "Starting Abstract_Server::removeRole error failed to load server '{$fqdn_}'"); return false; } $roles = $a_server->getAttribute('roles'); if (is_array($roles) == false) { return false; } if (in_array($role_, $roles) == false) { return false; } switch ($role_) { case Server::SERVER_ROLE_APS: $prefs = Preferences::getInstance(); if (!$prefs) { die_error('get Preferences failed', __FILE__, __LINE__); } $slave_server_settings = $prefs->get('general', 'slave_server_settings'); $remove_orphan = (bool) $slave_server_settings['remove_orphan']; Abstract_Liaison::delete('ApplicationServer', NULL, $fqdn_); if ($remove_orphan) { $apps = $a_server->getApplications(); $applicationDB = ApplicationDB::getInstance(); // remove the orphan applications if (is_array($apps)) { foreach ($apps as $an_application) { if ($an_application->isOrphan()) { Logger::debug('main', "Abstract_Server::delete {$an_application} is orphan"); $applicationDB->remove($an_application); } } } } $tm = new Tasks_Manager(); $tm->load_from_server($fqdn_); foreach ($tm->tasks as $a_task) { $tm->remove($a_task->id); } break; case Server::SERVER_ROLE_FS: if (Preferences::moduleIsEnabled('ProfileDB')) { $profiledb = ProfileDB::getInstance(); $folders = $profiledb->importFromServer($fqdn_); foreach ($folders as $a_folder) { $profiledb->remove($a_folder->id); } } if (Preferences::moduleIsEnabled('SharedFolderDB')) { $sharedfolderdb = SharedFolderDB::getInstance(); $folders = $sharedfolderdb->importFromServer($fqdn_); foreach ($folders as $a_folder) { $profiledb->remove($a_folder->id); } } break; // case Server::SERVER_ROLE_GATEWAY: // break; } return true; }
function server_display_role_preparation_aps($server) { $ret = array(); $server_online = $server->isOnline(); if ($server_online) { $buf = $server->updateApplications(); if (!$buf) { popup_error(_('Cannot list available applications')); } } $applicationDB = ApplicationDB::getInstance(); $applications_all = $applicationDB->getList(true); $applications = $server->getApplications(); if (!is_array($applications)) { $applications = array(); } usort($applications, 'application_cmp'); $applications_available = array(); $static_applications_available = array(); if (!$server_online && count($applications) == 0) { $applications_all = array(); } $servers_all = Abstract_Server::load_by_status(Server::SERVER_STATUS_ONLINE); foreach ($servers_all as $k => $v) { if ($v->fqdn == $server->fqdn) { unset($servers_all[$k]); } } $servers_replication = Abstract_Server::load_by_status(Server::SERVER_STATUS_ONLINE); foreach ($servers_replication as $k => $v) { if ($v->fqdn == $server->fqdn) { unset($servers_replication[$k]); } if ($v->type != $server->getAttribute('type')) { unset($servers_replication[$k]); } if (!array_key_exists('aps', $v->roles) || $v->roles['aps'] !== true) { unset($servers_replication[$k]); } if ($server->hasAttribute('ulteo_system') == false || $server->getAttribute('ulteo_system') == 0) { unset($servers_replication[$k]); } } $sessions = array(); $total = Abstract_Session::countByServer($_GET['fqdn']); if ($total > 0) { $has_sessions = true; $prefs = Preferences::getInstance(); if (!$prefs) { die_error('get Preferences failed', __FILE__, __LINE__); } if ($total > $prefs->get('general', 'max_items_per_page')) { if (!isset($_GET['start']) || (!is_numeric($_GET['start']) || $_GET['start'] >= $total)) { $start = 0; } else { $start = $_GET['start']; } $pagechanger = get_pagechanger('servers.php?action=manage&fqdn=' . $_GET['fqdn'] . '&', $prefs->get('general', 'max_items_per_page'), $total); $sessions = Abstract_Session::getByServer($_GET['fqdn'], $prefs->get('general', 'max_items_per_page'), $start); } else { $sessions = Abstract_Session::getByServer($_GET['fqdn']); } } else { $has_sessions = false; } $external_name_checklist = array('localhost', '127.0.0.1'); if (in_array($server->fqdn, $external_name_checklist) && in_array($server->getAttribute('external_name'), $external_name_checklist)) { popup_error(sprintf(_('Server "%s": redirection name may be invalid!'), $server->fqdn)); } if ($server->getAttribute('external_name') == '') { popup_error(sprintf(_('Server "%s": redirection name cannot be empty!'), $server->fqdn)); } if ($server_online) { //FIX ME ? $tm = new Tasks_Manager(); $tm->load_from_server($server->fqdn); $tm->refresh_all(); $apps_in_remove = array(); $apps_in_install = array(); $tasks = array(); if ($server_online) { foreach ($tm->tasks as $task) { if (!$task->succeed()) { $tasks[] = $task; } } foreach ($tasks as $task) { if (get_class($task) == 'Task_install') { foreach ($task->applications as $app) { if (!in_array($app, $apps_in_install)) { $apps_in_install[] = $app; } } } if (get_class($task) == 'Task_remove') { foreach ($task->applications as $app) { if (!in_array($app, $apps_in_remove)) { $apps_in_remove[] = $app; } } } } foreach ($applications_all as $app) { if (in_array($app, $applications)) { continue; } if (in_array($app, $apps_in_install)) { continue; } if ($app->getAttribute('type') != $server->getAttribute('type')) { continue; } $applications_available[] = $app; } } $ret['tasks'] = $tasks; $ret['apps_in_install'] = $apps_in_install; $ret['apps_in_remove'] = $apps_in_remove; } $ret['can_do_action'] = isAuthorized('manageServers'); $ret['web_port'] = $server->getAttribute('web_port'); $ret['can_use_apt'] = isset($server->ulteo_system) && $server->ulteo_system == 1 ? true : false; $ret['server_online'] = $server_online; $ret['sessions'] = $sessions; $ret['has_sessions'] = $has_sessions; $ret['total_sessions'] = $total; if (isset($pagechanger)) { $ret['pagechanger'] = $pagechanger; } $ret['applications'] = $applications; $ret['applications_available'] = $applications_available; $ret['applications_all'] = $applications_all; $ret['servers_all'] = $servers_all; $ret['servers_replication'] = $servers_replication; return $ret; }