/** * @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; } }