* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MMC; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ require_once 'modules/msc/includes/scheduler_xmlrpc.php'; require_once 'modules/msc/includes/commands_xmlrpc.inc.php'; require_once "modules/msc/includes/mscoptions_xmlrpc.php"; if (isset($_POST["bconfirm"])) { // $cmd_id = $_POST['cmd_id']; $start_date = $_POST['start_date']; $end_date = $_POST['end_date']; extend_command($cmd_id, $start_date, $end_date); return; } /* Form displaying */ $f = new PopupForm(_T('Reschedule this command', 'msc'), 'reschedulePopupForm'); $f->add(new HiddenTpl("cmd_id"), array("value" => $_GET['cmd_id'], "hide" => True)); $f->add(new TrFormElement(_T('Start date', 'msc'), new DateTimeTpl('start_date')), array('value' => date("Y-m-d H:i:s"))); $f->add(new TrFormElement(_T('<br/>End date', 'msc'), new DateTimeTpl('end_date')), array('value' => date("Y-m-d H:i:s", time() + web_def_coh_life_time() * 60 * 60))); $f->addValidateButton("bconfirm"); $f->addCancelButton("bback"); $f->display(); ?> <script type="text/javascript"> jQuery(function() { var $ = jQuery; $('form#reschedulePopupForm').submit(function() {
function start_a_command($proxy = array()) { if ($_POST['editConvergence']) { $changed_params = getChangedParams($_POST); if ($changed_params == array('active')) { print "We have to edit command...."; } } $error = ""; if (!check_date($_POST)) { $error .= _T("Your start and end dates are not coherent, please check them.<br/>", "msc"); } # should add some other tests on fields (like int are int? ...) if ($error != '') { new NotifyWidgetFailure($error); complete_post(); $url = "base/computers/msctabs?"; foreach ($_GET as $k => $v) { $url .= "{$v}={$k}"; } header("Location: " . urlStrRedirect("msc/logs/viewLogs", array_merge($_GET, $_POST, array('failure' => True)))); exit; } // Vars seeding $post = $_POST; $from = $post['from']; $path = explode('|', $from); $module = $path[0]; $submod = $path[1]; $page = $path[2]; $params = array(); foreach (array('start_script', 'clean_on_success', 'do_reboot', 'do_wol', 'next_connection_delay', 'max_connection_attempt', 'do_inventory', 'ltitle', 'parameters', 'papi', 'maxbw', 'deployment_intervals', 'max_clients_per_proxy', 'launchAction') as $param) { $params[$param] = $post[$param]; } $halt_to = array(); foreach ($post as $p => $v) { if (preg_match('/^issue_halt_to_/', $p)) { $p = preg_replace('/^issue_halt_to_/', '', $p); if ($v == 'on') { $halt_to[] = $p; } } } $params['issue_halt_to'] = $halt_to; $p_api = new ServerAPI(); $p_api->fromURI($post['papi']); foreach (array('start_date', 'end_date') as $param) { if ($post[$param] == _T("now", "msc")) { $params[$param] = "0000-00-00 00:00:00"; } elseif ($post[$param] == _T("never", "msc")) { $params[$param] = "0000-00-00 00:00:00"; } else { $params[$param] = $post[$param]; } } $pid = $post['pid']; $mode = $post['copy_mode']; if (isset($post['uuid']) && $post['uuid']) { // command on a single target $hostname = $post['hostname']; $uuid = $post['uuid']; $target = array($uuid); $tab = 'tablogs'; /* record new command */ $id = add_command_api($pid, $target, $params, $p_api, $mode, NULL); if (!isXMLRPCError()) { scheduler_start_these_commands('', array($id)); /* then redirect to the logs page */ header("Location: " . urlStrRedirect("msc/logs/viewLogs", array('tab' => $tab, 'uuid' => $uuid, 'hostname' => $hostname, 'cmd_id' => $id))); exit; } else { /* Return to the launch tab, the backtrace will be displayed */ header("Location: " . urlStrRedirect("msc/logs/viewLogs", array('tab' => 'tablaunch', 'uuid' => $uuid, 'hostname' => $hostname))); exit; } } else { # command on a whole group $gid = $post['gid']; $tab = 'grouptablogs'; // record new command // given a proxy list and a proxy style, we now have to build or proxy chain // target structure is an dict using the following stucture: "priority" => array(proxies) $ordered_proxies = array(); if ($_POST['proxy_mode'] == 'multiple') { // first case: split mode; every proxy got the same priority (1 in our case) foreach ($proxy as $p) { array_push($ordered_proxies, array('uuid' => $p, 'priority' => 1, 'max_clients' => $_POST['max_clients_per_proxy'])); } $params['proxy_mode'] = 'split'; } elseif ($_POST['proxy_mode'] == 'single') { // second case: queue mode; one priority level per proxy, starting at 1 $current_priority = 1; foreach ($proxy as $p) { array_push($ordered_proxies, array('uuid' => $p, 'priority' => $current_priority, 'max_clients' => $_POST['max_clients_per_proxy'])); $current_priority += 1; } $params['proxy_mode'] = 'queue'; } if (quick_get('convergence')) { $active = $_POST['active'] == 'on' ? 1 : 0; $cmd_type = 2; // Convergence command type if (quick_get('editConvergence')) { /* Stop command */ $cmd_id = xmlrpc_get_convergence_command_id($gid, $p_api, $pid); stop_command($cmd_id); /* Set end date of this command to now(), don't touch to start date */ $start_date = _get_command_start_date($cmd_id); extend_command($cmd_id, $start_date, date("Y-m-d H:i:s")); /* Create new command */ $deploy_group_id = xmlrpc_get_deploy_group_id($gid, $p_api, $pid); $command_id = add_command_api($pid, NULL, $params, $p_api, $mode, $deploy_group_id, $ordered_proxies, $cmd_type); if (!$active) { // If this convergence is not active, expire this command $start_date = _get_command_start_date($command_id); extend_command($command_id, $start_date, date("Y-m-d H:i:s")); } /* Update convergence DB */ $updated_datas = array('active' => $active, 'commandId' => intval($command_id), 'cmdPhases' => $params); xmlrpc_edit_convergence_datas($gid, $p_api, $pid, $updated_datas); } else { /* Create convergence */ // create sub-groups $group = new Group($gid, True); $package = to_package(getPackageDetails($p_api, $pid)); $convergence_groups = $group->createConvergenceGroups($package); $deploy_group_id = $convergence_groups['deploy_group_id']; $done_group_id = $convergence_groups['done_group_id']; // Add command on sub-group $command_id = add_command_api($pid, NULL, $params, $p_api, $mode, $deploy_group_id, $ordered_proxies, $cmd_type); if (!$active) { // If this convergence is not active, expire this command $start_date = _get_command_start_date($command_id); extend_command($command_id, $start_date, date("Y-m-d H:i:s")); } // feed convergence db xmlrpc_add_convergence_datas($gid, $deploy_group_id, $done_group_id, $pid, $p_api, intval($command_id), $active, $params); } header("Location: " . urlStrRedirect("base/computers/groupmsctabs", array('gid' => $gid))); exit; } else { $id = add_command_api($pid, NULL, $params, $p_api, $mode, $gid, $ordered_proxies); scheduler_start_these_commands('', array($id)); // then redirect to the logs page header("Location: " . urlStrRedirect("msc/logs/viewLogs", array('tab' => $tab, 'gid' => $gid, 'cmd_id' => $id, 'proxy' => $proxy))); exit; } } }
function restart_active_convergence_commands($papi_id, $package) { $package = (object) $package; // Get convergence commands to restart $active_commands = xmlrpc_get_active_convergence_commands($papi_id, $package->id); if ($active_commands) { // WTF, this dyngroup function needs pkgs and msc.... if (in_array('pkgs', $_SESSION['modulesList'])) { require_once 'modules/pkgs/includes/xmlrpc.php'; } else { new NotifyWidgetWarn(_T("Failed to load some pkgs module", "pkgs")); return False; } if (in_array('msc', $_SESSION['modulesList'])) { require_once 'modules/msc/includes/commands_xmlrpc.inc.php'; } else { new NotifyWidgetWarn(_T("Failed to load some msc module", "pkgs")); return False; } // We need ServerAPI for some convergence methods... $ServerAPI = getPApiDetail($papi_id); // ... but without 'uuid' unset($ServerAPI['uuid']); $cmd_type = 2; $active = 1; $ordered_proxies = array(); $mode = 'push'; function __get_command_start_date($cmd_id) { $command_details = command_detail($cmd_id); list($year, $month, $day, $hour, $minute, $second) = $command_details['start_date']; return sprintf("%s-%s-%s %s:%s:%s", $year, $month, $day, $hour, $minute, $second); } foreach ($active_commands as $command) { $gid = $command['gid']; $cmd_id = $command['cmd_id']; /* Stop command */ stop_command($cmd_id); /* Set end date of this command to now(), don't touch to start date */ $start_date = __get_command_start_date($cmd_id); extend_command($cmd_id, $start_date, date("Y-m-d H:i:s")); /* Create new command */ $deploy_group_id = xmlrpc_get_deploy_group_id($gid, $ServerAPI, $package->id); $params = xmlrpc_get_convergence_phases($gid, $ServerAPI, $package->id); $command_id = add_command_api($package->id, NULL, $params, $ServerAPI, $mode, $deploy_group_id, $ordered_proxies, $cmd_type); /* Update convergence DB */ $updated_datas = array('active' => $active, 'commandId' => intval($command_id), 'cmdPhases' => $params); xmlrpc_edit_convergence_datas($gid, $ServerAPI, $package->id, $updated_datas); } } }