diff --git a/.assets/example.png b/.assets/example.png index 7efed25..4ecc6f1 100644 Binary files a/.assets/example.png and b/.assets/example.png differ diff --git a/README.md b/README.md index cb9f54c..8a8dd2b 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Navigate to `dashboard.domain.com` from your LAN to view the dashboard. set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port; ``` -- [Swag Maxmind mod](https://github.com/linuxserver/docker-mods/tree/swag-maxmind) is required to enable the geo location graph +- Either [Swag Maxmind mod](https://github.com/linuxserver/docker-mods/tree/swag-maxmind) or [Swag DBIP mod](https://github.com/linuxserver/docker-mods/tree/swag-dbip) are required to enable the geo location graph. # Example ![Example](.assets/example.png) diff --git a/root/dashboard/www/index.php b/root/dashboard/www/index.php index 777ffda..c99fa1d 100644 --- a/root/dashboard/www/index.php +++ b/root/dashboard/www/index.php @@ -85,7 +85,7 @@ } function GetF2B() { - $output = exec("python3 /dashboard/swag-f2b.py"); + $output = shell_exec("python3 /dashboard/swag-f2b.py"); $jails = json_decode($output, true); $status = ""; $index = 0; @@ -119,6 +119,41 @@ HTML; } + function GetTemplates() { + $tooltip = ""; + $files = ""; + $counter = 1; + $output = shell_exec("/etc/cont-init.d/70-templates"); + foreach(explode(PHP_EOL, $output) as $line) { + if(substr($line, 0, 1) === "*"){ + $tooltip .= str_replace("*", "", $line)." "; + } elseif(substr($line, 0, 1) === "/") { + $tr_class = ($counter % 2 == 0) ? 'shaded' : ''; + $files .= ''.htmlspecialchars($line).''; + $file_name = substr($line, strrpos($line, '/') + 1); + $files .= '📝'; + $counter++; + } + } + if(empty($files)) { + return ""; + } + return << +
+

Version Updates

+ + + {$files} + +
+
+
+
+ + HTML; + } + function GetAnnouncements() { $feed_url = 'https://info.linuxserver.io/index.xml'; $max_entries = 8; @@ -173,13 +208,29 @@ HTML; } - $geodb = file_exists('/config/geoip2db/GeoLite2-City.mmdb') ? '--geoip-database=/config/geoip2db/GeoLite2-City.mmdb' : ''; - $goaccess = shell_exec("/usr/local/bin/goaccess -a -o html --config-file=/dashboard/goaccess.conf ".$geodb); - $status = GetHeader() . GetProxies() . GetF2B() . GetAnnouncements() . GetLinks() . '
'; + function GetGoaccess() { + $dbip = '/config/geoip2db/dbip-country-lite.mmdb'; + $maxmind = '/config/geoip2db/GeoLite2-City.mmdb'; + if (file_exists($dbip) and file_exists($maxmind)): + $geodb = (filemtime($dbip) > filemtime($maxmind)) ? '--geoip-database='.$dbip : '--geoip-database='.$maxmind; + elseif (file_exists($dbip)): + $geodb = '--geoip-database='.$dbip; + elseif (file_exists($maxmind)): + $geodb = '--geoip-database='.$maxmind; + else: + $geodb = ''; + endif; + + $goaccess = shell_exec("/usr/local/bin/goaccess -a -o html --config-file=/dashboard/goaccess.conf ".$geodb); + $goaccess = str_replace("Server Statistics", "<title>SWAG Dashboard", $goaccess); + $goaccess = str_replace("<h1 class='h-dashboard'>", "<h1>", $goaccess); + $goaccess = str_replace("<i class='fa fa-tachometer'></i>", "<img src='/icon.svg' width='32' height='32'> SWAG ", $goaccess); + $goaccess = preg_replace("/(<link rel='icon' )(.*?)(>)/", "<link rel='icon' type='image/svg+xml' href='/icon.svg'>", $goaccess); + return $goaccess; + } + + $goaccess = GetGoaccess(); + $status = GetHeader() . GetProxies() . GetF2B() . GetTemplates() . GetAnnouncements() . GetLinks() . '<div class="wrap-general">'; $page = str_replace("<div class='wrap-general'>", $status, $goaccess); - $page = str_replace("<title>Server Statistics", "<title>SWAG Dashboard", $page); - $page = str_replace("<h1 class='h-dashboard'>", "<h1>", $page); - $page = str_replace("<i class='fa fa-tachometer'></i>", "<img src='/icon.svg' width='32' height='32'> SWAG ", $page); - $page = preg_replace("/(<link rel='icon' )(.*?)(>)/", "<link rel='icon' type='image/svg+xml' href='/icon.svg'>", $page); echo $page; ?>