#!/usr/bin/php -q '-01-',' Feb '=>'-02-',' Mar '=>'-03-',' Apr '=>'-04-',' May '=>'-05-',' Jun '=>'-06-',' Jul '=>'-07-',' Aug '=>'-08-',' Sep '=>'-09-',' Oct '=>'-10-',' Nov '=>'-11-',' Dec '=>'-12-']; function this_plus($val, $word, $last) { return $val>0 ? (($val||$last)?($val.' '.$word.($last?'':', ')):'') : ''; } function this_duration($time) { if (!$time) return 'Unavailable'; $days = floor($time/86400); $hmss = $time-$days*86400; $hour = floor($hmss/3600); $mins = $hmss/60%60; $secs = $hmss%60; return this_plus($days,_('day'),($hour|$mins|$secs)==0).this_plus($hour,_('hr'),($mins|$secs)==0).this_plus($mins,_('min'),$secs==0).this_plus($secs,_('sec'),true); } $log = "/boot/config/parity-checks.log"; $head = ""; $list = []; if (file_exists($log)) { $handle = fopen($log, 'r'); while (($row = fgets($handle))!==false) { [$date,$duration,$speed,$status,$error,$action,$size] = my_explode('|',$row,7); $action = preg_split('/\s+/',$action); switch ($action[0]) { case 'recon': $action = in_array($action[1],['P','Q']) ? _('Parity-Sync') : _('Data-Rebuild'); break; case 'check': $action = count($action)>1 ? _('Parity-Check') : _('Read-Check'); break; case 'clear': $action = _('Disk-Clear'); break; default : $action = '-'; break; } $date = str_replace(' ',', ',strtr(str_replace(' ',' 0',$date),$month)); $date .= ' ('._(date('l',strtotime($date)),0).')'; $size = $size ? my_scale($size*1024,$unit,-1)." $unit" : '-'; $duration = this_duration($duration); // handle both old and new speed notation $speed = $speed ? (is_numeric($speed) ? my_scale($speed,$unit,1)." $unit/s" : $speed) : _('Unavailable'); $status = $status==0 ? _('OK') : ($status==-4 ? _('Canceled') : $status); $list[] = ""; } fclose($handle); } if ($list) { $list = array_reverse($list); } else { $list[] = ""; } echo $head,implode($list),"
"._('Action').""._('Date').""._('Size').""._('Duration').""._('Speed').""._('Status').""._('Errors')."
$action$date$size$duration$speed$status$error
"._('No parity check history present')."!
"; ?>