Browse Source

added settings page for kuma

Henry Whitaker 2 years ago
parent
commit
ba3f1b67cd
3 changed files with 101 additions and 0 deletions
  1. 8 0
      api/classes/organizr.class.php
  2. 93 0
      api/homepage/uptime_kuma.php
  3. BIN
      plugins/images/tabs/kuma.png

+ 8 - 0
api/classes/organizr.class.php

@@ -64,6 +64,7 @@ class Organizr
 	use UnifiHomepageItem;
 	use WeatherHomepageItem;
 	use uTorrentHomepageItem;
+	use UptimeKumaHomepageItem;
 
 	// ===================================
 	// Organizr Version
@@ -4693,6 +4694,13 @@ class Organizr
 						$class .= ' faded';
 					}
 					break;
+				case 'homepageOrderUptimeKuma':
+					$class = 'bg-info';
+					$image = 'plugins/images/tabs/kuma.png';
+					if (!$this->config['homepageUptimeKumaEnabled']) {
+						$class .= ' faded';
+					}
+					break;
 				case 'homepageOrderWeatherAndAir':
 					$class = 'bg-success';
 					$image = 'plugins/images/tabs/wind.png';

+ 93 - 0
api/homepage/uptime_kuma.php

@@ -0,0 +1,93 @@
+<?php
+
+trait UptimeKumaHomepageItem
+{
+	public function uptimeKumaSettingsArray($infoOnly = false)
+	{
+		$homepageInformation = [
+			'name' => 'Uptime Kuma',
+			'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'),
+				],
+			]
+		];
+		return array_merge($homepageInformation, $homepageSettings);
+	}
+
+	public function uptimeKumaHomepagePermissions($key = null)
+	{
+		$permissions = [
+			'main' => [
+				'enabled' => [
+					'homepageUptimeKumaEnabled'
+				],
+				'auth' => [
+					'homepageUptimeKumaAuth'
+				],
+				'not_empty' => [
+					'uptimeKumaURL'
+				]
+			]
+		];
+		return $this->homepageCheckKeyPermissions($key, $permissions);
+	}
+
+	public function homepageOrderUptimeKuma()
+	{
+		if ($this->homepageItemPermissions($this->uptimeKumaHomepagePermissions('main'))) {
+			return '
+				<div id="' . __FUNCTION__ . '">
+					<div class="white-box homepage-loading-box"><h2 class="text-center" lang="en">Loading Uptime Kuma...</h2></div>
+					<script>
+						// Uptime Kuma
+						homepageUptimeKuma("' . $this->config['homepageUptimeKumaRefresh'] . '");
+						// End Uptime Kuma
+					</script>
+				</div>
+				';
+		}
+	}
+
+	public function getUptimeKumaHomepageData()
+	{
+		if (!$this->homepageItemPermissions($this->uptimeKumaHomepagePermissions('main'), true)) {
+			return false;
+		}
+		$api = [];
+		$url = $this->qualifyURL($this->config['uptimeKumaURL']);
+		$dataUrl = $url . '/assets/php/loop.php';
+		try {
+			$options = $this->requestOptions($url, $this->config['homepageUptimeKumaRefresh']);
+			$response = Requests::get($dataUrl, ['Token' => $this->config['organizrAPI']], $options);
+			
+		} catch (Requests_Exception $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;
+	}
+}

BIN
plugins/images/tabs/kuma.png