device_list: code optimization

This commit is contained in:
bergware
2023-12-16 05:11:47 +01:00
parent a0172d325c
commit 84ee6a909f

View File

@@ -82,7 +82,7 @@ function device_info(&$disk,$online) {
(_var($disk,'type')=='Cache' && $disk_status!='DISK_NP') ||
(_var($disk,'name')=='flash') || in_array(_var($disk,'name'),$pools) ||
_var($disk,'type')=='New' ? "<a href=\"".htmlspecialchars("/Main/Settings/$type?name=$name")."\">$fancy</a>" : $fancy;
return $view.$status.$luks.$link;
return $view.$status.$link;
}
function device_desc(&$disk) {
global $var;
@@ -387,9 +387,6 @@ while (true) {
$disks = (array)@parse_ini_file("$varroot/disks.ini",true);
$sec = (array)@parse_ini_file("$varroot/sec.ini",true);
$diskio = (array)@parse_ini_file("$varroot/diskload.ini");
$crypto = false;
$pools = pools_filter($disks);
$echo = [];
// check for language changes
extract(parse_plugin_cfg('dynamix',true));
if (_var($display,'locale') != $locale_init) {
@@ -417,51 +414,58 @@ while (true) {
}
}
// initialize stuff
$sum = initSum();
$Parity = $Data = $Cache = [];
$Flash = &$disks['flash'];
$crypto = false;
$echo = [];
foreach ($disks as $disk) {
if ($disk['type']=='Flash') continue;
${$disk['type']}[] = $disk;
$crypto |= _var($disk,'luksState',0)!=0 || vfs_luks(_var($disk,'fsType'));
}
$pools = array_unique(array_map('prefix',array_column($Cache,'name')));
$echo[0] = "array_devices\n";
$parity = parity_filter($disks);
$data = data_filter($disks);
foreach ($data as $disk) $crypto |= _var($disk,'luksState',0)!=0 || vfs_luks(_var($disk,'fsType'));
if (_var($var,'fsState')=='Stopped') {
foreach ($parity as $disk) $echo[0] .= array_offline($disk);
foreach ($Parity as $disk) $echo[0] .= array_offline($disk);
$echo[0] .= "<tr class='tr_last'><td colspan='10'></td></tr>";
foreach ($data as $disk) $echo[0] .= array_offline($disk);
foreach ($Data as $disk) $echo[0] .= array_offline($disk);
$echo[0] .= "<tr class='tr_last'><td>"._('Slots').":</td><td colspan='8'>".array_slots()."</td><td></td></tr>";
} else {
foreach ($parity as $disk) if ($disk['status']!='DISK_NP_DSBL') $echo[0] .= array_online($disk);
foreach ($data as $disk) $echo[0] .= array_online($disk);
foreach ($Parity as $disk) if ($disk['status']!='DISK_NP_DSBL') $echo[0] .= array_online($disk);
foreach ($Data as $disk) $echo[0] .= array_online($disk);
if (_var($display,'total') && _var($var,'mdNumDisks',0)>1) $echo[0] .= show_totals(sprintf(_('Array of %s devices'),my_word($var['mdNumDisks'])),true,'disk*');
}
$echo[1] = "boot_device\n";
$disk = &$disks['flash'];
$data = explode(' ',$diskio[_var($disk,'device')] ?? '0 0');
$data = explode(' ',$diskio[_var($Flash,'device')] ?? '0 0');
$flash = &$sec['flash'];
$share = (_var($var,'shareSMBEnabled')=='yes' && _var($flash,'export')=='e' && _var($flash,'security')=='public')
? "&nbsp;<a class='info'><i class='fa fa-warning fa-fw orange-text'></i><span>"._('Flash device is set as public share')."<br>"._('Please change share SMB security')."<br>"._('Click on **FLASH** above this message')."</span></a>"
: "";
$echo[1] .= "<tr>";
$echo[1] .= "<td>".device_info($disk,true).$share."</td>";
$echo[1] .= "<td>".device_desc($disk)."</td>";
$echo[1] .= "<td>".device_info($Flash,true).$share."</td>";
$echo[1] .= "<td>".device_desc($Flash)."</td>";
$echo[1] .= "<td>*</td>";
$echo[1] .= "<td><span class='diskio'>".my_diskio($data[0])."</span><span class='number'>".my_number(_var($disk,'numReads',0))."</span></td>";
$echo[1] .= "<td><span class='diskio'>".my_diskio($data[1])."</span><span class='number'>".my_number(_var($disk,'numWrites',0))."</span></td>";
$echo[1] .= "<td>".my_number(_var($disk,'numErrors',0))."</td>";
$echo[1] .= fs_info($disk);
$echo[1] .= "<td><span class='diskio'>".my_diskio($data[0])."</span><span class='number'>".my_number(_var($Flash,'numReads',0))."</span></td>";
$echo[1] .= "<td><span class='diskio'>".my_diskio($data[1])."</span><span class='number'>".my_number(_var($Flash,'numWrites',0))."</span></td>";
$echo[1] .= "<td>".my_number(_var($Flash,'numErrors',0))."</td>";
$echo[1] .= fs_info($Flash);
$echo[1] .= "</tr>";
$sum = initSum();
$cache = cache_filter($disks); $n = 2;
foreach ($cache as $disk) $crypto |= _var($disk,'luksState',0)!=0 || vfs_luks(_var($disk,'fsType'));
$n = 2;
foreach ($pools as $pool) {
$echo[$n] = "pool_device".($n-2)."\n";
$root = explode($_tilde_,$pool)[0];
$print = array_filter(array_column($cache,'name'),function($name) use ($pools,$root) {return in_array($name,$pools) && strncmp($root,$name,strlen($root))==0;});
$print = array_filter(array_column($Cache,'name'),function($name) use ($pools,$root) {return in_array($name,$pools) && strncmp($root,$name,strlen($root))==0;});
$print = end($print);
if (_var($var,'fsState')=='Stopped') {
$log = @parse_ini_file($pool_log) ?: [];
$off = false;
foreach ($cache as $disk) if (prefix(_var($disk,'name'))==$pool) {
foreach ($Cache as $disk) if (prefix(_var($disk,'name'))==$pool) {
$echo[$n] .= array_offline($disk,$pool);
$name = _var($disk,'name');
// tilde is not allowed in array key - replace it
@@ -469,10 +473,10 @@ while (true) {
if (isset($log[$named])) $off |= ($log[$named] != _var($disk,'id')); elseif ($named) $log[$named] = _var($disk,'id');
}
$data = []; foreach ($log as $key => $value) $data[] = "$key=\"$value\"";
$off &= !empty(_var($cache[$pool],'uuid'));
$off &= !empty(_var($Cache[$pool],'uuid'));
file_put_contents($pool_log,implode("\n",$data));
$echo[$n] .= "<tr class='tr_last'><td>"._('Slots').":</td><td colspan='8'><span class='slots'><span class='slots-left'>".cache_slots($off,$pool,_var($cache[$pool],'devicesSb'),_var($cache[$pool],'slots',0))."</span>";
$zfsPool = strstr(_var($cache[$pool],'fsType'),'zfs') && !isSubpool($pool);
$echo[$n] .= "<tr class='tr_last'><td>"._('Slots').":</td><td colspan='8'><span class='slots'><span class='slots-left'>".cache_slots($off,$pool,_var($Cache[$pool],'devicesSb'),_var($Cache[$pool],'slots',0))."</span>";
$zfsPool = strstr(_var($Cache[$pool],'fsType'),'zfs') && !isSubpool($pool);
if ($zfsPool) {
$current_subpools = array_filter($pools, function($element) use ($pool,$_tilde_) {return str_contains($element,"{$pool}{$_tilde_}");});
$current_subpools_list = str_replace("{$pool}{$_tilde_}","", implode(',', $current_subpools));
@@ -480,15 +484,15 @@ while (true) {
}
$echo[$n] .= "</span></td><td></td></tr>";
} else {
foreach ($cache as $disk) if (prefix($disk['name'])==$pool) {
foreach ($Cache as $disk) if (prefix($disk['name'])==$pool) {
$fstype = str_replace('luks:','',_var($disk,'fsType'));
if (substr(_var($cache[$pool],'fsStatus'),0,11)=='Unmountable' && empty($disk['fsStatus'])) $disk['fsStatus'] = _var($cache[$pool],'fsStatus');
if (substr(_var($Cache[$pool],'fsStatus'),0,11)=='Unmountable' && empty($disk['fsStatus'])) $disk['fsStatus'] = _var($Cache[$pool],'fsStatus');
$echo[$n] .= array_online($disk,$fstype);
}
if (strcmp($root,$pool)!=0) $cache[$root]['devices'] += $cache[$pool]['devices'];
if (strcmp($root,$pool)!=0) $Cache[$root]['devices'] += $Cache[$pool]['devices'];
if (strcmp($pool,$print)==0) {
delete_file($pool_log);
if (_var($display,'total') && _var($cache[$root],'devices',0)>1) $echo[$n] .= show_totals(sprintf(_('Pool of %s devices'),my_word($cache[$root]['devices'])),str_contains($pool,$_tilde_),"$root*");
if (_var($display,'total') && _var($Cache[$root],'devices',0)>1) $echo[$n] .= show_totals(sprintf(_('Pool of %s devices'),my_word($Cache[$root]['devices'])),str_contains($pool,$_tilde_),"$root*");
$sum = initSum();
}
}