mirror of
https://github.com/unraid/webgui.git
synced 2026-05-08 05:12:14 -05:00
408331edf5
Keep track of the md5 within a separate function. Avoids duplication of code on the nchan scripts, and allows for the script to still exit if no listeners without adding in more code within each script to handle this.
131 lines
4.8 KiB
PHP
Executable File
131 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);
|
|
publish_md5('update1',$echo,true);
|
|
|
|
sleep(5);
|
|
}
|
|
?>
|