loadMe(); $this->layout()->set("me", $me); $this->me = $me; if (!$this->me->isAdmin()) { $this->redirect("dashboard"); } // $this->zabbix = new Zabbix($this->ZABBIX_API_URL, $this->ZABBIX_API_KEY); } protected function indexAction(): void { $this->layout()->setTemplate("DocumentationCheck/DeviceTest"); } protected function apiAction() { $do = $this->request->do; if (!$this->me->isAdmin()) { $this->redirect("dashboard"); } switch ($do) { case "getDocumentationFails": $return = $this->getDocumentationFails(); break; default: $return = false; break; } if (!$return) { $return = [ "status" => "error", "message" => "Invalid request." ]; } die(json_encode($return)); } private function getDocumentationFails(): array { $icmpItems = $this->zabbix->getICMPItems([]); $zabbixICMPItems = []; foreach ($icmpItems as $item) { if (!isset($zabbixICMPItems[$item['hostid']])) { $zabbixICMPItems[$item['hostid']] = []; } $zabbixICMPItems[$item['hostid']][] = $item; } $zabbixHostIPToId = []; $zabbixHostNameToId = []; $zabbixHosts = []; foreach ($this->zabbix->getHosts("") as $host) { $zabbixHostIPToId[$host['host']] = $host['hostid']; $zabbixHostNameToId[$host['name']] = $host['hostid']; $zabbixHosts[$host['hostid']] = $host; } $devices = DeviceModel::getAll(); //loop through all devices and join them by either IP or hostname and then return {device, zabbixHost} $hosts = []; foreach ($devices as $device) { $deviceIP = $device->ip; $deviceHostname = $device->name; $zabbixHost = null; if (isset($zabbixHostIPToId[$deviceIP])) { $zabbixHost = $zabbixHosts[$zabbixHostIPToId[$deviceIP]]; } else if (isset($zabbixHostNameToId[$deviceHostname])) { $zabbixHost = $zabbixHosts[$zabbixHostNameToId[$deviceHostname]]; } $hosts[] = [ "zabbixHostId" => $zabbixHost['hostid'], "zabbixHostName" => $zabbixHost['name'], "zabbixHostIP" => $zabbixHost['host'], "deviceName" => $device->name, "deviceIP" => $device->ip, "checkDeviceInZabbix" => $zabbixHost !== null, "checkDeviceHasICMPPing" => isset($zabbixICMPItems[$zabbixHost['hostid']]), "checkDeviceHasSameName" => $zabbixHost['name'] === $device->name, "checkDeviceHasSameIP" => $zabbixHost['host'] === $device->ip // "raw" => [ // "zabbixHost" => $zabbixHost, // "device" => $device->toArray() // ] ]; } return [ "status" => "success", "rows" => $hosts ]; } }