From 84ee6a909f6f77c54f1cfb34519bc9901fdeb57d Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 16 Dec 2023 05:11:47 +0100 Subject: [PATCH] device_list: code optimization --- emhttp/plugins/dynamix/nchan/device_list | 64 +++++++++++++----------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/emhttp/plugins/dynamix/nchan/device_list b/emhttp/plugins/dynamix/nchan/device_list index b5fc3dcc5..9b8ec3f70 100755 --- a/emhttp/plugins/dynamix/nchan/device_list +++ b/emhttp/plugins/dynamix/nchan/device_list @@ -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' ? "$fancy" : $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] .= ""; - foreach ($data as $disk) $echo[0] .= array_offline($disk); + foreach ($Data as $disk) $echo[0] .= array_offline($disk); $echo[0] .= ""._('Slots').":".array_slots().""; } 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') ? " "._('Flash device is set as public share')."
"._('Please change share SMB security')."
"._('Click on **FLASH** above this message')."
" : ""; $echo[1] .= ""; - $echo[1] .= "".device_info($disk,true).$share.""; - $echo[1] .= "".device_desc($disk).""; + $echo[1] .= "".device_info($Flash,true).$share.""; + $echo[1] .= "".device_desc($Flash).""; $echo[1] .= "*"; - $echo[1] .= "".my_diskio($data[0])."".my_number(_var($disk,'numReads',0)).""; - $echo[1] .= "".my_diskio($data[1])."".my_number(_var($disk,'numWrites',0)).""; - $echo[1] .= "".my_number(_var($disk,'numErrors',0)).""; - $echo[1] .= fs_info($disk); + $echo[1] .= "".my_diskio($data[0])."".my_number(_var($Flash,'numReads',0)).""; + $echo[1] .= "".my_diskio($data[1])."".my_number(_var($Flash,'numWrites',0)).""; + $echo[1] .= "".my_number(_var($Flash,'numErrors',0)).""; + $echo[1] .= fs_info($Flash); $echo[1] .= ""; $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] .= ""._('Slots').":".cache_slots($off,$pool,_var($cache[$pool],'devicesSb'),_var($cache[$pool],'slots',0)).""; - $zfsPool = strstr(_var($cache[$pool],'fsType'),'zfs') && !isSubpool($pool); + $echo[$n] .= ""._('Slots').":".cache_slots($off,$pool,_var($Cache[$pool],'devicesSb'),_var($Cache[$pool],'slots',0)).""; + $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] .= ""; } 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(); } }