From 2b0f534f5d8481a45974356fd76f076c1b9340d0 Mon Sep 17 00:00:00 2001 From: Alexander Date: Sun, 3 Dec 2023 22:11:15 +0300 Subject: [PATCH] improved --- src/files/Planner/RunTask.h | 14 ++++++++++++++ src/files/Planner/Supervisor.h | 15 +++++++++++++-- src/files/Planner/Task.h | 17 ++++++++++++++--- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/files/Planner/RunTask.h b/src/files/Planner/RunTask.h index 622fc876..14978717 100644 --- a/src/files/Planner/RunTask.h +++ b/src/files/Planner/RunTask.h @@ -93,4 +93,18 @@ public: printf("START %ld: %s\n", id, res.getCharArray()); return res; } + + virtual void copyResults(const String& pathRes) { + String resultPath(packageWorkspace + "/" + pathRes + "/" + getId()); + + Utils::Mkdir(resultPath); + + Utils::Copy(workspace + "/out.txt", resultPath + "/out.txt"); + Utils::Copy(workspace + "/err.txt", resultPath + "/err.txt"); + + if (Utils::Exists(workspace + "/sts.gz+")) { + String dvm_start = String::DQuotes(dvm_drv) + " pa " + String::DQuotes(String(getId()) + "/sts.gz+") + " " + String::DQuotes(resultPath + "/statistic.txt"); + system(dvm_start.getCharArray()); + } + } }; diff --git a/src/files/Planner/Supervisor.h b/src/files/Planner/Supervisor.h index f89a9de3..133f6277 100644 --- a/src/files/Planner/Supervisor.h +++ b/src/files/Planner/Supervisor.h @@ -177,6 +177,10 @@ public: set activeTaskSet; bool ignoreCheck = true; + String pathRes("results"); + Utils::Mkdir(pathRes); + string buf; + while (activeTasks) { long oldActiveTasks = activeTasks; vector emptyKeys; @@ -223,6 +227,8 @@ public: busyKernels -= task->getKernels(); printf(" done task with %d kernels and id %ld\n", task->getKernels(), task->getId()); + buf += to_string(task->getId()) + " " + string(task->printState().getCharArray()) + " " + to_string(task->getTotalTime()) + "\n"; + task->copyResults(pathRes); continue; } it++; @@ -233,14 +239,19 @@ public: } changeState(); + + String outFile(pathRes + "/info.txt"); + File tmp(outFile, String(buf.c_str())); + + Utils::ZipFolder(pathRes, pathRes + ".zip"); } - virtual void Finalize() {} + virtual void Finalize() { } void saveState() { Utils::Sleep(1); //чтобы не было одинаковых по дате файлов. String stateFile = packageWorkspace + "/state/" + getStatePrefix() + printState(); //printf("stateFile=<%s>\n", stateFile.getCharArray()); - File(stateFile, Utils::getDate()); + File tmp(stateFile, Utils::getDate()); } }; \ No newline at end of file diff --git a/src/files/Planner/Task.h b/src/files/Planner/Task.h index cb246abb..75ed7e92 100644 --- a/src/files/Planner/Task.h +++ b/src/files/Planner/Task.h @@ -26,7 +26,8 @@ enum TaskState { Queued, //16 NoSuchTask, //17 FailedToQueue, //18 - AbortingByUser //19 + AbortingByUser, //19 + Unknown }; enum TestType { @@ -42,8 +43,9 @@ protected: int maxtime; int kernels; //получение зависит от типа задачи. String workspace; - TaskState state; + TaskState state = Unknown; std::chrono::system_clock::time_point start_time; + double total_time; public: String printState() { @@ -88,13 +90,16 @@ public: return String("FailedToQueue"); case AbortingByUser: return String("AbortingByUser"); + case Unknown: + return String("?"); default: return "?"; } } //-------------->> - void setStart() { start_time = std::chrono::system_clock::now(); } + void setStart() { start_time = std::chrono::system_clock::now(); } + double getTotalTime() const { return total_time; } long getId() { return id; } long setId(String* id_s) { @@ -181,6 +186,10 @@ public: } virtual void analyseResults() { + auto end_time = std::chrono::system_clock::now(); + std::chrono::duration diff_time = end_time - start_time; + total_time = diff_time.count(); + printf("%ld done with time %f\n", id, total_time); state = Finished; } @@ -188,4 +197,6 @@ public: String stateFile = workspace + "/TaskState"; File tmp(stateFile, printState()); } + + virtual void copyResults(const String& path) { } }; -- 2.49.1