function showBADetail($id) { global $CFG_GLPI; $pMonitoringBusinessrule = new PluginMonitoringBusinessrule(); $pMonitoringBusinessrulegroup = new PluginMonitoringBusinessrulegroup(); $pMonitoringService = new PluginMonitoringService(); $this->getFromDB($id); echo "<table class='tab_cadrehov'>"; $a_groups = $pMonitoringBusinessrulegroup->find("`plugin_monitoring_servicescatalogs_id`='" . $id . "'"); echo "<tr class='tab_bg_1'>"; $color = PluginMonitoringDisplay::getState($this->fields['state'], $this->fields['state_type']); $pic = $color; $color = str_replace("_soft", "", $color); echo "<td rowspan='" . count($a_groups) . "' class='center' width='200' bgcolor='" . $color . "'>"; echo "<strong style='font-size: 20px'>" . $this->getName() . "</strong><br/>"; echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/monitoring/pics/box_" . $pic . "_40.png'/>"; echo "</td>"; $i = 0; foreach ($a_groups as $gdata) { $a_brulesg = $pMonitoringBusinessrule->find("`plugin_monitoring_businessrulegroups_id`='" . $gdata['id'] . "'"); if ($i > 0) { echo "<tr>"; } $state = array(); $state['red'] = 0; $state['red_soft'] = 0; $state['orange'] = 0; $state['orange_soft'] = 0; $state['green'] = 0; $state['green_soft'] = 0; foreach ($a_brulesg as $brulesdata) { $pMonitoringService->getFromDB($brulesdata['plugin_monitoring_services_id']); $state[PluginMonitoringDisplay::getState($pMonitoringService->fields['state'], $pMonitoringService->fields['state_type'])]++; } $color = ""; if ($gdata['operator'] == 'or') { if ($state['green'] >= 1) { $color = "green"; } else { if ($state['orange'] >= 1) { $color = "orange"; } else { if ($state['orange_soft'] >= 1) { $color = "orange"; } else { if ($state['red'] >= 1) { $color = "red"; } else { if ($state['red_soft'] >= 1) { $color = "red"; } } } } } } else { $num_min = str_replace(" of:", "", $gdata['operator']); if ($state['green'] >= $num_min) { $color = "green"; } else { if ($state['orange'] >= $num_min) { $color = "orange"; } else { if ($state['orange_soft'] >= $num_min) { $color = "orange"; } else { if ($state['red'] >= $num_min) { $color = "red"; } else { if ($state['red_soft'] >= $num_min) { $color = "red"; } } } } } } echo "<td class='center' bgcolor='" . $color . "'>"; echo $gdata['name'] . "<br/>[ " . $gdata['operator'] . " ]"; echo "</td>"; echo "<td bgcolor='" . $color . "'>"; echo "<table>"; foreach ($a_brulesg as $brulesdata) { echo "<tr class='tab_bg_1'>"; $pMonitoringService->getFromDB($brulesdata['plugin_monitoring_services_id']); PluginMonitoringDisplay::displayLine($pMonitoringService->fields); echo "</tr>"; } echo "</table>"; echo "</th>"; echo "</tr>"; $i++; } echo "</tr>"; echo "</table>"; }
function getCounterOfView($id, $a_counter) { global $DB; $a_hosts = $this->find("`itemtype`='host'" . " AND `plugin_monitoring_displayviews_id`='" . $id . "'"); foreach ($a_hosts as $data) { $query = "SELECT * FROM `glpi_plugin_monitoring_services`" . " LEFT JOIN `glpi_plugin_monitoring_componentscatalogs_hosts`" . " ON `plugin_monitoring_componentscatalogs_hosts_id`=" . " `glpi_plugin_monitoring_componentscatalogs_hosts`.`id`" . " WHERE `items_id`='" . $data['items_id'] . "'" . " AND `itemtype`='" . $data['extra_infos'] . "'" . " AND `glpi_plugin_monitoring_services`.`id` IS NOT NULL"; $result = $DB->query($query); while ($data2 = $DB->fetch_array($result)) { $ret = PluginMonitoringDisplay::getState($data2['state'], $data2['state_type'], '', $data2['is_acknowledged']); if (strstr($ret, '_soft')) { $a_counter['ok']++; } else { if ($ret == 'red') { $a_counter['critical']++; } else { if ($ret == 'redblue') { $a_counter['acknowledge']++; } else { if ($ret == 'orange' || $ret == 'yellow') { $a_counter['warning']++; } else { $a_counter['ok']++; } } } } } } return $a_counter; }
function checkState($stateevent, $date, $services_id, $event) { $state = PluginMonitoringDisplay::getState($stateevent, "HARD", $event); if ($state == 'red') { // Critial if ($this->currentstate == 'ok') { // Add $input = array(); $input['plugin_monitoring_services_id'] = $this->plugin_monitoring_services_id; $input['begin_date'] = $date; $this->unavaibilities_id = $this->add($input); $this->currentstate = 'critical'; } } else { // Ok if ($this->currentstate == 'critical') { // update $input = array(); $input['id'] = $this->unavaibilities_id; $input['end_date'] = $date; $this->getFromDB($this->unavaibilities_id); $input['duration'] = strtotime($date) - strtotime($this->fields['begin_date']); $this->update($input); $this->unavaibilities_id = 0; $this->currentstate = 'ok'; } } }
function generateConfig($weathermaps_id) { global $DB, $CFG_GLPI; if ($weathermaps_id < 1) { return; } $conf = "\n"; $pmWeathermapnode = new PluginMonitoringWeathermapnode(); $pmComponent = new PluginMonitoringComponent(); $pmService = new PluginMonitoringService(); $this->getFromDB($weathermaps_id); if ($this->fields['background'] != '') { $conf .= "BACKGROUND " . GLPI_PLUGIN_DOC_DIR . "/monitoring/weathermapbg/" . $this->fields['background'] . "\n"; //$conf .= "BACKGROUND http://192.168.20.194".$CFG_GLPI['root_doc']."/plugins/monitoring/front/send.php?file=weathermapbg/".$this->fields['background']."\n"; } // image file to generate $conf .= "IMAGEOUTPUTFILE " . GLPI_PLUGIN_DOC_DIR . "/monitoring/weathermap-" . $weathermaps_id . ".png\n"; $conf .= "\n"; $conf .= "WIDTH " . $this->fields["width"] . "\nHEIGHT " . $this->fields["height"] . "\nHTMLSTYLE overlib\nTITLE " . $this->fields["name"] . "\nTIMEPOS 10 20 Cree le : " . Html::convDateTime(date("Y-m-d H:i:s")) . "\n\nKEYPOS DEFAULT 10 " . ($this->fields["height"] - $this->fields["width"] / 16) . "\nKEYSTYLE DEFAULT horizontal " . $this->fields["width"] / 4 . "\nKEYTEXTCOLOR 0 0 0\nKEYOUTLINECOLOR 0 0 0\nKEYBGCOLOR 255 255 255\nBGCOLOR 255 255 255\nTITLECOLOR 0 0 0\nTIMECOLOR 0 0 0\nSCALE DEFAULT 0.0001 0.1 255 255 255 255 255 255 \nSCALE DEFAULT 0.1 50 0 255 0 255 215 0 \nSCALE DEFAULT 50 100 255 215 0 255 0 0 \n\nSET key_hidezero_DEFAULT 1\n\n# End of global section\n\n# TEMPLATE-only NODEs:\nNODE DEFAULT\n\tMAXVALUE 100\n\n# TEMPLATE-only LINKs:\nLINK DEFAULT\n\tWIDTH 4\n\tBANDWIDTH 100M\n\n# regular NODEs:\n"; $query = "SELECT * FROM `" . getTableForItemType("PluginMonitoringWeathermapnode") . "`\n WHERE `plugin_monitoring_weathermaps_id`='" . $weathermaps_id . "'\n ORDER BY `name`"; $result = $DB->query($query); $link = ''; while ($data = $DB->fetch_array($result)) { $name = $data['name']; if ($name == '') { $itemtype = $data['itemtype']; $item = new $itemtype(); $item->getFromDB($data['items_id']); $name = $item->getName(); $link = $item->getLinkURL(); } $conf .= "NODE " . preg_replace("/[^A-Za-z0-9_]/", "", $data['name']) . "_" . $data['id'] . "\n" . " LABEL " . $name . "\n" . " POSITION " . $data['x'] . " " . $data['y'] . "\n"; if ($link != '') { $conf .= " INFOURL " . $link . "\n"; } $conf .= "\n"; } $conf .= "\n\n# regular LINKs:\n"; $bwlabelpos = array(); $bwlabelpos[0] = "BWLABELPOS 81 39"; $bwlabelpos[1] = "BWLABELPOS 71 29"; $i = 0; $doublelink = array(); $doublelinkbegin = array(); $doublelinkdiff = array(); $doublelinknumber = array(); $query = "SELECT `" . getTableForItemType("PluginMonitoringWeathermaplink") . "`.*, \n count(`" . getTableForItemType("PluginMonitoringWeathermaplink") . "`.`id`) as `cnt` \n FROM `" . getTableForItemType("PluginMonitoringWeathermaplink") . "` \n LEFT JOIN `" . getTableForItemType("PluginMonitoringWeathermapnode") . "`\n ON `plugin_monitoring_weathermapnodes_id_1` = `" . getTableForItemType("PluginMonitoringWeathermapnode") . "`.`id`\n\n WHERE `plugin_monitoring_weathermaps_id`='" . $weathermaps_id . "'\n group by `plugin_monitoring_weathermapnodes_id_1`, `plugin_monitoring_weathermapnodes_id_2`\n HAVING cnt >1"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { $tlink = $data['plugin_monitoring_weathermapnodes_id_1'] . "-" . $data['plugin_monitoring_weathermapnodes_id_2']; $doublelink[$tlink] = $data['cnt']; $doublelinknumber[$tlink] = 0; $beg = 0; $diff = 0; switch ($data['cnt']) { case 2: $beg = -22; $diff = 44; break; case 3: $beg = -33; $diff = 33; break; case 4: $beg = -39; $diff = 26; break; case 5: $beg = -60; $diff = 30; break; } $doublelinkbegin[$tlink] = $beg; $doublelinkdiff[$tlink] = $diff; } $query = "SELECT * FROM `" . getTableForItemType("PluginMonitoringWeathermapnode") . "`\n WHERE `plugin_monitoring_weathermaps_id`='" . $weathermaps_id . "'\n ORDER BY `name`"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { $queryl = "SELECT * FROM `" . getTableForItemType("PluginMonitoringWeathermaplink") . "`\n WHERE `plugin_monitoring_weathermapnodes_id_1`='" . $data['id'] . "'"; $resultl = $DB->query($queryl); while ($datal = $DB->fetch_array($resultl)) { $bandwidth = $datal['bandwidth_in'] . " " . $datal['bandwidth_out']; if ($datal['bandwidth_in'] == $datal['bandwidth_out']) { $bandwidth = $datal['bandwidth_in']; } $pmWeathermapnode->getFromDB($datal['plugin_monitoring_weathermapnodes_id_2']); $queryevent = "SELECT * FROM `glpi_plugin_monitoring_serviceevents`\n WHERE `plugin_monitoring_services_id`='" . $datal['plugin_monitoring_services_id'] . "'\n ORDER BY `date` DESC\n LIMIT 1"; $resultevent = $DB->query($queryevent); $in = ''; $out = ''; while ($dataevent = $DB->fetch_array($resultevent)) { $pmService->getFromDB($datal['plugin_monitoring_services_id']); $pmComponent->getFromDB($pmService->fields['plugin_monitoring_components_id']); $matches1 = array(); preg_match("/" . $pmComponent->fields['weathermap_regex_in'] . "/m", $dataevent['perf_data'], $matches1); if (isset($matches1[1])) { $in = $matches1[1]; } $matches1 = array(); preg_match("/" . $pmComponent->fields['weathermap_regex_out'] . "/m", $dataevent['perf_data'], $matches1); if (isset($matches1[1])) { $out = $matches1[1]; } } $in = $this->checkBandwidth("in", $in, $bandwidth); $out = $this->checkBandwidth("out", $out, $bandwidth); $nodesuffix = ''; $tlink = $datal['plugin_monitoring_weathermapnodes_id_1'] . "-" . $datal['plugin_monitoring_weathermapnodes_id_2']; if (isset($doublelink[$tlink])) { $nodesuffix = ":" . ($doublelinkbegin[$tlink] + $doublelinknumber[$tlink] * $doublelinkdiff[$tlink]) . ":0"; $doublelinknumber[$tlink]++; } $conf .= "LINK " . preg_replace("/[^A-Za-z0-9_]/", "", $data['name']) . "_" . $data['id'] . "-" . preg_replace("/[^A-Za-z0-9_]/", "", $pmWeathermapnode->fields['name']) . "_" . $pmWeathermapnode->fields['id'] . $nodesuffix . "\n"; $timezone = '0'; if (isset($_SESSION['plugin_monitoring_timezone'])) { $timezone = $_SESSION['plugin_monitoring_timezone']; } $timezone_file = str_replace("+", ".", $timezone); // if (file_exists(GLPI_ROOT."/files/_plugins/monitoring/PluginMonitoringService-".$datal['plugin_monitoring_services_id']."-2h".$timezone_file.".gif")) { $conf .= " INFOURL " . $CFG_GLPI['root_doc'] . "/plugins/monitoring/front/display.form.php?itemtype=PluginMonitoringService&items_id=" . $datal['plugin_monitoring_services_id'] . "\n" . " OVERLIBGRAPH " . $CFG_GLPI['root_doc'] . "/plugins/monitoring/front/send.php?file=PluginMonitoringService-" . $datal['plugin_monitoring_services_id'] . "-2h" . $timezone_file . ".png\n"; // } $conf .= " " . $bwlabelpos[$i] . "\n"; // Manage for port down $retflag = PluginMonitoringDisplay::getState($pmService->fields['state'], $pmService->fields['state_type'], '', $pmService->fields['is_acknowledged']); if ($retflag == 'red') { $conf .= " TARGET static:" . $datal['bandwidth_in'] . ":" . $datal['bandwidth_out'] . "\n"; } else { $conf .= " TARGET static:" . $in . ":" . $out . "\n"; } $conf .= " NODES " . preg_replace("/[^A-Za-z0-9_]/", "", $data['name']) . "_" . $data['id'] . $nodesuffix . " " . preg_replace("/[^A-Za-z0-9_]/", "", $pmWeathermapnode->fields['name']) . "_" . $pmWeathermapnode->fields['id'] . $nodesuffix . "\n"; $conf .= " BANDWIDTH " . $bandwidth . "\n\n"; $i++; if ($i == '2') { $i = 0; } } } return $conf; }
function getRessources($componentscatalogs_id, $state, $state_type = 'HARD') { global $DB; $a_services = array(); $pmComponentscatalog_Host = new PluginMonitoringComponentscatalog_Host(); $query = "SELECT * FROM `glpi_plugin_monitoring_services` \n LEFT JOIN `" . $pmComponentscatalog_Host->getTable() . "`\n ON `plugin_monitoring_componentscatalogs_hosts_id`=\n `" . $pmComponentscatalog_Host->getTable() . "`.`id`\n WHERE `plugin_monitoring_componentscalalog_id`='" . $componentscatalogs_id . "'\n AND `state_type` LIKE '" . $state_type . "'\n ORDER BY `name`"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { if (PluginMonitoringDisplay::getState($data['state'], $data['state_type'], '', $data['is_acknowledged']) == $state) { $a_services[] = $data; } } return $a_services; }
function showForm($items_id, $servicescatalogs_id, $options = array()) { global $LANG, $CFG_GLPI; if ($items_id != '') { $this->getFromDB($items_id); } else { $this->getEmpty(); } $this->showFormHeader($options); $rand = mt_rand(); echo "<tr class='tab_bg_1'>"; echo "<td>"; echo "<input type='hidden' name='plugin_monitoring_servicescatalogs_id' value='" . $servicescatalogs_id . "'/>"; echo $LANG['common'][16] . " :"; echo "</td>"; echo "<td>"; echo "<input type='text' name='name' value='" . $this->fields["name"] . "' size='30'/>"; echo "</td>"; if ($items_id != '') { echo "<th colspan='2' width='60%'>"; echo $LANG['plugin_monitoring']['service'][0]; echo " "; echo "<img onClick=\"Ext.get('ressources" . $rand . "').setDisplayed('block')\"\n title=\"" . $LANG['buttons'][8] . "\" alt=\"" . $LANG['buttons'][8] . "\"\n class='pointer' src='" . $CFG_GLPI["root_doc"] . "/pics/add_dropdown.png'>"; echo "</th>"; echo "</tr>"; echo "<tr>"; } echo "<td valign='top'>"; echo $LANG['rulesengine'][9] . " :"; echo "</td>"; echo "<td valign='top'>"; $first_operator = array(); $first_operator['or'] = "or"; $first_operator['2 of:'] = $LANG['plugin_monitoring']['businessrule'][2]; $first_operator['3 of:'] = $LANG['plugin_monitoring']['businessrule'][3]; $first_operator['4 of:'] = $LANG['plugin_monitoring']['businessrule'][4]; $first_operator['5 of:'] = $LANG['plugin_monitoring']['businessrule'][5]; $first_operator['6 of:'] = $LANG['plugin_monitoring']['businessrule'][6]; $first_operator['7 of:'] = $LANG['plugin_monitoring']['businessrule'][7]; $first_operator['8 of:'] = $LANG['plugin_monitoring']['businessrule'][8]; $first_operator['9 of:'] = $LANG['plugin_monitoring']['businessrule'][9]; $first_operator['10 of:'] = $LANG['plugin_monitoring']['businessrule'][10]; Dropdown::showFromArray('operator', $first_operator, array("value" => $this->fields['operator'])); echo "</td>"; if ($items_id != '') { echo "<td colspan='2'>"; // ** Dropdown to display echo "<div style='display:none' id='ressources" . $rand . "' >"; echo "<table>"; echo "<tr class='tab_bg_1'>"; echo "<td>"; echo "<form name='form' method='post' action='" . $CFG_GLPI['root_doc'] . "/plugins/monitoring/front/businessrule.form.php'>"; echo "<input type='hidden' name='plugin_monitoring_businessrulegroups_id' value='" . $items_id . "' />"; PluginMonitoringBusinessrule::dropdownService(0, array('name' => 'type')); echo "<input type='submit' name='add' value=\"" . $LANG['buttons'][8] . "\" class='submit'>"; echo "</form>"; echo "</td>"; echo "</tr>"; echo "</table>"; echo "<hr>"; echo "</div>"; echo "<table width='100%'>"; $pmBusinessrule = new PluginMonitoringBusinessrule(); $pmService = new PluginMonitoringService(); $a_services = $pmBusinessrule->find("`plugin_monitoring_businessrulegroups_id`='" . $servicescatalogs_id . "'"); foreach ($a_services as $gdata) { if ($pmService->getFromDB($gdata['plugin_monitoring_services_id'])) { $shortstate = PluginMonitoringDisplay::getState($pmService->fields['state'], $pmService->fields['state_type']); echo "<tr class='tab_bg_1'>"; echo "<td>"; echo "<img src='" . $CFG_GLPI['root_doc'] . "/plugins/monitoring/pics/box_" . $shortstate . "_32.png'/>"; echo "</td>"; echo "<td>"; $pmComponentscatalog_Host = new PluginMonitoringComponentscatalog_Host(); $pmService->getFromDB($gdata["plugin_monitoring_services_id"]); $pmComponentscatalog_Host->getFromDB($pmService->fields['plugin_monitoring_componentscatalogs_hosts_id']); echo $pmService->getLink(1); echo " " . $LANG['networking'][25] . " "; $itemtype2 = $pmComponentscatalog_Host->fields['itemtype']; $item2 = new $itemtype2(); $item2->getFromDB($pmComponentscatalog_Host->fields['items_id']); echo $item2->getLink(1); echo "</td>"; echo "<td>"; echo "<input type='submit' name='deletebusinessrules-" . $gdata['id'] . "' value=\"" . $LANG['buttons'][6] . "\" class='submit'>"; echo "</td>"; } else { // resource deleted echo "<tr class='tab_bg_1'>"; echo "<td colspan='2' bgcolor='#ff0000'>"; echo $LANG['plugin_monitoring']['service'][23]; echo "</td>"; echo "<td>"; echo "<input type='submit' name='deletebusinessrules-" . $gdata['id'] . "' value=\"" . $LANG['buttons'][53] . "\" class='submit'>"; echo "</td>"; } } echo "</tr>"; } echo "</table>"; echo "</td>"; echo "</tr>"; $this->showFormButtons($options); return true; }
/** * Display info of device * * @global type $DB * @param type $id */ function showWidget2Frame($id) { global $DB, $CFG_GLPI; $pmDisplayview_item = new PluginMonitoringDisplayview_item(); $pmDisplayview_item->getFromDB($id); $itemtype = $pmDisplayview_item->fields['extra_infos']; $item = new $itemtype(); $item->getFromDB($pmDisplayview_item->fields['items_id']); $critical = 0; $warning = 0; $ok = 0; $acknowledge = 0; $query = "SELECT * FROM `glpi_plugin_monitoring_services`" . " LEFT JOIN `glpi_plugin_monitoring_componentscatalogs_hosts`" . " ON `plugin_monitoring_componentscatalogs_hosts_id`=" . " `glpi_plugin_monitoring_componentscatalogs_hosts`.`id`" . " WHERE `items_id`='" . $item->fields['id'] . "'" . " AND `itemtype`='" . $itemtype . "'" . " AND `glpi_plugin_monitoring_services`.`id` IS NOT NULL"; $result = $DB->query($query); while ($data = $DB->fetch_array($result)) { $ret = PluginMonitoringDisplay::getState($data['state'], $data['state_type'], '', $data['is_acknowledged']); if (strstr($ret, '_soft')) { $ok++; } else { if ($ret == 'red') { $critical++; } else { if ($ret == 'redblue') { $acknowledge++; } else { if ($ret == 'orange' || $ret == 'yellow') { $warning++; } else { $ok++; } } } } } $class = 'ok'; if ($critical > 0) { $nb_ressources = $critical; $class = 'crit'; } else { if ($warning > 0) { $nb_ressources = $warning; $class = 'warn'; } else { $nb_ressources = $ok; } } echo '<div class="ch-item"> <div class="ch-info-' . $class . '"> <h1><a href="'; if ($item->can($item->getID(), 'r')) { echo $item->getFormURL() . '?id=' . $item->getID() . '&forcetab=PluginMonitoringHost$0'; } else { echo $CFG_GLPI['root_doc'] . "/plugins/monitoring/front/displayhost.php?itemtype=" . $itemtype . "&items_id=" . $item->getID(); } echo '">' . '<span id="devicea-' . $id . '">' . $item->getName() . '</span></a></h1> <p>' . $nb_ressources . '<font style="font-size: 14px;"> / ' . ($ok + $warning + $critical + $acknowledge) . '</font></p> </div> </div>'; echo "<script>\n fittext('devicea-" . $id . "');\n </script>"; }