149 lines
3.2 KiB
C++
149 lines
3.2 KiB
C++
/**
|
|
* @file drive.cpp
|
|
* @brief represent physical drive
|
|
* @author hendrik schutter
|
|
* @date 01.05.2020
|
|
*/
|
|
|
|
#include "../include/reHDD.h"
|
|
|
|
string Drive::getPath(void)
|
|
{
|
|
return sPath;
|
|
}
|
|
|
|
string Drive::getModelFamily(void)
|
|
{
|
|
return sModelFamily;
|
|
}
|
|
|
|
string Drive::getModelName(void)
|
|
{
|
|
return sModelName;
|
|
}
|
|
|
|
string Drive::getSerial(void)
|
|
{
|
|
return sSerial;
|
|
}
|
|
|
|
uint64_t Drive::getCapacity(void)
|
|
{
|
|
return u64Capacity;
|
|
}
|
|
|
|
uint32_t Drive::getErrorCount(void)
|
|
{
|
|
return u32ErrorCount;
|
|
}
|
|
uint32_t Drive::getPowerOnHours(void)
|
|
{
|
|
return u32PowerOnHours;
|
|
}
|
|
|
|
uint32_t Drive::getPowerCycles(void)
|
|
{
|
|
return u32PowerCycles;
|
|
}
|
|
|
|
string Drive::sCapacityToText()
|
|
{
|
|
if(getCapacity() <= (999*1000000000UL))
|
|
{
|
|
// Less or even 999 GB --> GB
|
|
return to_string(getCapacity() / 1000000000UL) + " GB";
|
|
}
|
|
else
|
|
{
|
|
// More 999 GB --> TB
|
|
return to_string(getCapacity() / 1000000000000UL) + " TB";
|
|
}
|
|
return "ERROR";
|
|
}
|
|
|
|
string Drive::sErrorCountToText()
|
|
{
|
|
return to_string(getErrorCount());
|
|
}
|
|
|
|
|
|
string Drive::sPowerOnHoursToText()
|
|
{
|
|
double dYears = 0U;
|
|
uint32_t u32Hours = getPowerOnHours();
|
|
stringstream stream;
|
|
|
|
dYears = (double) ((double)u32Hours/(double)8760U);
|
|
|
|
stream << fixed << setprecision(2) << dYears;
|
|
string sRet = to_string(getPowerOnHours()) + " hours or " + stream.str() + " years";
|
|
|
|
return sRet;
|
|
}
|
|
|
|
string Drive::sPowerCyclesToText()
|
|
{
|
|
return to_string(getPowerCycles());
|
|
}
|
|
|
|
void Drive::setTaskPercentage(double d32TaskPercentage)
|
|
{
|
|
if(d32TaskPercentage <= 100)
|
|
{
|
|
this->d32TaskPercentage = d32TaskPercentage;
|
|
this->setTimestamp(); //set timestamp for this progress for detecting a frozen drive
|
|
}
|
|
}
|
|
double Drive::getTaskPercentage(void)
|
|
{
|
|
return this->d32TaskPercentage;
|
|
}
|
|
|
|
|
|
/**
|
|
* \brief set S.M.A.R.T. values in model
|
|
* \param string modelFamily
|
|
* \param string modelName
|
|
* \param string serial
|
|
* \param uint64_t capacity
|
|
* \param uint32_t errorCount
|
|
* \param uint32_t powerOnHours
|
|
* \param uint32_t powerCycle
|
|
* \return void
|
|
*/
|
|
void Drive::setDriveSMARTData( string modelFamily,
|
|
string modelName,
|
|
string serial,
|
|
uint64_t capacity,
|
|
uint32_t errorCount,
|
|
uint32_t powerOnHours,
|
|
uint32_t powerCycle)
|
|
{
|
|
this->sModelFamily = modelFamily;
|
|
sModelName = modelName;
|
|
sSerial = serial;
|
|
u64Capacity = capacity;
|
|
u32ErrorCount = errorCount;
|
|
u32PowerOnHours = powerOnHours;
|
|
u32PowerCycles = powerCycle;
|
|
}
|
|
|
|
|
|
void Drive::setTimestamp()
|
|
{
|
|
time(&this->u32Timestamp);
|
|
}
|
|
|
|
void Drive::checkFrozenDrive(void)
|
|
{
|
|
time_t u32localtime;
|
|
time(&u32localtime);
|
|
|
|
if((u32localtime - this->u32Timestamp) >= (FROZEN_TIMEOUT*60) && (this->u32Timestamp > 0))
|
|
{
|
|
Logger::logThis()->warning("Drive Frozen: " + this->getModelName() + " " + this->getSerial());
|
|
this->bWasDeleteted = false;
|
|
this->bWasShredded = false;
|
|
this->state = Drive::FROZEN;
|
|
}
|
|
} |