mirror of
https://github.com/Icinga/icingadb-web.git
synced 2026-04-23 23:28:51 -04:00
145 lines
3.5 KiB
PHP
145 lines
3.5 KiB
PHP
<?php
|
|
|
|
/* Icinga DB Web | (c) 2020 Icinga GmbH | GPLv2 */
|
|
|
|
namespace Icinga\Module\Icingadb\Compat;
|
|
|
|
use Icinga\Application\Config;
|
|
use Icinga\Exception\NotImplementedError;
|
|
use Icinga\Module\Icingadb\Common\Auth;
|
|
use Icinga\Module\Icingadb\Common\Database;
|
|
use Icinga\Module\Icingadb\Model\Customvar;
|
|
use Icinga\Module\Icingadb\Model\Host;
|
|
use Icinga\Module\Icingadb\Model\Service;
|
|
use Icinga\Module\Monitoring\Object\MonitoredObject;
|
|
use InvalidArgumentException;
|
|
use ipl\Orm\Model;
|
|
|
|
use function ipl\Stdlib\get_php_type;
|
|
|
|
trait CompatObject
|
|
{
|
|
use Auth;
|
|
use Database;
|
|
|
|
private $defaultLegacyColumns = [
|
|
'flap_detection_enabled' => 'flapping_enabled'
|
|
];
|
|
|
|
/** @var Model $object */
|
|
private $object;
|
|
|
|
public function __construct(Model $object)
|
|
{
|
|
$this->object = $object;
|
|
|
|
$this->legacyColumns = $this->legacyColumns + $this->defaultLegacyColumns;
|
|
}
|
|
|
|
public static function fromModel(Model $object)
|
|
{
|
|
switch (true) {
|
|
case $object instanceof Host:
|
|
return new CompatHost($object);
|
|
case $object instanceof Service:
|
|
return new CompatService($object);
|
|
default:
|
|
throw new InvalidArgumentException(sprintf(
|
|
'Host or Service Model instance expected, got "%s" instead.',
|
|
get_php_type($object)
|
|
));
|
|
}
|
|
}
|
|
|
|
public function getActionUrls()
|
|
{
|
|
$actionUrl = $this->object->action_url;
|
|
|
|
if ($actionUrl === null) {
|
|
return [];
|
|
}
|
|
|
|
return $this->resolveAllStrings(
|
|
MonitoredObject::parseAttributeUrls($actionUrl->action_url)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get this object's name
|
|
*
|
|
* @return string
|
|
*/
|
|
public function getName()
|
|
{
|
|
return $this->object->name;
|
|
}
|
|
|
|
public function getNotesUrls()
|
|
{
|
|
$notesUrl = $this->object->notes_url;
|
|
|
|
if ($notesUrl === null) {
|
|
return [];
|
|
}
|
|
|
|
return $this->resolveAllStrings(
|
|
MonitoredObject::parseAttributeUrls($notesUrl->notes_url)
|
|
);
|
|
}
|
|
|
|
public function fetchCustomvars()
|
|
{
|
|
$query = Customvar::on($this->getDb())
|
|
->columns(['name', 'value'])
|
|
->with($this->type);
|
|
$query->getSelectBase()->where(['customvar_' . $this->type . '.id = ?' => $this->object->id]);
|
|
|
|
$vars = new CustomvarFilter(
|
|
$query->execute(),
|
|
$this->type,
|
|
$this->getAuth()->getRestrictions('monitoring/blacklist/properties'),
|
|
Config::module('monitoring')->get('security', 'protected_customvars', '')
|
|
);
|
|
|
|
$customvars = [];
|
|
foreach ($vars as $row) {
|
|
$customvars[$row->name] = $row->value;
|
|
}
|
|
|
|
$this->object->customvars = $customvars;
|
|
return $this;
|
|
}
|
|
|
|
public function __get($name)
|
|
{
|
|
if (isset($this->legacyColumns[$name])) {
|
|
$name = $this->legacyColumns[$name];
|
|
}
|
|
|
|
if (is_array($name)) {
|
|
$value = $this->object;
|
|
|
|
do {
|
|
$col = array_shift($name);
|
|
$value = $value->$col;
|
|
} while (! empty($name));
|
|
} else {
|
|
$value = $this->object->$name;
|
|
}
|
|
|
|
return $value;
|
|
}
|
|
|
|
public function __isset($name)
|
|
{
|
|
return isset($this->object->$name);
|
|
}
|
|
|
|
/**
|
|
* @throws NotImplementedError Don't use!
|
|
*/
|
|
protected function getDataView()
|
|
{
|
|
throw new NotImplementedError('getDataView() is not supported');
|
|
}
|
|
}
|