/** * Agrupar las paradas programadas para aquellos hosts que tengan mas de X servicios programados. * * @return array Con los eventos programados */ public function getScheduledDowntimesGroupped() { $groupCount = 5; $hosts = array(); $out = array(); $downtimes = Util::arraySortByProperty($this->getScheduledDowntimes(), 'start_time', false); // Recorrer el array de eventos y contabilizar el número de veces que aparece cada host foreach ($downtimes as $downtime) { /** @var $downtime DowntimeInterface */ // Incrementar el contador y silenciar avisos @$hosts[$downtime->getHostHash()]['count']++; } // Recorrer el array de eventos y agrupar aquellos eventos de un host que se repitan más de $groupCount. // Se utiliza un nuevo array con la clave el nombre del host foreach ($downtimes as $downtime) { /** @var $downtime DowntimeInterface */ $hash = $downtime->getHostHash(); $hostCounter = $hosts[$hash]['count']; if ($hostCounter > $groupCount) { $downtime->setServiceDisplayName(sprintf(Language::t('Programado para %d servicios'), $hostCounter)); $out[$hash] = $downtime; } elseif (!isset($out[$hash])) { $out[$hash] = $downtime; } } return $out; }
* */ use SMD\Backend\BackendInterface; use SMD\Core\Init; use SMD\Core\sysMonDash; use SMD\Util\Util; define('APP_ROOT', '.'); require APP_ROOT . DIRECTORY_SEPARATOR . 'Base.php'; Init::start(); $raw = \SMD\Http\Request::analyze('raw', 0); $allHeaders = \SMD\Http\Request::analyze('allheaders', false, false, true); echo '<pre>'; if ($raw === 1) { $SMD = new sysMonDash(); foreach ($SMD->getBackends() as $Backend) { try { /** @var BackendInterface $Backend */ $Backend->setAllHeaders($allHeaders); echo 'Backend: ', $Backend->getBackend()->getAlias(), PHP_EOL; echo 'Hosts', PHP_EOL; print_r(Util::arraySortByProperty($Backend->getHostsProblems(), 'lastHardStateChange')); echo 'Services', PHP_EOL; print_r(Util::arraySortByProperty($Backend->getServicesProblems(), 'lastHardStateChange')); echo 'Downtimes', PHP_EOL; print_r(Util::arraySortByProperty($Backend->getScheduledDowntimes(), 'startTime', false)); } catch (Exception $e) { echo 'ERROR: ' . $Backend->getBackend()->getAlias() . ': ' . $e->getMessage(); } } } echo '</pre>';
/** * Función para obtener los eventos de los backends y devolver los avisos en formato HTML * * @return array */ public function getItems() { $htmlItems = array(); $rawItems = array(); try { // Obtener los avisos desde la monitorización foreach ($this->getBackends() as $Backend) { try { $rawItems = array_merge($rawItems, $Backend->getProblems()); $this->downtimes = array_merge($this->downtimes, $Backend->getScheduledDowntimesGroupped()); } catch (Exception $e) { $this->errors[] = $Backend->getBackend()->getAlias() . ': ' . $e->getMessage(); } } if ($rawItems === false) { throw new NoDataException(Language::t('No hay datos desde el backend')); } // Ordenar los rawItems por tiempo de último cambio Util::arraySortByProperty($rawItems, 'lastHardStateChange'); $newItemTime = Config::getConfig()->getNewItemTime(); // Recorremos el array y mostramos los elementos foreach ($rawItems as $item) { /** @var $item EventInterface */ // Detectar si es un evento de recuperación $newItemUp = $item->getState() === 0 && ($item->getLastTimeUp() || $item->getLastTimeOk()) ? abs(time() - $item->getLastHardStateChange()) < $newItemTime / 2 : false; // Detectar si es un elemento nuevo, no se trata de un "RECOVERY" y no está "ACKNOWLEDGED" $newItem = time() - $item->getLastHardStateChange() <= $newItemTime && !$newItemUp && !$item->isAcknowledged(); // Calcular los filtros de cada evento $runFilters = $this->filterItems($item); // Filtrar los eventos a mostrar if ($this->viewType !== VIEW_FRONTLINE && $this->viewType !== VIEW_DISPLAY || ($newItem === true || $newItemUp === true || $runFilters === false)) { $htmlItems[] = $this->getHtmlItems($item, $newItem, $newItemUp); $this->displayedItems++; } // Contador del no. de elementos $this->totalItems++; } } catch (Exception $e) { $this->errors[] = $e->getMessage(); //header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error - ' . utf8_decode(Language::t($e->getMessage())), true, 500); } return $htmlItems; }