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

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 <<
+
+
+
+ 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", "SWAG Dashboard", $goaccess);
+ $goaccess = str_replace("", "", $goaccess);
+ $goaccess = str_replace("", "
SWAG ", $goaccess);
+ $goaccess = preg_replace("/()/", "", $goaccess);
+ return $goaccess;
+ }
+
+ $goaccess = GetGoaccess();
+ $status = GetHeader() . GetProxies() . GetF2B() . GetTemplates() . GetAnnouncements() . GetLinks() . '';
$page = str_replace("
", $status, $goaccess);
- $page = str_replace("
Server Statistics", "SWAG Dashboard", $page);
- $page = str_replace("", "", $page);
- $page = str_replace("", "
SWAG ", $page);
- $page = preg_replace("/()/", "", $page);
echo $page;
?>