diff --git a/application/layouts/scripts/parts/topbar.phtml b/application/layouts/scripts/parts/topbar.phtml
index 7528d9b70..f864b6f04 100755
--- a/application/layouts/scripts/parts/topbar.phtml
+++ b/application/layouts/scripts/parts/topbar.phtml
@@ -2,6 +2,30 @@
+
+
+ 999/999
+ 999/999
+ 999/999
+
+
+
+ 999/999
+ 999/999
+ 999/999
+ 999/999
+
+
+
+
+
+
+
+
auth()->isAuthenticated()): ?>
diff --git a/modules/monitoring/application/controllers/ListController.php b/modules/monitoring/application/controllers/ListController.php
index 5dddd6479..141fc0054 100644
--- a/modules/monitoring/application/controllers/ListController.php
+++ b/modules/monitoring/application/controllers/ListController.php
@@ -337,6 +337,35 @@ class Monitoring_ListController extends MonitoringController
));
}
+ public function hostgroupsAction()
+ {
+ $query = GroupsummaryView::fromRequest(
+ $this->_request,
+ array(
+ 'hostgroup_name',
+ 'cnt_hosts_up',
+ 'cnt_hosts_unreachable',
+ 'cnt_hosts_unreachable_unhandled',
+ 'cnt_hosts_down',
+ 'cnt_hosts_down_unhandled',
+ 'cnt_hosts_pending',
+ 'cnt_services_ok',
+ 'cnt_services_unknown',
+ 'cnt_services_unknown_unhandled',
+ 'cnt_services_critical',
+ 'cnt_services_critical_unhandled',
+ 'cnt_services_warning',
+ 'cnt_services_warning_unhandled',
+ 'cnt_services_pending'
+ )
+ )->getQuery();
+ $this->handleFormatRequest($query);
+ $this->view->hostgroups = $query->paginate();
+ $this->setupSortControl(array(
+ 'hostgroup_name' => 'Hostgroup Name'
+ ));
+ }
+
/**
* Handle the 'format' and 'view' parameter
*
diff --git a/modules/monitoring/application/views/scripts/list/hostgroups.phtml b/modules/monitoring/application/views/scripts/list/hostgroups.phtml
new file mode 100644
index 000000000..568c87b73
--- /dev/null
+++ b/modules/monitoring/application/views/scripts/list/hostgroups.phtml
@@ -0,0 +1,34 @@
+
+ = $this->paginationControl($hostgroups, null, null, array('preserve' => $this->preserve)); ?>
+
+
+
+
+
+
+ = $hostgroup->hostgroup_name; ?>
+
+ |
+
+
+ = $hostgroup->cnt_hosts_up; ?>
+ = $hostgroup->cnt_hosts_unreachable; ?>/= $hostgroup->cnt_hosts_unreachable_unhandled; ?>
+ = $hostgroup->cnt_hosts_down; ?>/= $hostgroup->cnt_hosts_down_unhandled; ?>
+ = $hostgroup->cnt_hosts_pending; ?>
+
+ |
+
+
+ = $hostgroup->cnt_services_ok; ?>
+ = $hostgroup->cnt_services_unknown; ?>/= $hostgroup->cnt_services_unknown_unhandled; ?>
+ = $hostgroup->cnt_services_critical; ?>/= $hostgroup->cnt_services_critical_unhandled; ?>
+ = $hostgroup->cnt_services_warning; ?>/= $hostgroup->cnt_services_warning_unhandled; ?>
+ = $hostgroup->cnt_services_pending; ?>
+
+ |
+
+
+
+
+ = $this->paginationControl($hostgroups, null, null, array('preserve' => $this->preserve)); ?>
+
diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/GroupsummaryQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/GroupsummaryQuery.php
index e53e5580b..facc80754 100644
--- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/GroupsummaryQuery.php
+++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/GroupsummaryQuery.php
@@ -77,7 +77,7 @@ class GroupsummaryQuery extends AbstractQuery
protected function joinHostgroups()
{
- if ($this->hasJoinedVirtualTable('services')) {
+ if (in_array('servicegroup_name', $this->getColumns())){
return $this->joinServiceHostgroups();
} else {
return $this->joinHostHostgroups();
@@ -96,7 +96,7 @@ class GroupsummaryQuery extends AbstractQuery
array()
)->join(
array('hgo' => $this->prefix . 'objects'),
- 'hgo.' . $this->object_id. ' = hg.hostgroup_object_id AND hgo.is_active = 1',
+ 'hgo.' . $this->object_id . ' = hg.hostgroup_object_id AND hgo.is_active = 1',
array()
);
$this->baseQuery->group('hgo.name1');
@@ -115,7 +115,7 @@ class GroupsummaryQuery extends AbstractQuery
array()
)->join(
array('hgo' => $this->prefix . 'objects'),
- 'hgo.' . $this->object_id. ' = hg.hostgroup_object_id AND hgo.is_active = 1',
+ 'hgo.' . $this->object_id . ' = hg.hostgroup_object_id AND hgo.is_active = 1',
array()
);
return $this;
diff --git a/public/css/main.css b/public/css/main.css
index f144c45b1..d6422a464 100644
--- a/public/css/main.css
+++ b/public/css/main.css
@@ -627,7 +627,7 @@ select.input-sm {
.nav-stacked {
- #background-color: #f8f8f8;
+ background-color: #f8f8f8;
}
.icinga-subnavigation {
@@ -641,11 +641,11 @@ select.input-sm {
padding-top: 1px;
padding-bottom: 1px;
border-bottom: 1px dotted #049baf;
- #border-right: 1px dotted #049baf;
+ border-right: 1px dotted #049baf;
}
.nav-stacked > li:first-child {
- #border-top: 1px dotted #049baf;
+ border-top: 1px dotted #049baf;
}
@@ -654,7 +654,7 @@ select.input-sm {
padding-top: 8px;
padding-bottom: 8px;
border-bottom: 1px dotted #049baf;
- #border-right: 1px dotted #049baf;
+ border-right: 1px dotted #049baf;
}
ul.icinga-subnavigation {
@@ -809,3 +809,159 @@ ul.icinga-subnavigation {
border: 1px solid #ff3300;
}
+.state-tile {
+ border-style: solid;
+ border-width: 1px;
+ padding: 3px 5px 3px 5px;
+ border-radius: 3px;
+ font-size: 13px;
+}
+
+.state-tile-up {
+ /* less */
+ border-style: solid;
+ border-width: 1px;
+ padding: 3px 5px 3px 5px;
+ border-radius: 3px;
+ font-size: 13px;
+ /* less */
+ border-color: #00CC33;
+ color: #00CC33;
+}
+
+.state-tile-unreachable {
+ /* less */
+ border-style: solid;
+ border-width: 1px;
+ padding: 3px 5px 3px 5px;
+ border-radius: 3px;
+ font-size: 13px;
+ /* less */
+ border-color: #E066FF;
+ color: #E066FF;
+}
+
+.state-tile-down {
+ /* less */
+ border-style: solid;
+ border-width: 1px;
+ padding: 3px 5px 3px 5px;
+ border-radius: 3px;
+ font-size: 13px;
+ /* less */
+ border-color: #FF3300;
+ color: #FF3300;
+}
+
+.state-tile-pending {
+ /* less */
+ border-style: solid;
+ border-width: 1px;
+ padding: 3px 5px 3px 5px;
+ border-radius: 3px;
+ font-size: 13px;
+ /* less */
+ border-color: #c0c0c0;
+ color: #c0c0c0;
+}
+
+.icinga-icon-user {
+ background-attachment: scroll;
+ background-clip: border-box;
+ background-color: rgba(0, 0, 0, 0);
+ background-image: url("../img/icons/user.png");
+ background-origin: padding-box;
+ background-position: center center;
+ background-repeat: no-repeat;
+ background-size: auto auto;
+ display: inline-block;
+ height: 16px;
+ width: 16px;
+}
+
+.icinga-navbar {
+ margin-right: 15px;
+}
+.icinga-navbar-reload {
+ margin-top: 13px;
+ margin-right: 40px;
+}
+
+.icinga-navbar-search {
+ background-image: url('../img/icons/search.png');
+ background-repeat: no-repeat;
+ background-position: 5px 50%;
+ padding-left: 25px !important;
+}
+
+.icinga-navbar-search-container {
+ border-left: 1px solid #ddd;
+ padding-left: 15px;
+ margin-top: 12px;
+}
+
+
+
+.icinga-navbar-hosts-container {
+ background-image: url('../img/icons/host.png');
+ background-repeat: no-repeat;
+ background-position: 5px 50%;
+ padding-left: 30px !important;
+ margin-top: 15px;
+}
+.icinga-navbar-services-container {
+ background-image: url('../img/icons/service.png');
+ background-repeat: no-repeat;
+ background-position: 5px 50%;
+ padding-left: 25px !important;
+ margin-top: 15px;
+}
+
+.icinga-navbar-pills {
+ border-style: solid;
+ border-width: 1px;
+ padding: 3px 5px 3px 5px;
+ border-radius: 3px;
+ font-size: 13px;
+}
+
+
+
+/** Service status **/
+
+.icinga-navbar-pills-critical {
+ border-color: #FF3300;
+ color: #FF3300;
+}
+
+.icinga-navbar-pills-ok {
+ border-color: #00CC33;
+ color: #00CC33;
+}
+
+.icinga-navbar-pills-warning {
+ border-color: #FFA500;
+ color: #FFA500;
+}
+
+.icinga-navbar-pills-unknown {
+ border-color: #E066FF;
+ color: #E066FF;
+}
+
+/** Host status **/
+
+.icinga-navbar-pills-unreachable {
+ border-color: #E066FF;
+ color: #E066FF;
+}
+
+.icinga-navbar-pills-down {
+ border-color: #FF3300;
+ color: #FF3300;
+}
+
+.icinga-navbar-pills-up {
+ border-color: #00CC33;
+ color: #00CC33;
+}