update shred metric in main thread instead of shred thread
This commit is contained in:
parent
09446b52ca
commit
edcf680b95
|
@ -27,6 +27,7 @@ public:
|
||||||
time_t u32ShredTimeDelta;
|
time_t u32ShredTimeDelta;
|
||||||
std::chrono::time_point<std::chrono::system_clock> chronoShredTimestamp;
|
std::chrono::time_point<std::chrono::system_clock> chronoShredTimestamp;
|
||||||
unsigned long ulWrittenBytes;
|
unsigned long ulWrittenBytes;
|
||||||
|
unsigned long ulSpeedMetricBytesWritten;
|
||||||
} sShredSpeed;
|
} sShredSpeed;
|
||||||
|
|
||||||
bool bWasShredded = false;
|
bool bWasShredded = false;
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
#define WORSE_POWERUP 10000 //mark drive if at this limit or beyond
|
#define WORSE_POWERUP 10000 //mark drive if at this limit or beyond
|
||||||
#define SHRED_ITERATIONS 3U
|
#define SHRED_ITERATIONS 3U
|
||||||
#define FROZEN_TIMEOUT 10 //After this timeout (minutes) the drive will be marked as frozen
|
#define FROZEN_TIMEOUT 10 //After this timeout (minutes) the drive will be marked as frozen
|
||||||
|
#define METRIC_THRESHOLD 3UL*1000UL*1000UL*1000UL //calc shred speed with this minimum of time delta
|
||||||
|
|
||||||
// Logger Settings
|
// Logger Settings
|
||||||
#define LOG_PATH "./reHDD.log"
|
#define LOG_PATH "./reHDD.log"
|
||||||
|
@ -84,6 +85,7 @@ private:
|
||||||
static void searchDrives(list <Drive>* plistDrives);
|
static void searchDrives(list <Drive>* plistDrives);
|
||||||
static void printDrives(list <Drive>* plistDrives);
|
static void printDrives(list <Drive>* plistDrives);
|
||||||
static void startShredAllDrives(list <Drive>* plistDrives);
|
static void startShredAllDrives(list <Drive>* plistDrives);
|
||||||
|
static void updateShredMetrics(list <Drive>* plistDrives);
|
||||||
static void filterIgnoredDrives(list <Drive>* plistDrives);
|
static void filterIgnoredDrives(list <Drive>* plistDrives);
|
||||||
static void filterNewDrives(list <Drive>* plistOldDrives, list <Drive>* plistNewDrives);
|
static void filterNewDrives(list <Drive>* plistOldDrives, list <Drive>* plistNewDrives);
|
||||||
static void addSMARTData(list <Drive>* plistDrives);
|
static void addSMARTData(list <Drive>* plistDrives);
|
||||||
|
|
|
@ -71,9 +71,14 @@ void reHDD::app_logic(void)
|
||||||
{
|
{
|
||||||
char dummy;
|
char dummy;
|
||||||
read (fdShredInformPipe[0],&dummy,1);
|
read (fdShredInformPipe[0],&dummy,1);
|
||||||
|
updateShredMetrics(&listDrives);
|
||||||
#ifdef LOG_LEVEL_HIGH
|
#ifdef LOG_LEVEL_HIGH
|
||||||
Logger::logThis()->info("got progress signal from a shred task");
|
Logger::logThis()->info("got progress signal from a shred task");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
ui->updateTUI(&listDrives, u8SelectedEntry);
|
ui->updateTUI(&listDrives, u8SelectedEntry);
|
||||||
} //endless loop
|
} //endless loop
|
||||||
|
@ -445,6 +450,33 @@ void reHDD::printDrives(list <Drive>* plistDrives)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief update shred metrics for all drives
|
||||||
|
* \param pointer of list <Drive>* plistDrives
|
||||||
|
* \return void
|
||||||
|
*/
|
||||||
|
void reHDD::updateShredMetrics(list <Drive>* plistDrives)
|
||||||
|
{
|
||||||
|
list <Drive>::iterator it;
|
||||||
|
for (it = plistDrives->begin(); it != plistDrives->end(); ++it)
|
||||||
|
{
|
||||||
|
if(it->state == Drive::SHRED_ACTIVE)
|
||||||
|
{
|
||||||
|
Drive* pTmpDrive = iterator_to_pointer<Drive, std::list<Drive>::iterator > (it);
|
||||||
|
//set metrics for calculating shred speed
|
||||||
|
std::chrono::time_point<std::chrono::system_clock> chronoCurrentTimestamp = std::chrono::system_clock::now();
|
||||||
|
time_t u32ShredTimeDelta = (chronoCurrentTimestamp - pTmpDrive->sShredSpeed.chronoShredTimestamp).count();
|
||||||
|
if(u32ShredTimeDelta > METRIC_THRESHOLD)
|
||||||
|
{
|
||||||
|
pTmpDrive->sShredSpeed.u32ShredTimeDelta = u32ShredTimeDelta;
|
||||||
|
pTmpDrive->sShredSpeed.chronoShredTimestamp = std::chrono::system_clock::now();
|
||||||
|
pTmpDrive->sShredSpeed.ulWrittenBytes = pTmpDrive->sShredSpeed.ulSpeedMetricBytesWritten;
|
||||||
|
pTmpDrive->sShredSpeed.ulSpeedMetricBytesWritten = 0U;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief add S.M.A.R.T data from SMART
|
* \brief add S.M.A.R.T data from SMART
|
||||||
* \param pointer of list <Drive>* plistDrives
|
* \param pointer of list <Drive>* plistDrives
|
||||||
|
|
|
@ -90,7 +90,7 @@ int Shred::shredDrive(Drive* drive, int* ipSignalFd)
|
||||||
|
|
||||||
this->ulDriveByteSize = getDriveSizeInBytes(driveFileDiscr);
|
this->ulDriveByteSize = getDriveSizeInBytes(driveFileDiscr);
|
||||||
drive->sShredSpeed.chronoShredTimestamp = std::chrono::system_clock::now();; //set inital timestamp for speed metric
|
drive->sShredSpeed.chronoShredTimestamp = std::chrono::system_clock::now();; //set inital timestamp for speed metric
|
||||||
unsigned long ulSpeedMetricBytesWritten = 0U; //uses to calculate speed metric
|
drive->sShredSpeed.ulSpeedMetricBytesWritten = 0U; //uses to calculate speed metric
|
||||||
|
|
||||||
#ifdef LOG_LEVEL_HIGH
|
#ifdef LOG_LEVEL_HIGH
|
||||||
Logger::logThis()->info("Shred-Task: Bytes-Size of Drive: " + to_string(this->ulDriveByteSize) + " - Drive: " + drive->getSerial());
|
Logger::logThis()->info("Shred-Task: Bytes-Size of Drive: " + to_string(this->ulDriveByteSize) + " - Drive: " + drive->getSerial());
|
||||||
|
@ -139,7 +139,7 @@ int Shred::shredDrive(Drive* drive, int* ipSignalFd)
|
||||||
ulDriveByteCounter += iByteShredded;
|
ulDriveByteCounter += iByteShredded;
|
||||||
ulDriveByteOverallCount += iByteShredded;
|
ulDriveByteOverallCount += iByteShredded;
|
||||||
d32Percent = this->calcProgress();
|
d32Percent = this->calcProgress();
|
||||||
ulSpeedMetricBytesWritten += iByteShredded;
|
drive->sShredSpeed.ulSpeedMetricBytesWritten += iByteShredded;
|
||||||
|
|
||||||
#ifdef LOG_LEVEL_HIGH
|
#ifdef LOG_LEVEL_HIGH
|
||||||
Logger::logThis()->info("Shred-Task: ByteCount: " + to_string(ulDriveByteCounter) + " - iteration: " + to_string((uiShredIterationCounter+1)) + " - progress: " + to_string(d32Percent) + " - Drive: " + drive->getSerial());
|
Logger::logThis()->info("Shred-Task: ByteCount: " + to_string(ulDriveByteCounter) + " - iteration: " + to_string((uiShredIterationCounter+1)) + " - progress: " + to_string(d32Percent) + " - Drive: " + drive->getSerial());
|
||||||
|
@ -149,14 +149,6 @@ int Shred::shredDrive(Drive* drive, int* ipSignalFd)
|
||||||
//set shred percantage
|
//set shred percantage
|
||||||
drive->setTaskPercentage(d32TmpPercent);
|
drive->setTaskPercentage(d32TmpPercent);
|
||||||
d32TmpPercent = d32Percent;
|
d32TmpPercent = d32Percent;
|
||||||
|
|
||||||
//set metrics for calculating shred speed
|
|
||||||
std::chrono::time_point<std::chrono::system_clock> chronoCurrentTimestamp = std::chrono::system_clock::now();
|
|
||||||
drive->sShredSpeed.u32ShredTimeDelta = (chronoCurrentTimestamp - drive->sShredSpeed.chronoShredTimestamp).count();
|
|
||||||
drive->sShredSpeed.chronoShredTimestamp = std::chrono::system_clock::now();
|
|
||||||
drive->sShredSpeed.ulWrittenBytes = ulSpeedMetricBytesWritten;
|
|
||||||
ulSpeedMetricBytesWritten = 0U;
|
|
||||||
|
|
||||||
//signal process in shreding
|
//signal process in shreding
|
||||||
write(*ipSignalFd, "A",1);
|
write(*ipSignalFd, "A",1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue