summaryrefslogtreecommitdiffstats
path: root/library/Director/DirectorObject/Lookup/SingleServiceInfo.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--library/Director/DirectorObject/Lookup/SingleServiceInfo.php83
1 files changed, 83 insertions, 0 deletions
diff --git a/library/Director/DirectorObject/Lookup/SingleServiceInfo.php b/library/Director/DirectorObject/Lookup/SingleServiceInfo.php
new file mode 100644
index 0000000..af54fc7
--- /dev/null
+++ b/library/Director/DirectorObject/Lookup/SingleServiceInfo.php
@@ -0,0 +1,83 @@
+<?php
+
+namespace Icinga\Module\Director\DirectorObject\Lookup;
+
+use gipfl\IcingaWeb2\Url;
+use Icinga\Module\Director\Objects\IcingaHost;
+use Icinga\Module\Director\Objects\IcingaService;
+use Ramsey\Uuid\UuidInterface;
+
+/**
+ * A single service, directly attached to a Host Object. Overrides might
+ * still be used when use_var_overrides is true.
+ */
+class SingleServiceInfo implements ServiceInfo
+{
+ /** @var string */
+ protected $hostName;
+
+ /** @var string */
+ protected $serviceName;
+
+ /** @var bool */
+ protected $useOverrides;
+
+ /** @var UuidInterface */
+ protected $uuid;
+
+ public function __construct($hostName, $serviceName, UuidInterface $uuid, $useOverrides)
+ {
+ $this->hostName = $hostName;
+ $this->serviceName = $serviceName;
+ $this->useOverrides = $useOverrides;
+ $this->uuid = $uuid;
+ }
+
+ public static function find(IcingaHost $host, $serviceName)
+ {
+ $keyParams = [
+ 'host_id' => $host->get('id'),
+ 'object_name' => $serviceName
+ ];
+ $connection = $host->getConnection();
+ if (IcingaService::exists($keyParams, $connection)) {
+ $service = IcingaService::load($keyParams, $connection);
+ $useOverrides = $service->getResolvedVar('use_var_overrides') === 'y';
+
+ return new static($host->getObjectName(), $serviceName, $service->getUniqueId(), $useOverrides);
+ }
+
+ return false;
+ }
+
+ public function getHostName()
+ {
+ return $this->hostName;
+ }
+
+ public function getName()
+ {
+ return $this->serviceName;
+ }
+
+ /**
+ * @return UuidInterface
+ */
+ public function getUuid()
+ {
+ return $this->uuid;
+ }
+
+ public function getUrl()
+ {
+ return Url::fromPath('director/service/edit', [
+ 'host' => $this->hostName,
+ 'name' => $this->serviceName,
+ ]);
+ }
+
+ public function requiresOverrides()
+ {
+ return $this->useOverrides;
+ }
+}