'UptimeKuma', 'enabled' => true, 'image' => 'plugins/images/tabs/kuma.png', 'category' => 'Monitor', 'settingsArray' => __FUNCTION__ ]; if ($infoOnly) { return $homepageInformation; } $homepageSettings = [ 'debug' => true, 'settings' => [ 'Enable' => [ $this->settingsOption('enable', 'homepageUptimeKumaEnabled'), $this->settingsOption('auth', 'homepageUptimeKumaAuth'), ], 'Connection' => [ $this->settingsOption('url', 'uptimeKumaURL', ['help' => 'URL for Uptime Kuma e.g. http://kuma:3001 (no trailing slash)', 'placeholder' => 'http://kuma:3001']), $this->settingsOption('token', 'uptimeKumaToken'), ], 'Options' => [ $this->settingsOption('refresh', 'homepageUptimeKumaRefresh'), $this->settingsOption('title', 'homepageUptimeKumaHeader'), $this->settingsOption('toggle-title', 'homepageUptimeKumaHeaderToggle'), $this->settingsOption('switch', 'homepageUptimeKumaCompact', ['label' => 'Compact view', 'help' => 'Toggles the compact view of this homepage module']), $this->settingsOption('switch', 'homepageUptimeKumaShowLatency', ['label' => 'Show monitor latency']), ], ] ]; return array_merge($homepageInformation, $homepageSettings); } public function uptimeKumaHomepagePermissions($key = null) { $permissions = [ 'main' => [ 'enabled' => [ 'homepageUptimeKumaEnabled' ], 'auth' => [ 'homepageUptimeKumaAuth' ], 'not_empty' => [ 'uptimeKumaURL', 'uptimeKumaToken', ] ] ]; return $this->homepageCheckKeyPermissions($key, $permissions); } public function homepageOrderUptimeKuma() { if ($this->homepageItemPermissions($this->uptimeKumaHomepagePermissions('main'))) { return '

Loading Uptime Kuma...

'; } } public function getUptimeKumaHomepageData() { if (!$this->homepageItemPermissions($this->uptimeKumaHomepagePermissions('main'), true)) { return false; } $api = []; $url = $this->qualifyURL($this->config['uptimeKumaURL']); try { $metrics = (new UptimeKumaMetrics( $this->getKumaClient($url, $this->config['uptimeKumaToken']) ->get('/metrics') ->getBody() ->getContents() ))->process(); $api = [ 'data' => $metrics->getMonitors(), 'options' => [ 'title' => $this->config['homepageUptimeKumaHeader'], 'titleToggle' => $this->config['homepageUptimeKumaHeaderToggle'], 'compact' => $this->config['homepageUptimeKumaCompact'], 'showLatency' => $this->config['homepageUptimeKumaShowLatency'], ] ]; } catch (GuzzleException $e) { $this->setLoggerChannel('UptimeKuma')->error($e); $this->setAPIResponse('error', $e->getMessage(), 401); return false; }; $api = isset($api) ? $api : false; $this->setAPIResponse('success', null, 200, $api); return $api; } private function getKumaClient(string $url, string $token): Client { if (!isset(static::$kumaClient)) { static::$kumaClient = new Client([ 'base_uri' => $url, 'headers' => [ 'Authorization' => sprintf("Basic %s", base64_encode(':'.$token)), ], ]); } return static::$kumaClient; } }