/** * Display list of hosts */ function showHostsBoard($params, $width = '', $limit = '') { global $DB, $CFG_GLPI; if (!isset($_SESSION['plugin_monitoring_reduced_interface'])) { $_SESSION['plugin_monitoring_reduced_interface'] = false; } $col_to_display = array(0, 10, 1, 2, 3, 6, 7, 8, 9, 11); $data = Search::prepareDatasForSearch('PluginMonitoringHost', $params, $col_to_display); $data['tocompute'] = $data['toview']; Search::constructSQL($data); //echo "<pre>"; print_r($data['sql']['search']); Search::constructDatas($data); // if (! isset($_GET['order'])) { // $_GET['order'] = "ASC"; // } // if (! isset($_GET['sort'])) { // $_GET['sort'] = ""; // } // // $order = "ASC"; // if (isset($_GET['order'])) { // $order = $_GET['order']; // } // $where = ''; // if (isset($_GET['field'])) { // foreach ($_GET['field'] as $key=>$value) { // $wheretmp = ''; // if (isset($_GET['link'][$key])) { // $wheretmp.= " ".$_GET['link'][$key]." "; // } // $wheretmp .= Search::addWhere( // "", // 0, // "PluginMonitoringHost", // $_GET['field'][$key], // $_GET['searchtype'][$key], // $_GET['contains'][$key]); // if (!strstr($wheretmp, "``.``")) { // if ($where != '' // AND !isset($_GET['link'][$key])) { // $where .= " AND "; // } // $where .= $wheretmp; // } // } // } // if ($where != '') { // $where = "(".$where; // $where .= ") AND "; // } // $where .= " CONCAT_WS('', `glpi_computers`.`entities_id`, `glpi_printers`.`entities_id`, `glpi_networkequipments`.`entities_id`) IN (".$_SESSION['glpiactiveentities_string'].")"; // // if ($where != '') { // $where = " WHERE ".$where; // $where = str_replace("`".getTableForItemType("PluginMonitoringDisplay")."`.", // "", $where); // // } // // $leftjoin = " // LEFT JOIN `glpi_computers` // ON `glpi_plugin_monitoring_hosts`.`items_id` = `glpi_computers`.`id` // AND `glpi_plugin_monitoring_hosts`.`itemtype`='Computer' // LEFT JOIN `glpi_printers` // ON `glpi_plugin_monitoring_hosts`.`items_id` = `glpi_printers`.`id` // AND `glpi_plugin_monitoring_hosts`.`itemtype`='Printer' // LEFT JOIN `glpi_networkequipments` // ON `glpi_plugin_monitoring_hosts`.`items_id` = `glpi_networkequipments`.`id` // AND `glpi_plugin_monitoring_hosts`.`itemtype`='NetworkEquipment' // LEFT JOIN `glpi_entities` // ON CONCAT_WS('', `glpi_computers`.`entities_id`, `glpi_printers`.`entities_id`, `glpi_networkequipments`.`entities_id`) = `glpi_entities`.`id` // // "; // // // * ORDER // $ORDERQUERY = "ORDER BY entity_name ASC, host_name ASC"; // $toview = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9); // $toviewComplete = array( // 'ITEM_0' => 'entity_name', // 'ITEM_1' => 'host_name', // 'ITEM_2' => 'host_state', // 'ITEM_3' => 'service_state', // 'ITEM_4' => 'last_check', // 'ITEM_5' => 'event', // 'ITEM_6' => 'perf_data', // 'ITEM_7' => 'is_acknowledged' // ); // foreach ($toview as $key => $val) { // if ($_GET['sort']==$val) { // $ORDERQUERY = Search::addOrderBy("PluginMonitoringHost", $_GET['sort'], // $_GET['order'], $key); // foreach ($toviewComplete as $keyi=>$vali) { // $ORDERQUERY= str_replace($keyi, $vali, $ORDERQUERY); // } // } // } // //// `glpi_computers`.* // // $query = "SELECT // `glpi_entities`.`name` AS entity_name, // CONCAT_WS('', `glpi_computers`.`id`, `glpi_printers`.`id`, `glpi_networkequipments`.`id`) AS idComputer, // CONCAT_WS('', `glpi_computers`.`name`, `glpi_printers`.`name`, `glpi_networkequipments`.`name`) AS host_name, // `glpi_plugin_monitoring_hosts`.*, // `glpi_plugin_monitoring_hosts`.`state` AS host_state, // `glpi_plugin_monitoring_hosts`.`is_acknowledged` AS host_acknowledged // FROM `glpi_plugin_monitoring_hosts` // ".$leftjoin." // ".$where." // ".$ORDERQUERY; // // Toolbox::logInFile("pm", "Query hosts - $query\n"); // // $result = $DB->query($query); // // if (! isset($_GET["start"])) { // $_GET["start"]=0; // } // $start=$_GET['start']; // if (! isset($_GET["order"])) { // $_GET["order"]="ASC"; // } $rand = mt_rand(); if (!isset($data['data']) || !isset($data['data']['totalcount'])) { return false; } // Contruct Pager parameters $globallinkto = Toolbox::append_params(array('criteria' => Toolbox::stripslashes_deep($data['search']['criteria']), 'metacriteria' => Toolbox::stripslashes_deep($data['search']['metacriteria'])), '&'); $parameters = "sort=" . $data['search']['sort'] . "&order=" . $data['search']['order'] . '&' . $globallinkto; if (isset($_GET['_in_modal'])) { $parameters .= "&_in_modal=1"; } // If the begin of the view is before the number of items if ($data['data']['count'] > 0) { // Display pager only for HTML if ($data['display_type'] == Search::HTML_OUTPUT) { $search_config_top = ""; $search_config_bottom = ""; Html::printPager($data['search']['start'], $data['data']['totalcount'], $data['search']['target'], $parameters, $data['itemtype'], 0, $search_config_top); } // Define begin and end var for loop // Search case $begin_display = $data['data']['begin']; $end_display = $data['data']['end']; } echo '<div id="custom_date" style="display:none"></div>'; echo '<div id="custom_time" style="display:none"></div>'; if ($width == '') { echo "<table class='tab_cadrehov' style='width:100%;'>"; } else { echo "<table class='tab_cadrehov' style='width:" . $width . "px;'>"; } $num = 0; if (Session::haveRight("plugin_monitoring_hostcommand", CREATE)) { // Host test command ... $pmCommand = new PluginMonitoringCommand(); $a_commands = array(); $a_list = $pmCommand->find("command_name LIKE 'host_action'"); foreach ($a_list as $dt) { $host_command_name = $dt['name']; $host_command_command = $dt['command_line']; } } echo "<tr class='tab_bg_1'>"; $this->showHeaderItem(__('Entity'), 0, $num, $begin_display, $globallinkto, 'host.php', 'PluginMonitoringHost'); $this->showHeaderItem(__('Type'), 0, $num, $begin_display, $globallinkto, 'host.php', 'PluginMonitoringHost'); $this->showHeaderItem(__('Host', 'monitoring'), 1, $num, $begin_display, $globallinkto, 'host.php', 'PluginMonitoringHost'); $this->showHeaderItem(__('Host state'), 2, $num, $begin_display, $globallinkto, 'host.php', 'PluginMonitoringHost'); if (isset($host_command_name)) { echo '<th>' . __('Host action', 'monitoring') . '</th>'; } echo '<th>' . __('Host resources state', 'monitoring') . '</th>'; echo '<th>' . __('IP address', 'monitoring') . '</th>'; $this->showHeaderItem(__('Last check', 'monitoring'), 4, $num, $begin_display, $globallinkto, 'host.php', 'PluginMonitoringHost'); $this->showHeaderItem(__('Result details', 'monitoring'), 5, $num, $begin_display, $globallinkto, 'host.php', 'PluginMonitoringHost'); $this->showHeaderItem(__('Performance data', 'monitoring'), 6, $num, $begin_display, $globallinkto, 'host.php', 'PluginMonitoringHost'); if (Session::haveRight("plugin_monitoring_acknowledge", READ) || Session::haveRight("plugin_monitoring_downtime", READ)) { $this->showHeaderItem(__('Maintenance', 'monitoring'), 7, $num, $begin_display, $globallinkto, 'host.php', 'PluginMonitoringHost'); } echo "</tr>"; foreach ($data['data']['rows'] as $row) { // Reduced array or not ? if ($_SESSION['plugin_monitoring_reduced_interface'] && $row[3]['displayname'] == 'UP') { continue; } if (isset($host_command_name)) { $row['host_command_name'] = $host_command_name; $row['host_command_command'] = $host_command_command; } // Get all host services except if state is ok or is already acknowledged ... $a_ret = PluginMonitoringHost::getServicesState($row['id'], "`glpi_plugin_monitoring_services`.`state` != 'OK'\n AND `glpi_plugin_monitoring_services`.`is_acknowledged` = '0'"); $row['host_services_state'] = $a_ret[0]; $row['host_services_state_list'] = $a_ret[1]; // Get host first IP address $row['ip'] = __('Unknown IP address', 'monitoring'); $ip = PluginMonitoringHostaddress::getIp($row[9]['displayname'], $row[1]['displayname'], ''); if ($ip != '') { $row['ip'] = $ip; } echo "<tr class='tab_bg_3'>"; $this->displayHostLine($row); echo "</tr>"; } echo "</table>"; echo "<br/>"; Html::printPager($data['search']['start'], $data['data']['totalcount'], $data['search']['target'], $parameters, '', 0, $search_config_bottom); }
/** * Form to add acknowledge on an host */ function showAddAcknowledgeForm($id, $allServices=false) { global $CFG_GLPI,$DB; if ($id == -1) { $pm_Host = $this; } else { $pm_Host = new PluginMonitoringHost(); $pm_Host->getFromDB($id); } $hostname = $pm_Host->getName(); $id = $pm_Host->fields['id']; if (empty($hostname)) return false; // Acknowledge an host ... echo "<form name='form' method='post' action='".$CFG_GLPI['root_doc']."/plugins/monitoring/front/acknowledge.form.php'>"; echo "<input type='hidden' name='host_id' value='$id' />"; echo "<input type='hidden' name='hostname' value='$hostname' />"; echo "<table class='tab_cadre_fixe'>"; echo "<tr class='tab_bg_1'>"; echo "<th colspan='3'>"; if ($allServices) { echo __('Add an acknowledge for all faulty services of the host', 'monitoring').' : '.$pm_Host->getLink(); } else { echo __('Add an acknowledge for the host and all faulty services of the host', 'monitoring').' : '.$pm_Host->getLink(); } echo "</td>"; echo "</tr>"; echo "<tr><td colspan='3'><hr/></td></tr>"; // Acknowledge host AND all faulty services ... // Get all host services except if state is ok or is already acknowledged ... $a_ret = PluginMonitoringHost::getServicesState($id, "`glpi_plugin_monitoring_services`.`state` != 'OK' AND `glpi_plugin_monitoring_services`.`is_acknowledged` = '0'"); $host_services_state = $a_ret[0]; $host_services_state_list = $a_ret[1]; $host_services = $a_ret[2]; if (count($host_services)) { echo "<tr><td colspan='3'>".__('All these services will be acknowledged', 'monitoring')." : </td></tr>"; echo "<input type='hidden' name='serviceCount' value='".count($host_services)."' />"; $i=0; foreach ($host_services as $data) { // Toolbox::logInFile("pm", "data : ".serialize($data)."\n"); $pmService = new PluginMonitoringService(); $pmService->getFromDB($data); echo "<tr class='tab_bg_1'>"; echo "<td colspan='1'></td>"; echo "<td colspan='2'>".Html::convDateTime($pmService->fields['last_check'])." : ".$pmService->fields['name']." - ".$pmService->fields['state']." : ".$pmService->fields['event']."</td>"; echo "</tr>"; echo "<input type='hidden' name='serviceId$i' value='".$pmService->fields['id']."' />"; $i++; } echo "<tr><td colspan='3'><hr/></td></tr>"; } if (! $allServices) { echo "<input type='hidden' name='hostAcknowledge' value='$hostname' />"; } echo "<tr class='tab_bg_1'>"; echo "<td>"; echo __('Acknowledge comment', 'monitoring'); echo "</td>"; echo "<td colspan='2'>"; echo "<textarea cols='80' rows='4' name='acknowledge_comment' ></textarea>"; echo "</td>"; echo "</tr>"; echo "<tr class='tab_bg_1'>"; echo "<td colspan='3' align='center'>"; echo "<input type='hidden' name='id' value='$id' />"; echo "<input type='hidden' name='is_acknowledged' value='1' />"; echo "<input type='hidden' name='acknowledge_users_id' value='".$_SESSION['glpiID']."' />"; echo "<input type='hidden' name='referer' value='".$_SERVER['HTTP_REFERER']."' />"; echo "<input type='submit' name='add' value=\"".__('Add an acknowledge for host', 'monitoring')."\" class='submit'>"; echo "</td>"; echo "</tr>"; if (Session::haveRight('create_ticket', 1)) { echo "<tr class='tab_bg_1'>"; echo "<td colspan='3' align='center'>"; echo "<input type='hidden' name='name' value='".__('Host is down', 'monitoring')."' />"; echo "<input type='hidden' name='redirect' value='".$CFG_GLPI["root_doc"]."/front/ticket.form.php' />"; echo "<input type='submit' name='add_and_ticket' value=\"".__('Add an acknowledge for host and create a ticket', 'monitoring')."\" class='submit'>"; echo "</td>"; echo "</tr>"; } echo "</table>"; Html::closeForm(); return true; }
function showWidgetFrame($id, $reduced_interface = false, $is_minemap = FALSE) { global $DB, $CFG_GLPI; $pmParentSC = new PluginMonitoringServicescatalog(); $pMonitoringBusinessrule = new PluginMonitoringBusinessrule(); $pMonitoringBusinessrulegroup = new PluginMonitoringBusinessrulegroup(); $pMonitoringService = new PluginMonitoringService(); $this->getFromDB($id); $derivated = false; if ($this->getField('plugin_monitoring_servicescatalogs_id') > 0) { $derivated = true; $pmParentSC->getFromDB($this->getField('plugin_monitoring_servicescatalogs_id')); } $data = $this->fields; // Toolbox::logInFile("pm", "SC : ".$data['id'].", name : ".$data['name'].", derivated : ".$derivated."\n"); $colorclass = 'ok'; switch ($data['state']) { case 'CRITICAL': case 'DOWNTIME': $colorclass = 'crit'; break; case 'WARNING': case 'UNKNOWN': case 'RECOVERY': case 'FLAPPING': case '': $colorclass = 'warn'; break; } echo '<br/><div class="ch-itemup"> <div class="ch-info-' . $colorclass . '"> <h1><a href="' . $CFG_GLPI['root_doc'] . '/plugins/monitoring/front/servicescatalog.form.php?id=' . $data['id'] . '&detail=1">'; echo $data['name']; if ($data['comment'] != '') { echo ' ' . $this->getComments(); } echo '</a></h1> </div> </div>'; // If SC is derivated from a template, get groups from its parent ... if ($derivated) { $a_group = $pMonitoringBusinessrulegroup->find("`plugin_monitoring_servicescatalogs_id`='" . $pmParentSC->fields['id'] . "'"); } else { $a_group = $pMonitoringBusinessrulegroup->find("`plugin_monitoring_servicescatalogs_id`='" . $data['id'] . "'"); } // Array updated dynamically with groups/hosts/services status ... $colorclass = 'ok'; $a_gstate = array(); $cs_info = array(); foreach ($a_group as $gdata) { // Toolbox::logInFile("pm", "BR group : ".$gdata['id'].", name : ".$gdata['name']."\n"); $a_brules = $pMonitoringBusinessrule->find("`plugin_monitoring_businessrulegroups_id`='" . $gdata['id'] . "'"); $state = array(); $state['OK'] = 0; $state['WARNING'] = 0; $state['CRITICAL'] = 0; $cs_info_hosts = array(); $cs_info_services = array(); foreach ($a_brules as $brulesdata) { // If SC is derivated from a template, do not care about services not from the same entity ... if (!$pMonitoringService->getFromDB($brulesdata['plugin_monitoring_services_id'])) { continue; } if ($derivated && $pMonitoringService->getField('entities_id') != $this->getField('entities_id')) { continue; } // Toolbox::logInFile("pm", "BR : ".$brulesdata['id'].", service : ".$brulesdata['plugin_monitoring_services_id']."\n"); if (!isset($cs_info_hosts[$pMonitoringService->getHostName()])) { $cs_info_hosts[$pMonitoringService->getHostName()] = array(); } $cs_info_hosts[$pMonitoringService->getHostName()]['id'] = $pMonitoringService->getHostId(); $cs_info_hosts[$pMonitoringService->getHostName()]['name'] = $pMonitoringService->getHostName(); $cs_info_hosts[$pMonitoringService->getHostName()]['services'][$pMonitoringService->getName()]['id'] = $pMonitoringService->fields['id']; $cs_info_hosts[$pMonitoringService->getHostName()]['services'][$pMonitoringService->getName()]['state'] = $pMonitoringService->fields['state']; $cs_info_hosts[$pMonitoringService->getHostName()]['services'][$pMonitoringService->getName()]['last_check'] = $pMonitoringService->fields['last_check']; $cs_info_hosts[$pMonitoringService->getHostName()]['services'][$pMonitoringService->getName()]['event'] = $pMonitoringService->fields['event']; // Get all host services except if state is ok or is already acknowledged ... $a_ret = PluginMonitoringHost::getServicesState($pMonitoringService->getHostId(), "`glpi_plugin_monitoring_services`.`state` != 'OK'"); $cs_info_hosts[$pMonitoringService->getHostName()]['state'] = $a_ret[0]; $cs_info_services[$pMonitoringService->getName()] = $pMonitoringService->fields['plugin_monitoring_components_id']; switch ($pMonitoringService->fields['state']) { case 'UP': case 'OK': $state['OK']++; break; case 'DOWN': case 'UNREACHABLE': case 'CRITICAL': case 'DOWNTIME': $state['CRITICAL']++; break; case 'WARNING': case 'UNKNOWN': case 'RECOVERY': case 'FLAPPING': $state['WARNING']++; break; } } if ($state['CRITICAL'] >= 1) { $a_gstate[$gdata['id']] = "CRITICAL"; } else { if ($state['WARNING'] >= 1) { $a_gstate[$gdata['id']] = "WARNING"; } else { $a_gstate[$gdata['id']] = "OK"; } } $cs_info[$gdata['id']] = array(); $cs_info[$gdata['id']]['name'] = $gdata['name']; $cs_info[$gdata['id']]['state'] = $a_gstate[$gdata['id']]; $cs_info[$gdata['id']]['hosts'] = $cs_info_hosts; $cs_info[$gdata['id']]['services'] = $cs_info_services; } $state = array(); $state['OK'] = 0; $state['WARNING'] = 0; $state['CRITICAL'] = 0; foreach ($a_gstate as $value) { $state[$value]++; } $color = 'green'; if ($state['CRITICAL'] > 0) { $color = 'red'; $colorclass = 'crit'; } else { if ($state['WARNING'] > 0) { $color = 'orange'; $colorclass = 'warn'; } } echo '<div class="ch-itemdown"> <div class="ch-info-' . $colorclass . '"> <p><font style="font-size: 20px;">'; if ($colorclass != 'ok') { echo __('Degraded mode', 'monitoring') . '!'; } echo '</font></p> </div> </div>'; // Show a minemap if requested ... echo "<div class='minemapdiv' align='center'>" . "<a onclick='\$(\"#minemapSC-" . $id . "\").toggle();'>" . __('Minemap', 'monitoring') . "</a></div>"; if (!$is_minemap) { echo '<div class="minemapdiv" id="minemapSC-' . $id . '" style="display: none; z-index: 1500">'; } else { echo '<div class="minemapdiv" id="minemapSC-' . $id . '">'; } echo '<table class="tab_cadrehov">'; foreach ($cs_info as $groupName => $group) { echo '<table class="tab_cadrehov">'; echo '<tr>'; echo '<th colspan="' . (1 + count($group['services'])) . '">' . __('Business rules group', 'monitoring') . " : " . $group['name'] . '</th>'; echo '</tr>'; echo '<tr>'; echo "<th>"; echo __('Hosts', 'monitoring'); echo "</th>"; foreach ($group['services'] as $serviceName => $service) { if (Session::haveRight("plugin_monitoring_service", READ)) { $link = $CFG_GLPI['root_doc'] . "/plugins/monitoring/front/service.php?hidesearch=1" . "&criteria[0][field]=2" . "&criteria[0][searchtype]=equals" . "&criteria[0][value]=" . $service . "&itemtype=PluginMonitoringService" . "&start=0'"; echo '<th class="vertical">'; echo '<a href="' . $link . '"><div class="rotated-text"><span class="rotated-text__inner">' . $serviceName . '</span></div></a>'; echo '</th>'; } else { echo '<th class="vertical">'; echo '<div class="rotated-text"><span class="rotated-text__inner">' . $serviceName . '</span></div>'; echo '</th>'; } } echo '</tr>'; foreach ($group['hosts'] as $host) { echo "<tr class='tab_bg_2' style='height: 50px;'>"; if (Session::haveRight("plugin_monitoring_service", READ)) { $link = $CFG_GLPI['root_doc'] . "/plugins/monitoring/front/service.php?hidesearch=1" . "&criteria[0][field]=20" . "&criteria[0][searchtype]=equals" . "&criteria[0][value]=" . $host['id'] . "&itemtype=PluginMonitoringService" . "&start=0'"; echo "<td class='left'><a href='" . $link . "'>" . $host['name'] . "</a></td>"; } else { echo "<td class='left'>" . $host['name'] . "</td>"; } // echo "<td class='left'>".$host['name']."</td>"; foreach ($host['services'] as $serviceName => $service) { echo '<td>'; echo '<div title="' . $service['last_check'] . ' - ' . $service['event'] . '" class="service service' . $service['state'] . '"></div>'; echo '</td>'; } echo '</tr>'; } echo '</table>'; } echo '</table>'; echo '</div>'; }