cube->getDimensionAfter($name)) && isset($this->summaries->{$next->getName()})) { $htm .= ' (' . $this->summaries->{$next->getName()}->hosts_cnt . ')'; } return $htm; } protected function getDimensionClasses($name, $row) { $classes = parent::getDimensionClasses($name, $row); $sums = $row; $next = $this->cube->getDimensionAfter($name); if ($next && isset($this->summaries->{$next->getName()})) { $sums = $this->summaries->{$next->getName()}; } $severityClass = []; if ($sums->hosts_unhandled_down > 0) { $severityClass[] = 'critical'; } elseif (isset($sums->hosts_unhandled_unreachable) && $sums->hosts_unhandled_unreachable > 0) { $severityClass[] = 'unreachable'; } if (empty($severityClass)) { if ($sums->hosts_down > 0) { $severityClass = ['critical', 'handled']; } elseif (isset($sums->hosts_unreachable) && $sums->hosts_unreachable > 0) { $severityClass = ['unreachable', 'handled']; } else { $severityClass[] = 'ok'; } } return array_merge($classes, $severityClass); } public function renderFacts($facts) { $indent = str_repeat(' ', 3); $parts = array(); if ($facts->hosts_unhandled_down > 0) { $parts['critical'] = $facts->hosts_unhandled_down; } if (isset($facts->hosts_unhandled_unreachable) && $facts->hosts_unhandled_unreachable > 0) { $parts['unreachable'] = $facts->hosts_unhandled_unreachable; } if ($facts->hosts_down > 0 && $facts->hosts_down > $facts->hosts_unhandled_down) { $parts['critical handled'] = $facts->hosts_down - $facts->hosts_unhandled_down; } if ( isset($facts->hosts_unreachable, $facts->hosts_unhandled_unreachable) && $facts->hosts_unreachable > 0 && $facts->hosts_unreachable > $facts->hosts_unhandled_unreachable ) { $parts['unreachable handled'] = $facts->hosts_unreachable - $facts->hosts_unhandled_unreachable; } if ( $facts->hosts_cnt > $facts->hosts_down && (! isset($facts->hosts_unreachable) || $facts->hosts_cnt > $facts->hosts_unreachable) ) { $ok = $facts->hosts_cnt - $facts->hosts_down; if (isset($facts->hosts_unreachable)) { $ok -= $facts->hosts_unreachable; } $parts['ok'] = $ok; } $main = ''; $sub = ''; foreach ($parts as $class => $count) { if ($count === 0) { continue; } if ($main === '') { $main = $this->makeBadgeHtml($class, $count); } else { $sub .= $this->makeBadgeHtml($class, $count); } } if ($sub !== '') { $sub = $indent . '' . "\n " . $sub . $indent . "\n"; } return $main . $sub; } protected function makeBadgeHtml($class, $count) { $indent = str_repeat(' ', 3); return sprintf( '%s%s', $indent, $class, $count ) . "\n"; } protected function getDetailsBaseUrl() { return 'cube/hosts/details'; } protected function getSeveritySortColumns(): Generator { $columns = ['down', 'unreachable']; foreach ($columns as $column) { yield "hosts_unhandled_$column"; } foreach ($columns as $column) { yield "hosts_$column"; } } }