コード例 #1
0
 /**
  * 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;
 }
コード例 #2
0
ファイル: functions.php プロジェクト: nuxsmin/sysMonDash
 *
 */
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>';
コード例 #3
0
 /**
  * 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;
 }