device_list: move encryption indicator to FS column

This commit is contained in:
bergware
2023-12-16 01:30:04 +01:00
parent 33edf59bc7
commit 734be0ba3c

View File

@@ -44,20 +44,20 @@ function my_power($power) {
return _var($display,'power') && $power ? ' / '.number_format($power,$power<10?2:1,$number[0]).' '._('W') : '';
}
function device_info(&$disk,$online) {
global $pools, $var, $crypto;
global $pools, $var;
if (!$online || _var($disk,'fsStatus')!='Mounted' || (in_array(_var($disk,'type'),['Parity','Cache']) && (!in_array(_var($disk,'name'),$pools) || isSubpool(_var($disk,'name'))))) {
$view = "<a class='view'></a>";
} else {
$dir = _var($disk,'name')=='flash' ? "/boot" : "/mnt/"._var($disk,'name');
$view = "<a class='view' href=\"/Main/Browse?dir=".htmlspecialchars($dir)."\"><i class=\"icon-u-tab\" title=\""._('Browse')." $dir\"></i></a>";
}
$name = _var($disk,'name');
$named = no_tilde($name);
$fancy = _(my_disk(native($name,1)),3);
$type = _var($disk,'type')=='Flash' ? $disk['type'] : 'Device';
$pool = _var($disk,'type')=='Cache';
$name = _var($disk,'name');
$named = no_tilde($name);
$fancy = _(my_disk(native($name,1)),3);
$type = _var($disk,'type')=='Flash' ? $disk['type'] : 'Device';
$pool = _var($disk,'type')=='Cache';
$parity = _var($disk,'type')=='Parity';
$action = strpos(_var($disk,'color'),'blink')===false ? 'down' : 'up';
$action = str_contains(_var($disk,'color'),'blink') ? 'up' : 'down';
switch (_var($disk,'color')) {
case 'green-on': $orb = 'circle'; $color = 'green'; $help = _('Normal operation, device is active'); break;
case 'green-blink': $orb = 'circle'; $color = 'grey'; $help = _('Device is in standby mode (spun-down)'); break;
@@ -72,39 +72,16 @@ function device_info(&$disk,$online) {
}
$ctrl = '';
$disk_status = _var($disk,'status');
if (_var($var,'fsState')=='Started' && $type!='Flash' && strpos($disk_status,'_NP')===false) {
if (_var($var,'fsState')=='Started' && $type!='Flash' && !str_contains($disk_status,'_NP')) {
$ctrl = " style='cursor:pointer' onclick=\"toggle_state('$type','$name','$action')\"";
$help .= "<br>"._("Click to spin $action device");
}
$status = "<a class='info'><i ".($ctrl?"id='dev-$named' ":"")."class='fa fa-$orb orb $color-orb'$ctrl></i><span>$help</span></a>";
$link = (_var($disk,'type')=='Parity' && strpos($disk_status,'_NP')===false) ||
$link = (_var($disk,'type')=='Parity' && !str_contains($disk_status,'_NP')) ||
(_var($disk,'type')=='Data' && $disk_status!='DISK_NP') ||
(_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;
if ($crypto) switch (_var($disk,'luksState',0)) {
case 0:
if (!vfs_luks(_var($disk,'fsType')))
$luks = "<i class='nolock fa fa-lock'></i>";
else
$luks = "<a class='info'><i class='padlock fa fa-unlock orange-text'></i><span>"._('Device to be encrypted')."</span></a>";
break;
case 1:
if ($online) {
$luks = "<a class='info'><i class='padlock fa fa-unlock-alt green-text'></i><span>"._('Device encrypted and unlocked')."</span></a>";
break;
}
/* fall thru */
case 2:
$luks = "<a class='info'><i class='padlock fa fa-lock green-text'></i><span>"._('Device encrypted')."</span></a>";
break;
case 3:
$luks = "<a class='info'><i class='padlock fa fa-lock red-text'></i><span>"._('Device locked: wrong encryption key')."</span></a>";
break;
default:
$luks = "<a class='info'><i class='padlock fa fa-lock red-text'></i><span>"._('Device locked: unknown error')."</span></a>";
break;
} else $luks = '';
return $view.$status.$luks.$link;
}
function device_desc(&$disk) {
@@ -140,23 +117,45 @@ function assignment(&$disk) {
$echo[] = "</select></form>";
return implode($echo);
}
function vfs_type($fs) {
return str_replace('luks:','',$fs);
}
function vfs_luks($fs) {
return ($fs != vfs_type($fs));
return str_starts_with($fs,'luks:');
}
function vfs_parent($name) {
global $disks;
return vfs_type(_var($disks[prefix($name)],'fsType'));
function vfs_type(&$disk, $parent=false) {
global $disks, $pools, $crypto;
$fsType = _var($disk,'fsType');
$name = _var($disk,'name');
$type = ($parent || _var($disk,'type')=='Cache' && !in_array($name,$pools)) ? _var($disks[prefix($name)],'fsType') : $fsType;
$luks = '';
if ($crypto) switch (_var($disk,'luksState',0)) {
case 0:
if (vfs_luks($fsType))
$luks = "<a class='info'><i class='padlock fa fa-unlock orange-text'></i><span>"._('Device to be encrypted')."</span></a>";
break;
case 1:
if ($online) {
$luks = "<a class='info'><i class='padlock fa fa-unlock-alt green-text'></i><span>"._('Device encrypted and unlocked')."</span></a>";
break;
}
/* fall thru */
case 2:
$luks = "<a class='info'><i class='padlock fa fa-lock green-text'></i><span>"._('Device encrypted')."</span></a>";
break;
case 3:
$luks = "<a class='info'><i class='padlock fa fa-lock red-text'></i><span>"._('Device locked: wrong encryption key')."</span></a>";
break;
default:
$luks = "<a class='info'><i class='padlock fa fa-lock red-text'></i><span>"._('Device locked: unknown error')."</span></a>";
break;
}
return $luks.str_replace('luks:','',$type);
}
function fs_info(&$disk) {
global $display, $pools;
$echo = [];
if (empty($disk['fsStatus']) || $disk['fsStatus']=='-') {
return (_var($disk,'type')=='Cache' && !in_array(_var($disk,'name'),$pools)) ? "<td>".vfs_parent(_var($disk,'name'))."</td><td colspan='3'>"._('Device is part of a pool')."</td>" : "<td colspan='4'></td>";
return (_var($disk,'type')=='Cache' && !in_array(_var($disk,'name'),$pools)) ? "<td>".vfs_type($disk,true)."</td><td colspan='3'>"._('Device is part of a pool')."</td>" : "<td colspan='4'></td>";
} elseif (_var($disk,'fsStatus')=='Mounted') {
$echo[] = "<td>".vfs_type(_var($disk,'fsType'))."</td>";
$echo[] = "<td>".vfs_type($disk)."</td>";
$echo[] = "<td>".my_scale(_var($disk,'fsSize',0)*1024,$unit,-1)." $unit</td>";
if ($display['text']%10==0) {
$echo[] = "<td>".my_scale(_var($disk,'fsUsed',0)*1024,$unit)." $unit</td>";
@@ -171,7 +170,7 @@ function fs_info(&$disk) {
$echo[] = "<td><div class='usage-disk'><span style='width:$free%' class='".usage_color($disk,$free,true)."'></span><span>".my_scale(_var($disk,'fsFree',0)*1024,$unit)." $unit</span></div></td>";
}
} else {
$echo[] = "<td>".vfs_type(_var($disk,'fsType'))."</td><td colspan='3'>"._(_var($disk,'fsStatus'))."</td>";
$echo[] = "<td>".vfs_type($disk)."</td><td colspan='3'>"._(_var($disk,'fsStatus'))."</td>";
}
return implode($echo);
}
@@ -184,7 +183,7 @@ function array_offline(&$disk, $pool='') {
$echo = []; $warning = '';
$status = ['DISK_DSBL','DISK_INVALID','DISK_DSBL_NEW','DISK_NEW','DISK_WRONG'];
$text = "<span class='red-text'><em>"._('All existing data on this device will be OVERWRITTEN when array is Started')."</em></span>";
if (strpos(_var($var,'mdState'),'ERROR:')===false) {
if (!str_contains(_var($var,'mdState'),'ERROR:')) {
if (_var($disk,'type')=='Cache') {
if (!empty(_var($disks[$pool],'uuid')) && _var($disk,'status')=='DISK_NEW') $warning = $text;
} else {
@@ -220,7 +219,7 @@ function array_offline(&$disk, $pool='') {
$echo[] = "<td colspan='7'>$warning</td>";
} else {
$echo[] = "<td colspan='3'></td>";
$echo[] = "<td>".vfs_type(_var($disk,'fsType'))."</td>";
$echo[] = "<td>".vfs_type($disk)."</td>";
$echo[] = "<td colspan='3'></td>";
}
break;
@@ -232,7 +231,7 @@ function array_offline(&$disk, $pool='') {
$echo[] = "<td colspan='7'>$warning</td>";
} else {
$echo[] = "<td colspan='3'></td>";
$echo[] = "<td>".vfs_type(_var($disk,'fsType'))."</td>";
$echo[] = "<td>".vfs_type($disk)."</td>";
$echo[] = "<td colspan='3'></td>";
}
break;
@@ -475,21 +474,21 @@ while (true) {
$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 strpos($element, "{$pool}{$_tilde_}")!==false;});
$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));
$echo[$n] .= "<input type='button' value='"._('Add Subpool')."' class='subpool' onclick='addSubpoolPopup(\"$pool\",\"$current_subpools_list\")'".(count($current_subpools)<count($subpools)?'':' disabled').">";
}
$echo[$n] .= "</span></td><td></td></tr>";
} else {
foreach ($cache as $disk) if (prefix($disk['name'])==$pool) {
if (isset($disk['fsType'])) $fstype = vfs_type($disk['fsType']);
$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');
$echo[$n] .= array_online($disk,$fstype);
}
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'])),strpos($pool,$_tilde_)!==false,"$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();
}
}
@@ -511,7 +510,7 @@ while (true) {
$echo[$n] .= "<td>".my_number(_var($disk,'numErrors',0))."</td>";
if (file_exists("/tmp/preclear_stat_$dev")) {
$text = exec("cut -d'|' -f3 /tmp/preclear_stat_$dev|sed 's:\^n:\<br\>:g'");
if (strpos($text,'Total time')===false) $text = _('Preclear in progress').'... '.$text;
if (!str_contains($text,'Total time')) $text = _('Preclear in progress').'... '.$text;
$echo[$n] .= "<td colspan='4'><em>$text</em></td>";
} else
$echo[$n] .= "<td colspan='4'></td>";