'hosts_total', 'hosts_down' => 'hosts_down_handled + f.hosts_down_unhandled', 'hosts_unhandled_down' => 'hosts_down_unhandled', 'hosts_unreachable' => 'hosts_unreachable', 'hosts_unhandled_unreachable' => 'hosts_unreachable_unhandled' ]; } public function createDimension($name) { $this->registerAvailableDimensions(); if (isset($this->availableDimensions[$name])) { return clone $this->availableDimensions[$name]; } return new CustomVariableDimension($name); } public function listAvailableDimensions() { $db = $this->getDb(); $query = CustomvarFlat::on($db); $this->applyRestrictions($query); $query ->columns('flatname') ->orderBy('flatname') ->filter(Filter::like('host.id', '*')); $query->getSelectBase()->groupBy('flatname'); $dimensions = []; foreach ($query as $row) { // Replaces array index notations with [*] to get results for arbitrary indexes $name = preg_replace('/\\[\d+](?=\\.|$)/', '[*]', $row->flatname); $dimensions[$name] = $name; } return $dimensions; } public function prepareInnerQuery() { $query = HoststateSummary::on($this->getDb()); $query->columns(array_diff_key($query->getModel()->getColumns(), (new Host())->getColumns())); $query->disableDefaultSort(); $this->applyRestrictions($query); $this->innerQuery = $query; return $this->innerQuery; } /** * Return Filter for Hosts cube. * * @return Filter\Any|Filter\Chain */ public function getObjectsFilter() { if ($this->objectsFilter === null) { $this->finalizeInnerQuery(); $hosts = $this->innerQuery()->columns(['host' => 'host.name']); $hosts->getSelectBase()->resetGroupBy(); $filter = Filter::any(); foreach ($hosts as $object) { $filter->add(Filter::equal('host.name', $object->host)); } $this->objectsFilter = $filter; } return $this->objectsFilter; } }