mirror of
https://github.com/unraid/webgui.git
synced 2026-01-04 08:29:51 -06:00
133 lines
4.8 KiB
PHP
Executable File
133 lines
4.8 KiB
PHP
Executable File
#!/usr/bin/php -q
|
|
<?PHP
|
|
/* Copyright 2005-2023, Lime Technology
|
|
* Copyright 2012-2023, Bergware International.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License version 2,
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*/
|
|
?>
|
|
<?
|
|
$docroot = '/usr/local/emhttp';
|
|
$varroot = '/var/local/emhttp';
|
|
$md5_old = -1;
|
|
|
|
require_once "$docroot/webGui/include/Helpers.php";
|
|
require_once "$docroot/webGui/include/publish.php";
|
|
extract(parse_plugin_cfg('dynamix',true));
|
|
|
|
// add translations
|
|
$_SERVER['REQUEST_URI'] = 'dashboard';
|
|
$login_locale = _var($display,'locale');
|
|
require_once "$docroot/webGui/include/Translations.php";
|
|
|
|
// remember current language
|
|
$locale_init = $locale;
|
|
|
|
/* Parse the ini files */
|
|
$shares = parse_ini_file('state/shares.ini', true);
|
|
$disks = parse_ini_file('state/disks.ini', true);
|
|
|
|
function update_translation($locale) {
|
|
global $docroot,$language;
|
|
$language = [];
|
|
if ($locale) {
|
|
$text = "$docroot/languages/$locale/translations.txt";
|
|
if (file_exists($text)) {
|
|
$store = "$docroot/languages/$locale/translations.dot";
|
|
if (!file_exists($store)) file_put_contents($store,serialize(parse_lang_file($text)));
|
|
$language = unserialize(file_get_contents($store));
|
|
}
|
|
$text = "$docroot/languages/$locale/dashboard.txt";
|
|
if (file_exists($text)) {
|
|
$store = "$docroot/languages/$locale/dashboard.dot";
|
|
if (!file_exists($store)) file_put_contents($store,serialize(parse_lang_file($text)));
|
|
$language = array_merge($language,unserialize(file_get_contents($store)));
|
|
}
|
|
}
|
|
}
|
|
|
|
while (true) {
|
|
extract(parse_plugin_cfg('dynamix',true));
|
|
if (_var($display,'locale') != $locale_init) {
|
|
$locale_init = _var($display,'locale');
|
|
update_translation($locale_init);
|
|
}
|
|
unset($memory,$df,$fans,$lsof);
|
|
exec("awk '/^Mem(Total|Available)/{print $2*1024}' /proc/meminfo",$memory);
|
|
exec("df --output=pcent,used /boot /var/log /var/lib/docker 2>/dev/null|awk '(NR>1){print $1,$2*1024}'",$df);
|
|
exec("sensors -uA 2>/dev/null|grep -Po 'fan\d_input: \K\d+'",$fans);
|
|
[$total,$free] = $memory;
|
|
$used = $total-$free;
|
|
$names = [_('System'),_('Free')];
|
|
$bytes = $echo = [];
|
|
$hooks = array_filter(glob("/usr/local/emhttp/plugins/*/system/*",GLOB_NOSORT),function($file){return is_executable($file);});
|
|
foreach ($hooks as $hook) {
|
|
$data = @intval(exec(escapeshellarg($hook)));
|
|
if (!$data || $data>$used) continue;
|
|
$names[] = _(str_replace('_',' ',basename($hook))); // name of element
|
|
$bytes[] = $data; // value in bytes
|
|
}
|
|
// parse RAM graph
|
|
$a = 'ram';
|
|
$services = $used-array_sum($bytes);
|
|
$echo[$a][] = round(100*$used/$total)."%";
|
|
$echo[$a][] = my_scale($used,$unit,null,-1,1024)." $unit";
|
|
$echo[$a][] = round(100*$free/$total);
|
|
$echo[$a][] = my_scale($free,$unit,null,-1,1024)." $unit";
|
|
$echo[$a][] = round(100*$services/$total);
|
|
$echo[$a][] = my_scale($services,$unit,null,-1,1024)." $unit";
|
|
foreach ($bytes as $byte) {
|
|
// parse hook script information for RAM usage graph
|
|
$echo[$a][] = round(100*$byte/$total);
|
|
$echo[$a][] = my_scale($byte,$unit,null,-1,1024)." $unit";
|
|
}
|
|
// add element names
|
|
$echo['name'] = $names;
|
|
// parse the graphs for flash, log & docker
|
|
foreach ($df as $data) {
|
|
[$pcent,$used] = explode(' ',$data);
|
|
$echo['sys'][] = [$pcent,my_scale($used,$unit,null,-1,1024)." $unit"];
|
|
}
|
|
// add fans information
|
|
if (count($fans)) $echo['fan'] = array_map(function($fan){return "$fan RPM";},$fans);
|
|
|
|
// add streams information
|
|
/* Extract keys from both ini files */
|
|
$paths = array_keys($disks);
|
|
|
|
/* Validate and filter accessible mount points */
|
|
$valid_paths = array_filter($paths, function($key) {
|
|
$mnt_path = '/mnt/' . $key;
|
|
/* Check if the directory exists and is a valid mount point */
|
|
return is_dir($mnt_path) && trim((shell_exec("mountpoint -q " . escapeshellarg($mnt_path) . " && echo 1")) ?? '') === '1';
|
|
});
|
|
|
|
/* Construct the list of paths */
|
|
$mnt_paths = array_map(function($key) {
|
|
return '/mnt/'.escapeshellarg($key);
|
|
}, $valid_paths);
|
|
|
|
/* Combine paths into the command */
|
|
$mnt_list = implode(' ', $mnt_paths);
|
|
|
|
/* Build and execute the modified command */
|
|
$command = 'LANG="en_US.UTF8" timeout 3 lsof -Fn '.$mnt_list.' 2>/dev/null | awk -F/ \'$1=="n" && $2=="mnt" && $5!="" {print $4"/"$5"/"$6"/"$7}\' | sort -u | awk -F/ \'{print $1}\'';
|
|
exec($command, $lsof);
|
|
|
|
$share = array_keys($shares);
|
|
$count = array_count_values($lsof ?? array());
|
|
foreach ($share as $name) $echo['stream'][] = $count[$name]??0;
|
|
$echo = json_encode($echo);
|
|
$md5_new = md5($echo,true);
|
|
if ($md5_new !== $md5_old) {
|
|
$md5_old = publish('update1',$echo)!==false ? $md5_new : -1;
|
|
}
|
|
sleep(5);
|
|
}
|
|
?>
|