diff --git a/modules/monitoring/application/controllers/ListController.php b/modules/monitoring/application/controllers/ListController.php
index 8f939bf91..f18296b07 100644
--- a/modules/monitoring/application/controllers/ListController.php
+++ b/modules/monitoring/application/controllers/ListController.php
@@ -82,9 +82,12 @@ class Monitoring_ListController extends Controller
'host_last_state_change',
'host_notifications_enabled',
// 'host_unhandled_service_count',
+ 'host_unhandled_services',
'host_action_url',
'host_notes_url',
- // 'host_last_comment',
+ 'host_last_comment',
+ 'host_last_ack',
+ 'host_last_downtime',
'host_active_checks_enabled',
'host_passive_checks_enabled',
'host_current_check_attempt',
@@ -147,7 +150,9 @@ class Monitoring_ListController extends Controller
'service_notifications_enabled',
'service_action_url',
'service_notes_url',
- // 'service_last_comment',
+ 'service_last_comment',
+ 'service_last_ack',
+ 'service_last_downtime',
'service_active_checks_enabled',
'service_passive_checks_enabled',
'current_check_attempt' => 'service_current_check_attempt',
diff --git a/modules/monitoring/application/views/scripts/list/hosts.phtml b/modules/monitoring/application/views/scripts/list/hosts.phtml
index c94d146a3..e484a6fe7 100644
--- a/modules/monitoring/application/views/scripts/list/hosts.phtml
+++ b/modules/monitoring/application/views/scripts/list/hosts.phtml
@@ -65,18 +65,17 @@ if ($hosts->count() === 0) {
}
}
- // Not available right now:
if (isset($host->host_last_comment) && $host->host_last_comment !== null) {
- $icons[] = $this->icon('comment.png', 'Comments');
+ $icons[] = $this->icon('comment.png', 'Comment: ' . $host->host_last_comment);
}
?>
- host_unhandled_service_count) && $host->host_unhandled_service_count > 0): ?>
-
- = $host->host_unhandled_service_count; ?>
+ host_unhandled_services) && $host->host_unhandled_services > 0): ?>
+
+ = $host->host_unhandled_services ?>
@@ -96,6 +95,7 @@ if ($hosts->count() === 0) {
host_icon_image) : ?>
= $this->img($this->resolveMacros($host->host_icon_image, $host), array('align' => 'right')) ?>
+ = implode(' ', $icons) ?>
= $host->host_name ?>
= $this->escape(substr(strip_tags($host->host_output), 0, 10000)); ?>
|
diff --git a/modules/monitoring/application/views/scripts/list/services.phtml b/modules/monitoring/application/views/scripts/list/services.phtml
index 75258c9db..10c78fd27 100644
--- a/modules/monitoring/application/views/scripts/list/services.phtml
+++ b/modules/monitoring/application/views/scripts/list/services.phtml
@@ -64,7 +64,9 @@ foreach ($services as $service):
service_acknowledged && !$service->service_in_downtime): ?>
- = $this->icon('acknowledgement.png', 'Acknowledged') ?>
+ = $this->icon('acknowledgement.png', 'Acknowledged' . (
+ $service->service_last_ack ? ': ' . $service->service_last_ack : ''
+ )) ?>
service_is_flapping): ?>
@@ -79,6 +81,10 @@ foreach ($services as $service):
= $this->icon('in_downtime.png', 'In Downtime') ?>
+ service_last_comment) && $service->service_last_comment !== null): ?>
+ = $this->icon('comment.png', 'Comment: ' . $service->service_last_comment) ?>
+
+
service_active_checks_enabled): ?>
service_passive_checks_enabled): ?>
= $this->icon('active_passive_checks_disabled.png', 'Active And Passive Checks Disabled') ?>
diff --git a/modules/monitoring/library/Monitoring/Backend/Ido/Query/StatusQuery.php b/modules/monitoring/library/Monitoring/Backend/Ido/Query/StatusQuery.php
index 7a9af1524..9144567fd 100644
--- a/modules/monitoring/library/Monitoring/Backend/Ido/Query/StatusQuery.php
+++ b/modules/monitoring/library/Monitoring/Backend/Ido/Query/StatusQuery.php
@@ -30,6 +30,8 @@
namespace Icinga\Module\Monitoring\Backend\Ido\Query;
+use Zend_Db_Expr;
+
class StatusQuery extends IdoQuery
{
protected $allowCustomVars = true;
@@ -293,16 +295,19 @@ class StatusQuery extends IdoQuery
END'
),
'serviceproblemsummary' => array(
-// 'host_unhandled_service_count' => 'sps.unhandled_service_count'
- 'host_unhandled_service_count' => '(NULL)'
+ 'host_unhandled_services' => 'sps.unhandled_services_count'
),
'lasthostcomment' => array(
-// 'host_last_comment' => 'hlc.comment_id'
- 'host_last_comment' => '(NULL)'
+ 'host_last_comment' => 'hlc.last_comment_data',
+ 'host_last_downtime' => 'hlc.last_downtime_data',
+ 'host_last_flapping' => 'hlc.last_flapping_data',
+ 'host_last_ack' => 'hlc.last_ack_data',
),
'lastservicecomment' => array(
-// 'service_last_comment' => 'slc.comment_id'
- 'service_last_comment' => '(NULL)'
+ 'service_last_comment' => 'slc.last_comment_data',
+ 'service_last_downtime' => 'slc.last_downtime_data',
+ 'service_last_flapping' => 'slc.last_flapping_data',
+ 'service_last_ack' => 'slc.last_ack_data',
)
);
@@ -325,9 +330,6 @@ class StatusQuery extends IdoQuery
$this->joinedVirtualTables = array(
'hosts' => true,
'hoststatus' => true,
- 'lasthostcomment' => true,
- 'lastservicecomment' => true,
- 'serviceproblemsummary' => true,
);
}
@@ -467,10 +469,23 @@ class StatusQuery extends IdoQuery
return $this;
}
- // TODO: This will be obsolete once status is based on the new hoststatus, offering much more
- // columns in a more efficient way
protected function joinServiceproblemsummary()
{
+ $sub = new Zend_Db_Expr('(SELECT'
+ . ' SUM(CASE WHEN (ss.problem_has_been_acknowledged + ss.scheduled_downtime_depth) > 0 THEN 0 ELSE 1 END) AS unhandled_services_count,'
+ . ' SUM(CASE WHEN (ss.problem_has_been_acknowledged + ss.scheduled_downtime_depth) > 0 THEN 1 ELSE 0 END) AS handled_services_count,'
+ . ' s.host_object_id FROM icinga_servicestatus ss'
+ . ' JOIN icinga_services s'
+ . ' ON s.service_object_id = ss.service_object_id'
+ . ' AND ss.current_state > 0'
+ . ' GROUP BY s.host_object_id)');
+ $this->select->joinLeft(
+ array('sps' => $sub),
+ 'sps.host_object_id = hs.host_object_id',
+ array()
+ );
+ return;
+
$this->select->joinleft(
array ('sps' => new \Zend_Db_Expr(
'(SELECT COUNT(s.service_object_id) as unhandled_service_count, s.host_object_id as host_object_id '.
@@ -484,14 +499,30 @@ class StatusQuery extends IdoQuery
);
}
- // TODO: Terribly slow. As I have no idea of how to fix this we should remove it.
+ protected function getLastCommentSubQuery()
+ {
+ $sub = '(SELECT'
+ . ' lc.object_id,'
+ . " CASE WHEN lc.entry_type = 1 THEN CONCAT('[' || c.author_name || '] ' || c.comment_data) ELSE NULL END AS last_comment_data,"
+ . " CASE WHEN lc.entry_type = 2 THEN CONCAT('[' || c.author_name || '] ' || c.comment_data) ELSE NULL END AS last_downtime_data,"
+ . " CASE WHEN lc.entry_type = 3 THEN CONCAT('[' || c.author_name || '] ' || c.comment_data) ELSE NULL END AS last_flapping_data,"
+ . " CASE WHEN lc.entry_type = 4 THEN CONCAT('[' || c.author_name || '] ' || c.comment_data) ELSE NULL END AS last_ack_data"
+ . ' FROM icinga_comments c'
+ . ' JOIN (SELECT'
+ . ' MAX(comment_id) as comment_id,'
+ . ' object_id,'
+ . ' entry_type'
+ . ' FROM icinga_comments'
+ . ' WHERE entry_type = 1 OR entry_type = 4'
+ . ' GROUP BY object_id, entry_type'
+ . ') lc ON lc.comment_id = c.comment_id GROUP BY lc.object_id)';
+ return new Zend_Db_Expr($sub);
+ }
+
protected function joinLasthostcomment()
{
- $this->select->joinleft(
- array ('hlc' => new \Zend_Db_Expr(
- '(SELECT MAX(c.comment_id) as comment_id, c.object_id '.
- 'FROM icinga_comments c GROUP BY c.object_id)')
- ),
+ $this->select->joinLeft(
+ array('hlc' => $this->getLastCommentSubQuery()),
'hlc.object_id = hs.host_object_id',
array()
);
@@ -500,11 +531,8 @@ class StatusQuery extends IdoQuery
// TODO: Terribly slow. As I have no idea of how to fix this we should remove it.
protected function joinLastservicecomment()
{
- $this->select->joinleft(
- array ('slc' => new \Zend_Db_Expr(
- '(SELECT MAX(c.comment_id) as comment_id, c.object_id '.
- 'FROM icinga_comments c GROUP BY c.object_id)')
- ),
+ $this->select->joinLeft(
+ array('slc' => $this->getLastCommentSubQuery()),
'slc.object_id = ss.service_object_id',
array()
);
diff --git a/modules/monitoring/library/Monitoring/DataView/HostStatus.php b/modules/monitoring/library/Monitoring/DataView/HostStatus.php
index aec89a498..9bf1f97a1 100644
--- a/modules/monitoring/library/Monitoring/DataView/HostStatus.php
+++ b/modules/monitoring/library/Monitoring/DataView/HostStatus.php
@@ -60,7 +60,8 @@ class HostStatus extends DataView
'host_long_output',
'host_check_command',
'host_perfdata',
- 'host_check_source',
+ 'host_check_source',
+ 'host_unhandled_services',
'host_passive_checks_enabled',
'host_passive_checks_enabled_changed',
'host_obsessing',
@@ -80,6 +81,9 @@ class HostStatus extends DataView
'host_percent_state_change',
'host_is_flapping',
'host_last_comment',
+ 'host_last_downtime',
+ 'host_last_ack',
+ 'host_last_flapping',
'host_action_url',
'host_notes_url',
'host_percent_state_change',
diff --git a/modules/monitoring/library/Monitoring/DataView/ServiceStatus.php b/modules/monitoring/library/Monitoring/DataView/ServiceStatus.php
index 563d7aaef..108261b89 100644
--- a/modules/monitoring/library/Monitoring/DataView/ServiceStatus.php
+++ b/modules/monitoring/library/Monitoring/DataView/ServiceStatus.php
@@ -66,6 +66,9 @@ class ServiceStatus extends DataView
'service_action_url',
'service_notes_url',
'service_last_comment',
+ 'service_last_downtime',
+ 'service_last_flapping',
+ 'service_last_ack',
'service_last_check',
'service_next_check',
'service_attempt',
diff --git a/modules/monitoring/library/Monitoring/Object/Service.php b/modules/monitoring/library/Monitoring/Object/Service.php
index 5fbdf360b..8a48b89e0 100644
--- a/modules/monitoring/library/Monitoring/Object/Service.php
+++ b/modules/monitoring/library/Monitoring/Object/Service.php
@@ -70,7 +70,7 @@ class Service extends AbstractObject
'host_is_flapping',
'host_last_check',
'host_notifications_enabled',
- 'host_unhandled_service_count',
+ 'host_unhandled_services',
'host_action_url',
'host_notes_url',
'host_display_name',