/** * Display list of services */ function showResourcesBoard($width = '', $perfdatas = false, $params = array()) { global $DB, $CFG_GLPI; $col_to_display = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); $data = Search::prepareDatasForSearch($params['itemtype'], $params, $col_to_display); $data['tocompute'] = $data['toview']; Search::constructSQL($data); //echo "<pre>"; print_r($data['sql']['search']); Search::constructDatas($data); /* if (! isset($_SESSION['plugin_monitoring_reduced_interface'])) { $_SESSION['plugin_monitoring_reduced_interface'] = false; } 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, "PluginMonitoringService", $_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 .= ' `glpi_plugin_monitoring_services`.`entities_id` IN ('.$_SESSION['glpiactiveentities_string'].')'; if ($where != '') { $where = " WHERE ".$where; $where = str_replace("`".getTableForItemType("PluginMonitoringDisplay")."`.", "", $where); } $leftjoin = " INNER JOIN `glpi_plugin_monitoring_services` ON (`glpi_plugin_monitoring_services`.`plugin_monitoring_componentscatalogs_hosts_id` = `glpi_plugin_monitoring_componentscatalogs_hosts`.`id`) INNER JOIN `glpi_plugin_monitoring_hosts` ON `glpi_plugin_monitoring_componentscatalogs_hosts`.`items_id` = `glpi_plugin_monitoring_hosts`.`items_id` AND `glpi_plugin_monitoring_componentscatalogs_hosts`.`itemtype` = `glpi_plugin_monitoring_hosts`.`itemtype` INNER JOIN `glpi_plugin_monitoring_componentscatalogs` ON `plugin_monitoring_componentscalalog_id` = `glpi_plugin_monitoring_componentscatalogs`.`id` INNER JOIN `glpi_plugin_monitoring_components` ON (`glpi_plugin_monitoring_services`.`plugin_monitoring_components_id` = `glpi_plugin_monitoring_components`.`id`) INNER JOIN `glpi_entities` ON (`glpi_plugin_monitoring_services`.`entities_id` = `glpi_entities`.`id`) "; $leftjoin .= " LEFT JOIN `glpi_computers` ON `glpi_plugin_monitoring_componentscatalogs_hosts`.`items_id` = `glpi_computers`.`id` AND `glpi_plugin_monitoring_componentscatalogs_hosts`.`itemtype`='Computer'"; $leftjoin .= " LEFT JOIN `glpi_printers` ON `glpi_plugin_monitoring_componentscatalogs_hosts`.`items_id` = `glpi_printers`.`id` AND `glpi_plugin_monitoring_componentscatalogs_hosts`.`itemtype`='Printer'"; $leftjoin .= " LEFT JOIN `glpi_networkequipments` ON `glpi_plugin_monitoring_componentscatalogs_hosts`.`items_id` = `glpi_networkequipments`.`id` AND `glpi_plugin_monitoring_componentscatalogs_hosts`.`itemtype`='NetworkEquipment'"; // * ORDER $ORDERQUERY = "ORDER BY `glpi_plugin_monitoring_services`.`name` ASC"; $toview = array(1, 2, 3, 4, 5); $toviewComplete = array( 'ITEM_0' => 'host_name', 'ITEM_1' => 'component_name', 'ITEM_2' => 'state', 'ITEM_3' => 'last_check', 'ITEM_4' => 'event' ); foreach ($toview as $key => $val) { if ($_GET['sort']==$val) { $ORDERQUERY = Search::addOrderBy("PluginMonitoringService", $_GET['sort'], $_GET['order'], $key); foreach ($toviewComplete as $keyi=>$vali) { $ORDERQUERY= str_replace($keyi, $vali, $ORDERQUERY); } } } $query = "SELECT `glpi_plugin_monitoring_services`.*, CONCAT_WS('', `glpi_computers`.`name`, `glpi_printers`.`name`, `glpi_networkequipments`.`name`) AS host_name, `glpi_plugin_monitoring_componentscatalogs_hosts`.`itemtype`, `glpi_plugin_monitoring_componentscatalogs_hosts`.`items_id`, `glpi_plugin_monitoring_hosts`.`id` AS host_id, `glpi_plugin_monitoring_hosts`.`state` AS host_state, `glpi_plugin_monitoring_hosts`.`is_acknowledged` AS host_acknowledged, `glpi_plugin_monitoring_components`.`id` AS component_id, `glpi_plugin_monitoring_components`.`name` AS component_name FROM `glpi_plugin_monitoring_componentscatalogs_hosts` ".$leftjoin." ".$where." ".$ORDERQUERY; $result = $DB->query($query); $start = 0; if (isset($_GET["start"])) { $start = $_GET["start"]; } $numrows = $DB->numrows($result); $parameters = ''; $globallinkto = Toolbox::append_params( array('criteria' => Toolbox::stripslashes_deep($_GET['search']['criteria']), 'metacriteria' => Toolbox::stripslashes_deep($_GET['search']['metacriteria'])), '&'); $parameters = "sort=".$_GET['sort']."&order=".$_GET['order'].$globallinkto; Html::printPager($start, $numrows, $CFG_GLPI['root_doc']."/plugins/monitoring/front/service.php", $parameters); $limit = $numrows; if ($_SESSION["glpilist_limit"] < $numrows) { $limit = $_SESSION["glpilist_limit"]; } $query .= " LIMIT ".intval($start)."," . intval($_SESSION['glpilist_limit']); // Fred : on repose la requête sur la base une 2ème fois ... ? $result = $DB->query($query); */ $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']; } else { $search_config_top = ""; $search_config_bottom = ""; $begin_display = 0; $end_display = 0; } // Pour la génération des graphes ... echo '<div style="display:none"><input type="text" id="custom_date" value="' . date('m/d/Y') . '"> ' . ' <input type="text" id="custom_time" value="' . date('H:i') . '"></div>'; echo "<br/>"; if ($perfdatas) { echo "<table class='tab_cadrehov' style='width:100%;'>\n <tr class='tab_bg_1'><th colspan='2' class='left'>" . __('Global counters', 'monitoring') . "</th></tr>\n <tr class='tab_bg_3' id='global_counters'></tr>\n </table>"; echo "<br/>"; } if ($width == '') { echo "<table class='tab_cadrehov' style='width:100%;'>"; } else { echo "<table class='tab_cadrehov' style='width:" . $width . "px;'>"; } $num = 0; echo "<tr class='tab_bg_1'>"; if (!isset($_SESSION['plugin_monitoring_reduced_interface'])) { $_SESSION['plugin_monitoring_reduced_interface'] = 0; } if (!$_SESSION['plugin_monitoring_reduced_interface']) { // echo Search::showHeaderItem(0, __('Show counters', 'monitoring'), $num); echo Search::showHeaderItem(0, __('Show graphics', 'monitoring'), $num); } $this->showHeaderItem(__('Host name', 'monitoring'), 1, $num, $begin_display, $globallinkto, 'service.php', 'PluginMonitoringService'); $this->showHeaderItem(__('Component', 'monitoring'), 2, $num, $begin_display, $globallinkto, 'service.php', 'PluginMonitoringService'); if (!$perfdatas) { $this->showHeaderItem(__('Resource state', 'monitoring'), 3, $num, $begin_display, $globallinkto, 'service.php', 'PluginMonitoringService'); $this->showHeaderItem(__('Last check', 'monitoring'), 4, $num, $begin_display, $globallinkto, 'service.php', 'PluginMonitoringService'); echo Search::showHeaderItem(0, __('Result details', 'monitoring'), $num); echo Search::showHeaderItem(0, __('Check period', 'monitoring'), $num); if (Session::haveRight("plugin_monitoring_acknowledge", READ)) { echo Search::showHeaderItem(0, __('Acknowledge', 'monitoring'), $num); } } echo "</tr>"; PluginMonitoringDisplay::$ar_counterTypes = array(); PluginMonitoringToolbox::loadLib(); // while ($data=$DB->fetch_array($result)) { //echo "<pre>"; print_r($data['data']); foreach ($data['data']['rows'] as $row) { // Reduced array or not ? if ($_SESSION['plugin_monitoring_reduced_interface'] and $row[2]['displayname'] == 'OK') { continue; } echo "<tr class='tab_bg_3'>"; $this->displayLine($row, 1, $perfdatas); echo "</tr>"; } echo "</table>"; echo "<br/>"; Html::printPager($data['search']['start'], $data['data']['totalcount'], $data['search']['target'], $parameters, '', 0, $search_config_bottom); if ($perfdatas) { // foreach(PluginMonitoringDisplay::$ar_counterTypes as $counter_id => $counter_name) { // Toolbox::logInFile("pm", "Counter type +++ : $counter_id => $counter_name\n"); // } echo "<script>\n Ext.onReady(function(){\n // console.log('Ready ...');\n window.setTimeout(function(){"; foreach (PluginMonitoringDisplay::$ar_counterTypes as $counter_id => $counter_name) { echo "\n var global = Ext.get('#global_counter_" . $counter_id . "');\n if (! global) {\n var html = \"<th id='global_counter_" . $counter_id . "' counterType ='" . $counter_id . "' class='global_counter'>\";\n html += \"<span class='global_counter_name'>" . $counter_name . "</span>\";\n html += \"<span> : </span>\";\n html += \"<span class='global_counter_value'>0</span>\";\n html += \"</th>\";\n Ext.select('#global_counters').createChild(html);\n console.log('Created an element for global \\'" . $counter_id . " / " . $counter_name . "\\' counter.');\n }\n"; } echo "\n }, 100);\n window.setInterval(function(){\n Ext.select('.global_counter').each(function(el) {\n var counterType = el.getAttribute('counterType');\n // console.log('Global counter for '+counterType+' exists.');\n\n el.select('.global_counter_value').each(function(elGlobalValue) {\n elGlobalValue.update('0');\n // console.log('Global counter value is : '+parseFloat(elGlobalValue.dom.innerHTML));\n\n var select = 'td[counter=\\'' + counterType + '\\'][counterType=\\'difference\\']';\n Ext.select(select).each(function(el) {\n // console.log('Local counter is ' + el.getAttribute('counter') + ', value is : '+parseFloat(el.dom.innerHTML));\n var newCounter = parseFloat(elGlobalValue.dom.innerHTML) + parseFloat(el.dom.innerHTML);\n elGlobalValue.update(newCounter.toString());\n });\n });\n });\n }, 1000);\n });\n </script>"; } }