summaryrefslogtreecommitdiffstats
path: root/library/Director/Monitoring.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Director/Monitoring.php')
-rw-r--r--library/Director/Monitoring.php149
1 files changed, 0 insertions, 149 deletions
diff --git a/library/Director/Monitoring.php b/library/Director/Monitoring.php
deleted file mode 100644
index f5d4108..0000000
--- a/library/Director/Monitoring.php
+++ /dev/null
@@ -1,149 +0,0 @@
-<?php
-
-namespace Icinga\Module\Director;
-
-use Icinga\Application\Icinga;
-use Icinga\Authentication\Auth;
-use Icinga\Data\Filter\Filter;
-use Icinga\Module\Monitoring\Backend\MonitoringBackend;
-
-class Monitoring
-{
- protected $backend;
-
- public function __construct()
- {
- $app = Icinga::app();
- $modules = $app->getModuleManager();
- if (!$modules->hasLoaded('monitoring') && $app->isCli()) {
- $app->getModuleManager()->loadEnabledModules();
- }
-
- if ($modules->hasLoaded('monitoring')) {
- $this->backend = MonitoringBackend::instance();
- }
- }
-
- public function isAvailable()
- {
- return $this->backend !== null;
- }
-
- public function hasHost($hostname)
- {
- return $this->backend->select()->from('hostStatus', [
- 'hostname' => 'host_name',
- ])->where('host_name', $hostname)->fetchOne() === $hostname;
- }
-
- public function hasService($hostname, $service)
- {
- return (array) $this->prepareServiceKeyColumnQuery($hostname, $service)->fetchRow() === [
- 'hostname' => $hostname,
- 'service' => $service,
- ];
- }
-
- public function authCanEditHost(Auth $auth, $hostname)
- {
- if ($auth->hasPermission('director/monitoring/hosts')) {
- $restriction = null;
- foreach ($auth->getRestrictions('director/monitoring/rw-object-filter') as $restriction) {
- if ($this->hasHostWithExtraFilter($hostname, Filter::fromQueryString($restriction))) {
- return true;
- }
- }
- if ($restriction === null) {
- return $this->hasHost($hostname);
- }
- }
-
- return false;
- }
-
- public function authCanEditService(Auth $auth, $hostname, $service)
- {
- if ($hostname === null || $service === null) {
- // TODO: UUID support!
- return false;
- }
- if ($auth->hasPermission('director/monitoring/services')) {
- $restriction = null;
- foreach ($auth->getRestrictions('director/monitoring/rw-object-filter') as $restriction) {
- if ($this->hasServiceWithExtraFilter($hostname, $service, Filter::fromQueryString($restriction))) {
- return true;
- }
- }
- if ($restriction === null) {
- return $this->hasService($hostname, $service);
- }
- }
-
- return false;
- }
-
- public function hasHostWithExtraFilter($hostname, Filter $filter)
- {
- return $this->backend->select()->from('hostStatus', [
- 'hostname' => 'host_name',
- ])->where('host_name', $hostname)->applyFilter($filter)->fetchOne() === $hostname;
- }
-
- public function hasServiceWithExtraFilter($hostname, $service, Filter $filter)
- {
- return (array) $this
- ->prepareServiceKeyColumnQuery($hostname, $service)
- ->applyFilter($filter)
- ->fetchRow() === [
- 'hostname' => $hostname,
- 'service' => $service,
- ];
- }
-
- public function getHostState($hostname)
- {
- $hostStates = [
- '0' => 'up',
- '1' => 'down',
- '2' => 'unreachable',
- '99' => 'pending',
- ];
-
- $query = $this->backend->select()->from('hostStatus', [
- 'hostname' => 'host_name',
- 'state' => 'host_state',
- 'problem' => 'host_problem',
- 'acknowledged' => 'host_acknowledged',
- 'in_downtime' => 'host_in_downtime',
- 'output' => 'host_output',
- ])->where('host_name', $hostname);
-
- $res = $query->fetchRow();
- if ($res === false) {
- $res = (object) [
- 'hostname' => $hostname,
- 'state' => '99',
- 'problem' => '0',
- 'acknowledged' => '0',
- 'in_downtime' => '0',
- 'output' => null,
- ];
- }
-
- $res->state = $hostStates[$res->state];
-
- return $res;
- }
-
- protected function prepareServiceKeyColumnQuery($hostname, $service)
- {
- return $this->backend
- ->select()
- ->from('serviceStatus', [
- 'hostname' => 'host_name',
- 'service' => 'service_description',
- ])
- ->where('host_name', $hostname)
- ->where('service_description', $service);
- }
-}