Revert "reuse working smartclt cmd"

This reverts commit 84a2da8bc2.
This commit is contained in:
Hendrik Schutter 2024-06-01 15:04:06 +02:00
parent 84a2da8bc2
commit 93c52f9a69
3 changed files with 19 additions and 61 deletions

View File

@ -45,7 +45,6 @@ private:
double d32TaskPercentage = 0U; // in percent for Shred (1 to 100)
time_t u32TimestampTaskStart = 0U; // unix timestamp for duration of an action
time_t u32TaskDuration = 0U; // time needed to complete the task
string desiredSmartctlCommand; //command used to gather S.M.A.R.T. values from drive
struct
{
@ -78,7 +77,6 @@ public:
uint32_t getPowerOnHours(void); // in hours
uint32_t getPowerCycles(void);
uint32_t getTemperature(void); // in Fahrenheit, just kidding: degree Celsius
void checkFrozenDrive(void);
void setDriveSMARTData(string modelFamily,
@ -102,9 +100,6 @@ public:
void setActionStartTimestamp();
time_t getActionStartTimestamp();
void setSmartcltCommand(string cmd);
string getSmartcltCommand(void);
void calculateTaskDuration();
time_t getTaskDuration();
};

View File

@ -161,15 +161,6 @@ time_t Drive::getActionStartTimestamp()
return this->u32TimestampTaskStart;
}
void Drive::setSmartcltCommand(string cmd)
{
this->desiredSmartctlCommand = cmd;
}
string Drive::getSmartcltCommand(void)
{
return this->desiredSmartctlCommand;
}
void Drive::calculateTaskDuration()
{
time_t u32localtime;

View File

@ -27,62 +27,27 @@ void SMART::readSMARTData(Drive *drive)
modelName.clear();
serial.clear();
if (drive->getSmartcltCommand().empty())
string sSmartctlCommands[] = {" --json -a ", " --json -d sntjmicron -a ", " --json -d sntasmedia -a ", " --json -d sntrealtek -a ", " --json -d sat -a "};
for (string sSmartctlCommand : sSmartctlCommands)
{
// No working Smartctl command is known --> try all
string sSmartctlCommands[] = {" --json -a ", " --json -d sntjmicron -a ", " --json -d sntasmedia -a ", " --json -d sntrealtek -a ", " --json -d sat -a "};
string sCMD = ("smartctl");
sCMD.append(sSmartctlCommand);
sCMD.append(drive->getPath());
const char *cpComand = sCMD.c_str();
for (string sSmartctlCommand : sSmartctlCommands)
{
string sCMD = ("smartctl");
sCMD.append(sSmartctlCommand);
sCMD.append(drive->getPath());
const char *cpComand = sCMD.c_str();
// Logger::logThis()->info(cpComand);
// Logger::logThis()->info(cpComand);
FILE *outputfileSmart = popen(cpComand, "r");
size_t len = 0U; // length of found line
char *cLine = NULL; // found line
uint8_t status = 255U;
while ((getline(&cLine, &len, outputfileSmart)) != -1)
{
string sLine = string(cLine);
SMART::parseExitStatus(sLine, status);
SMART::parseModelFamily(sLine, modelFamily);
SMART::parseModelName(sLine, modelName);
SMART::parseSerial(sLine, serial);
SMART::parseCapacity(sLine, capacity);
SMART::parseErrorCount(sLine, errorCount);
SMART::parsePowerOnHours(sLine, powerOnHours);
SMART::parsePowerCycles(sLine, powerCycles);
SMART::parseTemperature(sLine, temperature);
}
pclose(outputfileSmart);
if (status == 0U)
{
// Found S.M.A.R.T. data with this command
// Logger::logThis()->info("Found S.M.A.R.T. data with this command");
drive->setSmartcltCommand(sCMD);
break;
}
}
}
else
{
// A working Smartctl command is known
FILE *outputfileSmart = popen(drive->getSmartcltCommand().c_str(), "r");
size_t len = 0U; // length of found line
FILE *outputfileSmart = popen(cpComand, "r");
size_t len = 0U; // length of found line
char *cLine = NULL; // found line
uint8_t status = 255U;
while ((getline(&cLine, &len, outputfileSmart)) != -1)
{
string sLine = string(cLine);
SMART::parseExitStatus(sLine, status);
SMART::parseModelFamily(sLine, modelFamily);
SMART::parseModelName(sLine, modelName);
SMART::parseSerial(sLine, serial);
@ -94,6 +59,13 @@ void SMART::readSMARTData(Drive *drive)
}
pclose(outputfileSmart);
if (status == 0U)
{
// Found S.M.A.R.T. data with this command
// Logger::logThis()->info("Found S.M.A.R.T. data with this command");
break;
}
}
drive->setDriveSMARTData(modelFamily, modelName, serial, capacity, errorCount, powerOnHours, powerCycles, temperature); // write data in drive