From 948cf2f54b736f6187a0d3020e9fbec8d94ca1bb Mon Sep 17 00:00:00 2001 From: SimonFair <39065407+SimonFair@users.noreply.github.com> Date: Thu, 25 Aug 2022 19:42:48 +0100 Subject: [PATCH] Fix SAS Selftest Errors static const char * self_test_result[] = { "Completed ", "Aborted (by user command)", "Aborted (device reset ?) ", "Unknown error, incomplete", "Completed, segment failed", "Failed in first segment ", "Failed in second segment ", "Failed in segment", /* special handling for result 7 */ "Reserved(8) ", "Reserved(9) ", "Reserved(10) ", "Reserved(11) ", "Reserved(12) ", "Reserved(13) ", "Reserved(14) ", "Self test in progress ..." } --- plugins/dynamix/include/SmartInfo.php | 29 +++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/plugins/dynamix/include/SmartInfo.php b/plugins/dynamix/include/SmartInfo.php index e857aae42..be7c38fb2 100644 --- a/plugins/dynamix/include/SmartInfo.php +++ b/plugins/dynamix/include/SmartInfo.php @@ -217,17 +217,30 @@ case "stop": exec("smartctl -X $type ".escapeshellarg("/dev/$port")); break; case "update": - $progress = exec("smartctl -n standby -c $type ".escapeshellarg("/dev/$port")."|grep -Pom1 '\d+%'"); - if ($progress) { - echo " "._('self-test in progress').", ".(100-substr($progress,0,-1))."% "._('complete').""; - break; + if ($disk["transport"] == "scsi") { + $progress = exec("smartctl -n standby -l selftest $type ".escapeshellarg("/dev/$port")."|grep -Pom1 '\d+%'"); + if ($progress) { + echo " "._('self-test in progress').", ".(100-substr($progress,0,-1))."% "._('complete').""; + break; + } + } else { + $progress = exec("smartctl -n standby -c $type ".escapeshellarg("/dev/$port")."|grep -Pom1 '\d+%'"); + if ($progress) { + echo " "._('self-test in progress').", ".(100-substr($progress,0,-1))."% "._('complete').""; + break; + } } - $result = trim(exec("smartctl -n standby -l selftest $type ".escapeshellarg("/dev/$port")."|grep -m1 '^# 1'|cut -c26-55")); + if ($disk["transport"] == "scsi") $result = trim(exec("smartctl -n standby -l selftest $type ".escapeshellarg("/dev/$port")."|grep -m1 '^# 1'|cut -c24-50")); + else $result = trim(exec("smartctl -n standby -l selftest $type ".escapeshellarg("/dev/$port")."|grep -m1 '^# 1'|cut -c26-55")); if (!$result) { echo ""._('No self-tests logged on this disk').""; break; } - if (strpos($result, "Completed without error")!==false) { + if (strpos($result, "Completed, segment failed")!==false) { + echo ""._($result).""; + break; + } + if (strpos($result, "Completed without error")!==false || strpos($result, "Completed")!==false ) { echo ""._($result).""; break; } @@ -235,6 +248,10 @@ case "update": echo ""._($result).""; break; } + if (strpos($result, "Failed")!==false) { + echo ""._($result).""; + break; + } echo ""._('Errors occurred - Check SMART report').""; break; case "selftest":