107 lines
2.9 KiB
C++
107 lines
2.9 KiB
C++
/**
|
|
* @file drive.h
|
|
* @brief represent physical drive
|
|
* @author hendrik schutter
|
|
* @date 01.05.2020
|
|
*/
|
|
|
|
#ifndef DRIVE_H_
|
|
#define DRIVE_H_
|
|
|
|
#include "reHDD.h"
|
|
|
|
class Drive
|
|
{
|
|
|
|
public:
|
|
enum TaskState {NONE,
|
|
SHRED_SELECTED,
|
|
SHRED_ACTIVE, //shred iterations active
|
|
CHECK_ACTIVE, //optional checking active
|
|
DELETE_SELECTED,
|
|
DELETE_ACTIVE,
|
|
FROZEN
|
|
} state;
|
|
|
|
struct
|
|
{
|
|
time_t u32ShredTimeDelta;
|
|
std::chrono::time_point<std::chrono::system_clock> chronoShredTimestamp;
|
|
unsigned long ulWrittenBytes;
|
|
unsigned long ulSpeedMetricBytesWritten;
|
|
} sShredSpeed;
|
|
|
|
bool bWasShredded = false; //all shred iterations done
|
|
bool bWasChecked = false; //all shred iterations and optional checking done
|
|
bool bWasDeleteted = false;
|
|
bool bIsOffline = false;
|
|
uint32_t u32DriveChecksumAferShredding = 0U;
|
|
|
|
private:
|
|
string sPath;
|
|
time_t u32Timestamp = 0U; //unix timestamp for detecting a frozen drive
|
|
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
|
|
|
|
struct
|
|
{
|
|
string sModelFamily;
|
|
string sModelName;
|
|
string sSerial;
|
|
uint64_t u64Capacity = 0U; //in byte
|
|
uint32_t u32ErrorCount = 0U;
|
|
uint32_t u32PowerOnHours = 0U; //in hours
|
|
uint32_t u32PowerCycles = 0U;
|
|
uint32_t u32Temperature = 0U; //in Fahrenheit, just kidding: degree Celsius
|
|
} sSmartData;
|
|
|
|
private:
|
|
void setTimestamp();
|
|
|
|
protected:
|
|
|
|
public:
|
|
Drive(string path)
|
|
{
|
|
this->sPath = path;
|
|
}
|
|
|
|
string getPath(void);
|
|
string getModelFamily(void);
|
|
string getModelName(void);
|
|
string getSerial(void);
|
|
uint64_t getCapacity(void); //in byte
|
|
uint32_t getErrorCount(void);
|
|
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,
|
|
string modelName,
|
|
string serial,
|
|
uint64_t capacity,
|
|
uint32_t errorCount,
|
|
uint32_t powerOnHours,
|
|
uint32_t powerCycles,
|
|
uint32_t temperature);
|
|
|
|
string sCapacityToText();
|
|
string sErrorCountToText();
|
|
string sPowerOnHoursToText();
|
|
string sPowerCyclesToText();
|
|
string sTemperatureToText();
|
|
|
|
void setTaskPercentage(double d32TaskPercentage);
|
|
double getTaskPercentage(void);
|
|
|
|
void setActionStartTimestamp();
|
|
time_t getActionStartTimestamp();
|
|
|
|
void calculateTaskDuration();
|
|
time_t getTaskDuration();
|
|
|
|
};
|
|
|
|
#endif // DRIVE_H_
|