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":