icingaweb2/modules/monitoring/library/Monitoring/Object/AbstractObject.php

173 lines
4.4 KiB
PHP
Raw Normal View History

2013-07-12 14:33:17 +02:00
<?php
namespace Icinga\Module\Monitoring\Object;
2013-07-12 14:33:17 +02:00
use Icinga\Data\BaseQuery as Query;
use \Icinga\Module\Monitoring\Backend;
use Icinga\Module\Monitoring\DataView\Contact;
use Icinga\Module\Monitoring\DataView\Contactgroup;
use Icinga\Module\Monitoring\DataView\Downtime;
use Icinga\Module\Monitoring\DataView\EventHistory;
use Icinga\Module\Monitoring\DataView\Hostgroup;
use Icinga\Module\Monitoring\DataView\HostStatus;
use Icinga\Module\Monitoring\DataView\Comment;
use Icinga\Module\Monitoring\DataView\Servicegroup;
use Icinga\Module\Monitoring\DataView\ServiceStatus;
use Icinga\Web\Request;
2013-07-12 14:33:17 +02:00
abstract class AbstractObject
{
const TYPE_HOST = 1;
const TYPE_SERVICE = 2;
2013-07-12 14:33:17 +02:00
public $type = self::TYPE_HOST;
public $prefix = 'host_';
2013-07-12 14:33:17 +02:00
public $comments = array();
public $downtimes = array();
public $hostgroups = array();
public $servicegroups = array();
public $contacts = array();
public $contactgroups = array();
public $customvars = array();
public $events = array();
2013-07-12 14:33:17 +02:00
private $request = null;
2013-07-12 14:33:17 +02:00
public function __construct(Request $request)
2013-07-12 14:33:17 +02:00
{
$this->request = $request;
$properties = $this->getProperties();
if ($properties) {
foreach ($properties as $key => $value) {
$this->$key = $value;
}
}
2013-07-12 14:33:17 +02:00
}
abstract protected function getProperties();
2013-07-12 14:33:17 +02:00
public function fetchComments()
2013-07-12 14:33:17 +02:00
{
$this->comments = Comment::fromRequest(
$this->request,
array(
'comment_internal_id',
'comment_timestamp',
'comment_author',
'comment_data',
'comment_type',
)
)->getQuery()
->where('comment_objecttype_id', 1)
->fetchAll();
2013-07-12 14:33:17 +02:00
return $this;
2013-07-12 14:33:17 +02:00
}
public function fetchDowntimes()
2013-07-12 14:33:17 +02:00
{
$this->downtimes = Downtime::fromRequest($this->request)->getQuery()->fetchAll();
2013-07-12 14:33:17 +02:00
return $this;
}
public function fetchHostgroups()
2013-07-12 14:33:17 +02:00
{
$this->hostgroups = Hostgroup::fromRequest(
$this->request,
array(
'hostgroup_name',
'hostgroup_alias'
2013-10-15 12:48:33 +02:00
)
)->getQuery()->fetchPairs();
2013-07-12 14:33:17 +02:00
return $this;
}
public function fetchContacts()
2013-07-12 14:33:17 +02:00
{
$this->contacts = Contact::fromRequest(
$this->request,
array(
'contact_name',
'contact_alias',
'contact_email',
'contact_pager',
2013-10-15 12:48:33 +02:00
)
)->getQuery()
->where('host_name', $this->host_name)
->fetchAll();
2013-07-12 14:33:17 +02:00
return $this;
}
public function fetchServicegroups()
2013-07-12 14:33:17 +02:00
{
$this->servicegroups = Servicegroup::fromRequest(
$this->request,
array(
'servicegroup_name',
'servicegroup_alias',
2013-10-15 12:48:33 +02:00
)
)->getQuery()->fetchPairs();
2013-07-12 14:33:17 +02:00
return $this;
}
public function fetchContactgroups()
2013-07-12 14:33:17 +02:00
{
$this->contactgroups = Contactgroup::fromRequest(
$this->request,
array(
'contactgroup_name',
'contactgroup_alias'
2013-10-15 12:48:33 +02:00
)
)->getQuery()->fetchAll();
2013-07-12 14:33:17 +02:00
return $this;
}
public function fetchEventHistory()
2013-07-12 14:33:17 +02:00
{
$this->eventhistory = EventHistory::fromRequest(
$this->request,
array(
'object_type',
'host_name',
'service_description',
'timestamp',
'raw_timestamp',
'state',
'attempt',
'max_attempts',
'output',
'type'
)
)->sort('timestamp', 'DESC')->getQuery();
2013-07-12 14:33:17 +02:00
return $this;
}
public function __get($param)
2013-07-12 14:33:17 +02:00
{
if (substr($param, 0, strlen($this->prefix)) === $this->prefix) {
return false;
}
$expandedName = $this->prefix . strtolower($param);
return $this->$expandedName;
2013-07-12 14:33:17 +02:00
}
public function getRequest()
{
return $this->request;
}
abstract public function populate();
public static function fromRequest(Request $request)
{
if ($request->has('service') && $request->has('host')) {
return new Service($request);
2013-10-17 21:40:02 +02:00
} elseif ($request->has('host')) {
return new Host($request);
}
}
2013-07-12 14:33:17 +02:00
}