diff --git a/library/Icingadb/Model/DependencyNodeSummary.php b/library/Icingadb/Model/DependencyNodeSummary.php new file mode 100644 index 000000000..6c326dbdd --- /dev/null +++ b/library/Icingadb/Model/DependencyNodeSummary.php @@ -0,0 +1,119 @@ + new Expression( + 'SUM(CASE WHEN (dependency_node.service_id IS NOT NULL AND dependency_node_service_state.soft_state = 0)' + . 'OR (dependency_node.host_id IS NOT NULL AND dependency_node_host_state.soft_state = 0)' + . 'OR (dependency_node.redundancy_group_id IS NOT NULL AND dependency_node_redundancy_group_state.failed = \'n\')' + . ' THEN 1 ELSE 0 END)' + ), + 'objects_problem_handled' => new Expression( + 'SUM(CASE WHEN' + . ' (dependency_node.service_id IS NOT NULL AND dependency_node_service_state.soft_state = 2' + . ' AND (dependency_node_service_state.is_handled = \'y\' OR dependency_node_service_state.is_reachable = \'n\'))' + . ' OR' + . ' (dependency_node.host_id IS NOT NULL AND dependency_node_host_state.soft_state = 1' + . ' AND (dependency_node_host_state.is_handled = \'y\' OR dependency_node_host_state.is_reachable = \'n\'))' + // . ' OR' + // .' (dependency_node.redundancy_group_id IS NOT NULL AND dependency_node_redundancy_group_state.failed = \'y\')' + . ' THEN 1 ELSE 0 END)' + ), + 'objects_problem_unhandled' => new Expression( + 'SUM(CASE WHEN' + . ' (dependency_node.service_id IS NOT NULL AND dependency_node_service_state.soft_state = 2' + . ' AND (dependency_node_service_state.is_handled = \'n\' OR dependency_node_service_state.is_reachable = \'y\'))' + . ' OR' + . ' (dependency_node.host_id IS NOT NULL AND dependency_node_host_state.soft_state = 1' + . ' AND (dependency_node_host_state.is_handled = \'n\' OR dependency_node_host_state.is_reachable = \'y\'))' + . ' OR' + . ' (dependency_node.redundancy_group_id IS NOT NULL AND dependency_node_redundancy_group_state.failed = \'y\')' + . ' THEN 1 ELSE 0 END)' + ), + 'objects_warning_handled' => new Expression( + 'SUM(CASE WHEN(' + . 'dependency_node.service_id IS NOT NULL AND dependency_node_service_state.soft_state = 1' + . ' AND (dependency_node_service_state.is_handled = \'y\' OR dependency_node_service_state.is_reachable = \'n\')' + . ') THEN 1 ELSE 0 END)' + ), + 'objects_warning_unhandled' => new Expression( + 'SUM(CASE WHEN(' + . 'dependency_node.service_id IS NOT NULL AND dependency_node_service_state.soft_state = 1' + . ' AND (dependency_node_service_state.is_handled = \'n\' OR dependency_node_service_state.is_reachable = \'y\')' + . ') THEN 1 ELSE 0 END)' + ), + 'objects_unknown_handled' => new Expression( + 'SUM(CASE WHEN(' + . 'dependency_node.service_id IS NOT NULL AND dependency_node_service_state.soft_state = 3' + . ' AND (dependency_node_service_state.is_handled = \'y\' OR dependency_node_service_state.is_reachable = \'n\')' + . ') THEN 1 ELSE 0 END)' + ), + 'objects_unknown_unhandled' => new Expression( + 'SUM(CASE WHEN(' + . 'dependency_node.service_id IS NOT NULL AND dependency_node_service_state.soft_state = 3' + . ' AND (dependency_node_service_state.is_handled = \'n\' OR dependency_node_service_state.is_reachable = \'y\')' + . ') THEN 1 ELSE 0 END)' + ), + 'objects_pending' => new Expression( + 'SUM(CASE WHEN (dependency_node.service_id IS NOT NULL AND dependency_node_service_state.soft_state = 99)' + . 'OR (dependency_node.host_id IS NOT NULL AND dependency_node_host_state.soft_state = 99)' + //. 'OR (dependency_node.redundancy_group_id IS NOT NULL AND dependency_node_redundancy_group_state.failed = \'n\')' + . ' THEN 1 ELSE 0 END)' + ), + 'objects_total' => new Expression( + 'SUM(CASE WHEN dependency_node.id IS NOT NULL THEN 1 ELSE 0 END)' + ), + ]; + } + + public static function on(Connection $db): Query + { + $q = parent::on($db) + ->with([ + 'host', + 'host.state', + 'service', + 'service.state', + 'service.host', + 'service.host.state', + 'redundancy_group', + 'redundancy_group.state' + ]); + + $q->getSelectBase() + ->groupBy('dependency_node.id'); + + /** @var static $m */ + $m = $q->getModel(); + $q->columns($m->getSummaryColumns()); + + return $q; + } + + public function getColumns(): array + { + return array_merge(parent::getColumns(), $this->getSummaryColumns()); + } +}