diff --git a/doc/diagrams/refurbishingHddTool.drawio b/doc/diagrams/refurbishingHddTool.drawio index 3667556..9a4d547 100644 --- a/doc/diagrams/refurbishingHddTool.drawio +++ b/doc/diagrams/refurbishingHddTool.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/doc/diagrams/refurbishingHddTool.pdf b/doc/diagrams/refurbishingHddTool.pdf index 6989d9c..db66b70 100644 Binary files a/doc/diagrams/refurbishingHddTool.pdf and b/doc/diagrams/refurbishingHddTool.pdf differ diff --git a/doc/diagrams/states.drawio b/doc/diagrams/states.drawio new file mode 100644 index 0000000..661e8c0 --- /dev/null +++ b/doc/diagrams/states.drawio @@ -0,0 +1 @@ +5Vtbd6M2EP41fkwOkrg+Ojbb3Z5sNo192u4jiRWbXYxcWV7b/fUVRgIL4Usag0jykqBBkmFmvtE3I9FDg/nmNxotZl/JBCc9aE02PTTsQeh6Dv+bCba5ANl+LpjSeJKLQCkYxf9iIbSEdBVP8FLpyAhJWLxQhU8kTfETU2QRpWStdnsmifqri2iKNcHoKUp06V/xhM1yqQ+9Uv4Zx9OZ/GXgBvmdeSQ7izdZzqIJWe+JUNhDA0oIy6/mmwFOMt1JveTjPh24WzwYxSk7ZwD78uOPwA1nv4++jj9B9/4n+7a+ssXTLtlWvjGecAWIJqFsRqYkjZKwlN5QskonOJvW4q2yzy0hCy4EXPgDM7YV1oxWjHDRjM0TcRdvYvZ3NvzaEa3ve3eGGzHzrrGVjZTR7d6grPl9/145bNeS4/L3y17qoN6EaElW9AkfUZb0v4hOMTvSDxbW5ajAZI758/BxFCcRi3+pzxEJ/5wW/UoT8gthxRdYVMz7K0pW4pd60E344948E/7C+6Z2/1kReeNquTNWn3cA/mJT3uRX0+z/aNx/GMup+JPls+X3dB9KEg7QzFfWs5jh0SLaKXbNQ4TqCeJhMWV4c9w+uj7FACQRJyOMwNu6hGsgRLM9pNpWQwaANQaoqEcFUAsqcmxFRYGuIgBrdOQ2pSMANJ20EXbKEGJ7Sgy5hs6JMLJr3WMacwVgevnYgs6MLZ7R2KK7crtmMxX5z7WO/0rr7Ib2KY22ex0WJE7Zcm/m+0xQotsGKroBqhCBSn8HwWP9+UX+BKWfFK/y/10HaVFxtKNjlP8dzSj3D7G0PFK5qgyLDkOccNR1LowCcGYcbWytsRta7O++3YXnrvVcn5l8ySj5iQckIVl0TEmaYf85TpKKaM8k2bQC9dCWbTFxdj8zVsypeD+JpymXzePJZBdSIiF44obLgvFlaIRqXL/GtlabtnW6xyN49qYCwDNOJBzDKxKwXZVJBL53Yl1qmkq4Zy5WyMRiBQPVhaB1fLFCHjzWv5nFCnga9sLRoNbTbqNHnKjeoUWng3GMYh6Io8fdfJkTCOXxyZ2bnjM8BlpR7xCDe0WVYd9hjiDmIMQ5NXaQKNG8zBNK08ku5Pl5yT2wivELGAgiw7A3RUTPxTYIXgnuV0VlV4fP3Th8KPjcFi91urdDmOiQku6tdecmzY0RAj0ovZjswdrKzueHMOPao/A2HIyzyw9F/KCNVEO7ppmf3z3mZ1eW4Q4wP9fwEuD5Sg0JXFvINsz8gi4zv2rZ4RTzs+VOUavMT8fe+2F+7gnm5yDXVVQuNxO6SwSRHho/BhE8F+rwtSXJVwXp4B0QQW3pM04EZdnx4kxwyBngOPy4VND2K6Y2TgVBbd28XvsNLURZ+Msd52J1dKnCI3X0OkDBxrSs19GHb17LDuialvXVwHhwr2b5sA7xreY10HReg5BS0eZ5DSh6GMprpAG6mdigSkkbtZGoQL0a1K91nDeXpsBTaYqN1AM/Iop0OEnxzUK697KjLiaAC00At/DJeuCe7A8sp3mg2/qBPlmwHZD5ovZgRAu4p4Rxy5BsVGA1EgfQgcxVTH/FVyrL87qOfajnav0iu+0/clx3jwPVHX1oNcGFus9fdqujPxh/+fOjnXCBdsXOjunsFupnXER96I3nXtCvqLrmULLbZu4F38CekvncCxk/VhBU95TM516d3lSyobpj0UruhfRy0TvJvdABI5a5l1U5Jtn95MvMF04lpoOg8q0BKAssXce0kbTMBS9Ly6r9A7/5EGDrtL7YPHnnadmBk2VlWga9SkLR/W1kCYgOZ2kaWzKepSEdAxfehvyQaVp1E7LJNI03yw+QczCVX3Gj8D8= \ No newline at end of file diff --git a/doc/diagrams/states.png b/doc/diagrams/states.png new file mode 100644 index 0000000..41c861c Binary files /dev/null and b/doc/diagrams/states.png differ diff --git a/include/drive.h b/include/drive.h index b7b1423..ba11ce0 100644 --- a/include/drive.h +++ b/include/drive.h @@ -17,11 +17,12 @@ public: enum TaskState {NONE, SHRED_SELECTED, SHRED_ACTIVE, - SHRED_FINISHED, DELETE_SELECTED, - DELETE_ACTIVE, - DELETE_FINISHED + DELETE_ACTIVE } state; + + bool bWasShredded = false; + bool bWasDeleteted = false; private: string sPath; @@ -33,7 +34,7 @@ private: uint32_t u32PowerOnHours = 0U; //in hours uint32_t u32PowerCycles = 0U; - uint8_t u8TaskPercentage = 0U; //in percent for Shred (1 to 100) and Delete (1 OR 100) + uint8_t u8TaskPercentage = 0U; //in percent for Shred (1 to 100) protected: diff --git a/include/reHDD.h b/include/reHDD.h index 67277fc..5bf31ea 100644 --- a/include/reHDD.h +++ b/include/reHDD.h @@ -62,10 +62,12 @@ private: static void addSMARTData(vector * pvecDrives); static void ThreadScannDevices(); static void ThreadUserInput(); - static void handleArrowKey(TUI::UserInput userInput); + static void ThreadShred(); + static void handleArrowKey(TUI::UserInput userInput); static void handleEnter(); static void handleESC(); static void handleAbort(); + static void checkShredComplete(vector * pvecDrives); }; diff --git a/include/shred.h b/include/shred.h index 6c25649..eba5cc8 100644 --- a/include/shred.h +++ b/include/shred.h @@ -15,7 +15,7 @@ class Shred protected: public: - static void shredDrive(Drive* drive); + static void shredDrive(Drive* drive, int* fdInformPipeWrite); private: Shred(void); diff --git a/include/tui.h b/include/tui.h index ab80348..c5f25dd 100644 --- a/include/tui.h +++ b/include/tui.h @@ -55,7 +55,7 @@ private: static void centerTitle(WINDOW *pwin, const char * title); static WINDOW *createOverViewWindow( int iXSize, int iYSize); static WINDOW *createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive drive); - static WINDOW *createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart,string sModelFamily, string sModelName, string sCapacity, bool bSelected); + static WINDOW *createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart,string sModelFamily, string sModelName, string sCapacity, string sState, bool bSelected); static WINDOW *createSystemStats(int iXSize, int iYSize, int iYStart); static WINDOW *createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate); static WINDOW *createDialog(int iXSize, int iYSize, int iXStart, int iYStart, string selectedTask, string optionA, string optionB); diff --git a/shred_dummy.sh b/shred_dummy.sh index bbdfed9..206624b 100644 --- a/shred_dummy.sh +++ b/shred_dummy.sh @@ -2,7 +2,7 @@ echo "starting SHRED DUMMY" -for i in {0..100..10} +for i in {0..100..20} do echo "DUMMY shred $i%" sleep 1 diff --git a/src/reHDD.cpp b/src/reHDD.cpp index 35783cf..7539bb9 100644 --- a/src/reHDD.cpp +++ b/src/reHDD.cpp @@ -7,9 +7,9 @@ #include "../include/reHDD.h" -static int fdSearchDrives[2];//File descriptor for pipe that informs if new drives are found +static int fdNewDrivesInformPipe[2];//File descriptor for pipe that informs if new drives are found -static int fdShred[2];//File descriptor for pipe that informs if a wipe thread signals +static int fdShredInformPipe[2];//File descriptor for pipe that informs if a wipe thread signals static std::mutex mxScannDrives; @@ -47,38 +47,42 @@ void reHDD::app_logic(void) ui = new TUI(); ui->initTUI(); - pipe(fdSearchDrives); - pipe(fdShred); + pipe(fdNewDrivesInformPipe); + pipe(fdShredInformPipe); + - FD_ZERO(&selectSet); - FD_SET(fdSearchDrives[0], &selectSet); - FD_SET(fdShred[0], &selectSet); thread thDevices(ThreadScannDevices); //start thread that scanns for drives thread thUserInput(ThreadUserInput); //start thread that reads user input while(1) { + FD_ZERO(&selectSet); + FD_SET(fdNewDrivesInformPipe[0], &selectSet); + FD_SET(fdShredInformPipe[0], &selectSet); + select(FD_SETSIZE, &selectSet, NULL, NULL, NULL); - if( FD_ISSET(fdSearchDrives[0], &selectSet)) + if( FD_ISSET(fdNewDrivesInformPipe[0], &selectSet)) { char dummy; - read (fdSearchDrives[0],&dummy,1); + read (fdNewDrivesInformPipe[0],&dummy,1); mxScannDrives.lock(); filterNewDrives(&vecDrives, &vecNewDrives); //filter and copy to app logic vector mxScannDrives.unlock(); - //TODO update UI + } - ui->updateTUI(&vecDrives, i32SelectedEntry); - } - else if (FD_ISSET(fdShred[0], &selectSet)) + if (FD_ISSET(fdShredInformPipe[0], &selectSet)) { - cout << "shred signal" << endl; - //TODO update percantage & state - //TODO update ui + char dummy; + read (fdShredInformPipe[0],&dummy,1); + + checkShredComplete(&vecDrives); } + + ui->updateTUI(&vecDrives, i32SelectedEntry); + } //endless loop thDevices.join(); thUserInput.join(); @@ -95,7 +99,7 @@ void reHDD::ThreadScannDevices() filterIgnoredDrives(&vecNewDrives); //filter out ignored drives addSMARTData(&vecNewDrives); //add S.M.A.R.T. Data to the drives mxScannDrives.unlock(); - write (fdSearchDrives[1], "A",1); + write(fdNewDrivesInformPipe[1], "A",1); sleep(5); //sleep 5 sec } } @@ -157,6 +161,11 @@ void reHDD::ThreadUserInput() } } +void reHDD::ThreadShred() +{ + Shred::shredDrive(&vecDrives.at(i32SelectedEntry), &fdShredInformPipe[1]); +} + void reHDD::filterNewDrives(vector * pvecOldDrives, vector * pvecNewDrives) { @@ -171,9 +180,11 @@ void reHDD::filterNewDrives(vector * pvecOldDrives, vector * pvecN if(itOld->getSerial() == itNew->getSerial()) { bOldDriveIsOffline = false; - // cout << "already online drive found: " << itOld->getPath() << endl; - itNew->state = itOld->state; - itNew->setTaskPercentage(itOld->getTaskPercentage()); + // copy old drive instance date in new instance + itNew->state = itOld->state; //copy state + itNew->setTaskPercentage(itOld->getTaskPercentage()); //copy percentage + itNew->bWasDeleteted = itOld->bWasDeleteted; //copy finished task delete + itNew->bWasShredded = itOld->bWasShredded; //copy finished task shred } } @@ -377,9 +388,7 @@ void reHDD::handleEnter() { SELECTED_DRIVE.state = Drive::TaskState::SHRED_ACTIVE; //task for drive is running --> don“t show more task options - - //TODO start shredding - Shred::shredDrive(&vecDrives.at(i32SelectedEntry)); + thread(ThreadShred).detach(); } if(SELECTED_DRIVE.state == Drive::TaskState::DELETE_SELECTED) @@ -413,4 +422,19 @@ void reHDD::handleAbort() SELECTED_DRIVE.state = Drive::NONE; //task for drive is running --> remove selection } +} + + +void reHDD::checkShredComplete(vector * pvecDrives) +{ + vector ::iterator it; + for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) + { + if(it->getTaskPercentage() == 100 ) + { + it->bWasShredded = true; //mark this drive as shredded + it->setTaskPercentage(0); //reset for an other shredding + it->state = Drive::NONE; //reset for an other task# + } + } } \ No newline at end of file diff --git a/src/shred.cpp b/src/shred.cpp index 646199b..65d0770 100644 --- a/src/shred.cpp +++ b/src/shred.cpp @@ -12,7 +12,7 @@ * \param pointer of Drive instance * \return void */ -void Shred::shredDrive(Drive* drive) +void Shred::shredDrive(Drive* drive, int* fdInformPipeWrite) { size_t len = 0; //lenght of found line @@ -24,34 +24,27 @@ void Shred::shredDrive(Drive* drive) #endif #ifdef DRYRUN - cout << "dryrun for " << drive->getPath() << endl; - // string sCMD = ("ping ::1 -c 5"); + //cout << "dryrun for " << drive->getPath() << endl; string sCMD = ("bash shred_dummy.sh"); #endif const char* cpComand = sCMD.c_str(); - cout << "shred: " << cpComand << endl; + //cout << "shred: " << cpComand << endl; FILE* shredCmdOutput = popen(cpComand, "r"); while ((getline(&cLine, &len, shredCmdOutput)) != -1) { string sLine = string(cLine); - - - // TODO parse percentage - - string search("%"); - size_t found = sLine.find(search); - if (found!=string::npos){ - uint8_t percent = 0U; - sLine.erase(0, sLine.find("%")-2); - sLine.erase(std::remove(sLine.begin(), sLine.end(), '\n'), sLine.end()); - int i = std::stoi(sLine); - cout << i << " percent" << endl; - } - - + string search("%"); + size_t found = sLine.find(search); + if (found!=string::npos) + { + sLine.erase(0, sLine.find("%")-3); + sLine.erase(std::remove(sLine.begin(), sLine.end(), '\n'), sLine.end()); + drive->setTaskPercentage(stoi(sLine)); + write(*fdInformPipeWrite, "A",1); + } } fclose(shredCmdOutput); } diff --git a/src/TUI/tui.cpp b/src/tui.cpp similarity index 90% rename from src/TUI/tui.cpp rename to src/tui.cpp index 4d3b7b8..2b1bd31 100644 --- a/src/TUI/tui.cpp +++ b/src/tui.cpp @@ -5,7 +5,7 @@ * @date 03.08.2020 */ -#include "../../include/reHDD.h" +#include "../include/reHDD.h" TUI::TUI(void) @@ -78,11 +78,39 @@ void TUI::updateTUI(vector * pvecDrives, int32_t i32SelectedEntry) if(i32SelectedEntry == (it - pvecDrives->begin())) { - bSelectedEntry = true; //mark this drive in entries list + bSelectedEntry = true; //mark this drive in entries list displaySelectedDrive(pvecDrives->at(i32SelectedEntry), stdscrX, stdscrY); } - WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity, bSelectedEntry); + string sState = " "; + + switch (it->state) + { + case Drive::SHRED_ACTIVE: + sState = "Shredding: " + to_string(it->getTaskPercentage()) + "%"; + break; + + case Drive::DELETE_ACTIVE: + sState = "Deleting ..."; + break; + + case Drive::NONE: + case Drive::SHRED_SELECTED: + case Drive::DELETE_SELECTED: + if (it->bWasDeleteted) + { + sState = "DELETED"; //mark drive as deleted previously + } + if (it->bWasShredded) + { + sState = "SHREDDED"; //mark drive as shreded previously, overwrite if deleted + } + break; + default: + break; + } + + WINDOW * tmp = createEntryWindow( ((int)(stdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity, sState, bSelectedEntry); wrefresh(tmp); } } @@ -212,7 +240,7 @@ WINDOW* TUI::createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive return newWindow; } -WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, string sModelFamily, string sModelName, string sCapacity, bool bSelected) +WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, string sModelFamily, string sModelName, string sCapacity, string sState, bool bSelected) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); @@ -236,6 +264,8 @@ WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, mvwaddstr(newWindow,2, 1, sModelName.c_str()); mvwaddstr(newWindow,3, 1, sCapacity.c_str()); + mvwaddstr(newWindow,2, iXSize-sState.length()-5, sState.c_str()); + keypad(newWindow, TRUE); return newWindow; @@ -345,9 +375,6 @@ void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY) case Drive::SHRED_SELECTED : //shred task selected for this drive menustate.bConfirmShred = true; break; - case Drive::DELETE_FINISHED : //delete task finished for this drive - case Drive::SHRED_FINISHED : //shred task finished for this drive - break; default: break; }