moved to json
This commit is contained in:
@@ -23,11 +23,11 @@ public:
|
|||||||
elements.push_back(new_line);
|
elements.push_back(new_line);
|
||||||
}
|
}
|
||||||
|
|
||||||
long getLength() const {
|
int getLength() const {
|
||||||
return (long)elements.size();
|
return (int)elements.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
T* get(long i) {
|
T* get(int i) {
|
||||||
return elements[i];
|
return elements[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
class CompilationSupervisor : public Supervisor<CompilationTask> {
|
class CompilationSupervisor : public Supervisor<CompilationTask> {
|
||||||
public:
|
public:
|
||||||
CompilationSupervisor() {
|
CompilationSupervisor() {
|
||||||
this->init("compilationTasks", 4);
|
this->init("compilationTasks.json");
|
||||||
}
|
}
|
||||||
|
|
||||||
CompilationTask* getTaskById(long task_id) {
|
CompilationTask* getTaskById(int task_id) {
|
||||||
for (long i = 0; i < getLength(); ++i) {
|
for (int i = 0; i < getLength(); ++i) {
|
||||||
CompilationTask* task = get(i);
|
CompilationTask* task = get(i);
|
||||||
if (task->getId() == task_id)
|
if (task->getId() == task_id)
|
||||||
return task;
|
return task;
|
||||||
|
|||||||
@@ -2,13 +2,14 @@
|
|||||||
|
|
||||||
#include "Task.h"
|
#include "Task.h"
|
||||||
#include "Text.h"
|
#include "Text.h"
|
||||||
|
#include "json.hpp"
|
||||||
|
|
||||||
class CompilationTask : public Task {
|
class CompilationTask : public Task {
|
||||||
String test_id;
|
String test_name;
|
||||||
String makefile_text;
|
String makefile_text;
|
||||||
public:
|
public:
|
||||||
void setTestId(String* test_id_in) {
|
void setTestName(String* test_name_in) {
|
||||||
test_id = String(test_id_in->getCharArray());
|
test_name = String(test_name_in->getCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
void setMakefileText(String* makefile_text_in) {
|
void setMakefileText(String* makefile_text_in) {
|
||||||
@@ -16,22 +17,30 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual void print() const {
|
virtual void print() const {
|
||||||
printf("id=%ld; maxtime=%d; test_id=%s\n", id, maxtime, test_id.getCharArray());
|
printf("id=%ld; maxtime=%d; test_name=%s\n", id, maxtime, test_name.getCharArray());
|
||||||
printf("makefile_text=%s\n", makefile_text.getCharArray());
|
printf("makefile_text=%s\n", makefile_text.getCharArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
CompilationTask(Text* lines, int offset) : Task(lines, offset) {
|
CompilationTask(Text* lines, int offset) : Task(lines, offset) {
|
||||||
setTestId(lines->get(offset + 2));
|
setTestName(lines->get(offset + 2));
|
||||||
setMakefileText(lines->get(offset + 3));
|
setMakefileText(lines->get(offset + 3));
|
||||||
setState(Waiting);
|
setState(Waiting);
|
||||||
kernels = 1;
|
kernels = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CompilationTask(const nlohmann::json& data) : Task(data) {
|
||||||
|
test_name = Utils::getValue<string>(data, "test_name");
|
||||||
|
makefile_text = Utils::getValue<string>(data, "makefile_text");
|
||||||
|
|
||||||
|
setState(Waiting);
|
||||||
|
kernels = 1;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void prepareWorkspace() {
|
virtual void prepareWorkspace() {
|
||||||
String makeFilePath = String(id) + "/Makefile";
|
String makeFilePath = String(id) + "/Makefile";
|
||||||
File makeFileFile = File(makeFilePath, this->makefile_text);
|
File makeFileFile = File(makeFilePath, this->makefile_text);
|
||||||
String tests = userWorkspace + "/projects";
|
String tests = userWorkspace + "/projects";
|
||||||
String testPath = tests + "/" + test_id;
|
String testPath = tests + "/" + test_name;
|
||||||
Utils::CopyDirectory_L(testPath, workspace);
|
Utils::CopyDirectory_L(testPath, workspace);
|
||||||
}
|
}
|
||||||
virtual String getLaunchScriptText() {
|
virtual String getLaunchScriptText() {
|
||||||
|
|||||||
@@ -6,9 +6,10 @@
|
|||||||
class RunSupervisor : public Supervisor<RunTask> {
|
class RunSupervisor : public Supervisor<RunTask> {
|
||||||
public:
|
public:
|
||||||
RunSupervisor(CompilationSupervisor* compilationSupervisor) {
|
RunSupervisor(CompilationSupervisor* compilationSupervisor) {
|
||||||
this->init("runTasks", 8);
|
this->init("runTasks.json");
|
||||||
|
|
||||||
//проверить отмененные задачи.
|
//проверить отмененные задачи.
|
||||||
for (long i = 0; i < getLength(); ++i) {
|
for (int i = 0; i < getLength(); ++i) {
|
||||||
RunTask* task = this->get(i);
|
RunTask* task = this->get(i);
|
||||||
CompilationTask* parent = compilationSupervisor->getTaskById(task->getTestCompilationTaskId());
|
CompilationTask* parent = compilationSupervisor->getTaskById(task->getTestCompilationTaskId());
|
||||||
task->setState((parent->getState() == Done) ? Waiting : Canceled);
|
task->setState((parent->getState() == Done) ? Waiting : Canceled);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#include "CompilationTask.h"
|
#include "CompilationTask.h"
|
||||||
|
|
||||||
class RunTask : public Task {
|
class RunTask : public Task {
|
||||||
long testcompilationtask_id;
|
int testcompilationtask_id;
|
||||||
String binary_name;
|
String binary_name;
|
||||||
String matrix;
|
String matrix;
|
||||||
String environments;
|
String environments;
|
||||||
@@ -23,34 +23,23 @@ public:
|
|||||||
kernels
|
kernels
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
int setKernels(String* kernels_s) {
|
|
||||||
return kernels = atoi(kernels_s->getCharArray());
|
void setKernels(String* kernels_s) { kernels = atoi(kernels_s->getCharArray()); }
|
||||||
}
|
void setTestCompilationTaskId(String* id_s) { testcompilationtask_id = strtol(id_s->getCharArray(), NULL, 10); }
|
||||||
long setTestCompilationTaskId(String* id_s) {
|
|
||||||
return testcompilationtask_id = strtol(id_s->getCharArray(), NULL, 10);
|
int getTestCompilationTaskId() { return testcompilationtask_id; }
|
||||||
}
|
|
||||||
long getTestCompilationTaskId() {
|
void setMatrix(String* matrix_in) { matrix = String(matrix_in->getCharArray()); }
|
||||||
return testcompilationtask_id;
|
void setEnvironments(String* environments_in) { environments = String(environments_in->getCharArray()); }
|
||||||
}
|
void setUsrPar(String* usr_par_in) { usr_par = String(usr_par_in->getCharArray(), '|'); }
|
||||||
void setMatrix(String* matrix_in) {
|
void setArgs(String* args_in) { args = String(args_in->getCharArray()); }
|
||||||
matrix = String(matrix_in->getCharArray());
|
|
||||||
}
|
|
||||||
void setEnvironments(String* environments_in) {
|
|
||||||
environments = String(environments_in->getCharArray());
|
|
||||||
}
|
|
||||||
void setUsrPar(String* usr_par_in) {
|
|
||||||
usr_par = String(usr_par_in->getCharArray(), '|');
|
|
||||||
}
|
|
||||||
void setArgs(String* args_in) {
|
|
||||||
args = String(args_in->getCharArray());
|
|
||||||
}
|
|
||||||
void setParent(CompilationTask* parent_in) {
|
void setParent(CompilationTask* parent_in) {
|
||||||
parent = parent_in;
|
parent = parent_in;
|
||||||
binary_name = "spf_" + packageId+"_"+String(id) + "_" + matrix.Replace(' ', '_');
|
binary_name = "spf_" + packageId+"_"+String(id) + "_" + matrix.Replace(' ', '_');
|
||||||
}
|
}
|
||||||
CompilationTask* getParent() {
|
|
||||||
return parent;
|
CompilationTask* getParent() { return parent; }
|
||||||
}
|
|
||||||
RunTask(Text* lines, int offset) :Task(lines, offset) {
|
RunTask(Text* lines, int offset) :Task(lines, offset) {
|
||||||
setTestCompilationTaskId(lines->get(offset + 2));
|
setTestCompilationTaskId(lines->get(offset + 2));
|
||||||
setMatrix(lines->get(offset + 3));
|
setMatrix(lines->get(offset + 3));
|
||||||
@@ -61,6 +50,16 @@ public:
|
|||||||
//todo setStartCommand
|
//todo setStartCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RunTask(const nlohmann::json& data) : Task(data) {
|
||||||
|
testcompilationtask_id = Utils::getValue<int>(data, "compilation_task_id");
|
||||||
|
matrix = Utils::getValue<string>(data, "matrix");
|
||||||
|
environments = Utils::getValue<string>(data, "environments");
|
||||||
|
usr_par = Utils::getValue<string>(data, "usr_par");
|
||||||
|
args = Utils::getValue<string>(data, "args");
|
||||||
|
kernels = Utils::getValue<int>(data, "kernels");
|
||||||
|
//todo setStartCommand
|
||||||
|
}
|
||||||
|
|
||||||
String getLaunchScriptText() override {
|
String getLaunchScriptText() override {
|
||||||
String modules = userWorkspace + "/modules";
|
String modules = userWorkspace + "/modules";
|
||||||
String starterCall = modules + "/starter";
|
String starterCall = modules + "/starter";
|
||||||
|
|||||||
@@ -16,13 +16,11 @@ public:
|
|||||||
|
|
||||||
String(const char* s, char ps) {
|
String(const char* s, char ps) {
|
||||||
body = s;
|
body = s;
|
||||||
for (long i = 0; i < getLength(); ++i)
|
for (int i = 0; i < getLength(); ++i)
|
||||||
body[i] = (s[i] == ps) ? '\n' : s[i];
|
body[i] = (s[i] == ps) ? '\n' : s[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
String(int s) { body = to_string(s); }
|
String(int s) { body = to_string(s); }
|
||||||
String(long s) { body = to_string(s); }
|
|
||||||
String(long long s) { body = to_string(s); }
|
|
||||||
String (string s){ body = s;}
|
String (string s){ body = s;}
|
||||||
|
|
||||||
void println() const { printf("[%s]\n", body.c_str()); }
|
void println() const { printf("[%s]\n", body.c_str()); }
|
||||||
|
|||||||
@@ -4,18 +4,22 @@
|
|||||||
#include <set>
|
#include <set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include "File.h"
|
#include <time.h>
|
||||||
#include "Task.h"
|
|
||||||
#include "Array.h"
|
|
||||||
#include "Utils.h"
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
#include <time.h>
|
|
||||||
|
#include "File.h"
|
||||||
|
#include "Task.h"
|
||||||
|
#include "Array.h"
|
||||||
|
#include "Utils.h"
|
||||||
|
#include "json.hpp"
|
||||||
|
|
||||||
enum SupervisorState {
|
enum SupervisorState {
|
||||||
WorkspacesCreation, //0
|
WorkspacesCreation, //0
|
||||||
@@ -58,12 +62,13 @@ public:
|
|||||||
for (auto& elem : this->getElements())
|
for (auto& elem : this->getElements())
|
||||||
elem->print();
|
elem->print();
|
||||||
}
|
}
|
||||||
|
|
||||||
void init(const char* fileName, int recordSize) {
|
void init(const char* fileName, int recordSize) {
|
||||||
state = WorkspacesCreation;
|
state = WorkspacesCreation;
|
||||||
File* packedTasks = new File(fileName);
|
File* packedTasks = new File(fileName);
|
||||||
Text* lines = packedTasks->readLines();
|
Text* lines = packedTasks->readLines();
|
||||||
|
|
||||||
const long length = lines->getLength() / recordSize;
|
const int length = lines->getLength() / recordSize;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
for (int i = 0; i < length; ++i) {
|
for (int i = 0; i < length; ++i) {
|
||||||
this->add(new T(lines, offset));
|
this->add(new T(lines, offset));
|
||||||
@@ -72,6 +77,31 @@ public:
|
|||||||
delete packedTasks;
|
delete packedTasks;
|
||||||
delete lines;
|
delete lines;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void init(const char* fileName) {
|
||||||
|
state = WorkspacesCreation;
|
||||||
|
|
||||||
|
std::ifstream file(fileName);
|
||||||
|
if (!file.is_open()) {
|
||||||
|
printf("can not open file %s\n", fileName);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
nlohmann::json data = nlohmann::json::parse(file);
|
||||||
|
file.close();
|
||||||
|
|
||||||
|
if (data.contains("tasks")) {
|
||||||
|
auto tasks = data["tasks"];
|
||||||
|
int length = tasks.size();
|
||||||
|
for (size_t i = 0; i < tasks.size(); ++i)
|
||||||
|
this->add(new T(tasks[i]));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printf("can not fine object 'tasks'\n");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void changeState() {
|
void changeState() {
|
||||||
switch (this->state) {
|
switch (this->state) {
|
||||||
case WorkspacesCreation:
|
case WorkspacesCreation:
|
||||||
@@ -170,7 +200,7 @@ public:
|
|||||||
killed = false;
|
killed = false;
|
||||||
|
|
||||||
while (activeTasks) {
|
while (activeTasks) {
|
||||||
long oldActiveTasks = activeTasks;
|
int oldActiveTasks = activeTasks;
|
||||||
emptyKeys.clear();
|
emptyKeys.clear();
|
||||||
toDel.clear();
|
toDel.clear();
|
||||||
|
|
||||||
@@ -279,7 +309,7 @@ public:
|
|||||||
void saveState() {
|
void saveState() {
|
||||||
saveState(getStatePrefix() + printState());
|
saveState(getStatePrefix() + printState());
|
||||||
}
|
}
|
||||||
void saveProgress(long long persentDone) {
|
void saveProgress(size_t persentDone) {
|
||||||
FILE* f = fopen("progress", "w");
|
FILE* f = fopen("progress", "w");
|
||||||
if (f) {
|
if (f) {
|
||||||
fprintf(f, "%lld", persentDone);
|
fprintf(f, "%lld", persentDone);
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "File.h"
|
#include "File.h"
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
@@ -38,7 +40,7 @@ enum TestType {
|
|||||||
|
|
||||||
class Task {
|
class Task {
|
||||||
protected:
|
protected:
|
||||||
long id;
|
int id;
|
||||||
|
|
||||||
int maxtime;
|
int maxtime;
|
||||||
int kernels; //получение зависит от типа задачи.
|
int kernels; //получение зависит от типа задачи.
|
||||||
@@ -101,22 +103,32 @@ public:
|
|||||||
void setStart() { start_time = std::chrono::system_clock::now(); }
|
void setStart() { start_time = std::chrono::system_clock::now(); }
|
||||||
double getTotalTime() const { return total_time; }
|
double getTotalTime() const { return total_time; }
|
||||||
|
|
||||||
long getId() { return id; }
|
int getId() { return id; }
|
||||||
long setId(String* id_s) {
|
int setId(String* id_s) {
|
||||||
return id = strtol(id_s->getCharArray(), NULL, 10);
|
return id = strtol(id_s->getCharArray(), NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
int getMaxtime() { return maxtime; }
|
int getMaxtime() { return maxtime; }
|
||||||
int setMaxtime(String* maxtime_s) {
|
int setMaxtime(String* maxtime_s) { return maxtime = atoi(maxtime_s->getCharArray()); }
|
||||||
return maxtime = atoi(maxtime_s->getCharArray());
|
|
||||||
}
|
|
||||||
const String& getWorkspace() { return workspace; }
|
const String& getWorkspace() { return workspace; }
|
||||||
|
|
||||||
TaskState getState() { return state; }
|
TaskState getState() { return state; }
|
||||||
TaskState setState(TaskState state_in) { return state = state_in; }
|
TaskState setState(TaskState state_in) { return state = state_in; }
|
||||||
|
|
||||||
Task(Text* lines, int offset) {
|
Task(Text* lines, int offset) {
|
||||||
setId(lines->get(offset));
|
setId(lines->get(offset));
|
||||||
setMaxtime(lines->get(offset + 1));
|
setMaxtime(lines->get(offset + 1));
|
||||||
workspace = packageWorkspace + "/" + String(id);
|
workspace = packageWorkspace + "/" + String(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Task(const nlohmann::json& data) {
|
||||||
|
this->id = Utils::getValue<int>(data, "id");
|
||||||
|
this->maxtime = Utils::getValue<int>(data, "maxtime");
|
||||||
|
|
||||||
|
workspace = packageWorkspace + "/" + String(id);
|
||||||
|
}
|
||||||
|
|
||||||
virtual void print() const = 0;
|
virtual void print() const = 0;
|
||||||
//-
|
//-
|
||||||
virtual void prepareWorkspace() {}
|
virtual void prepareWorkspace() {}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ public:
|
|||||||
printf("text length=%ld\n", this->getLength());
|
printf("text length=%ld\n", this->getLength());
|
||||||
|
|
||||||
auto elems = this->getElements();
|
auto elems = this->getElements();
|
||||||
for (long i = 0; i < elems.size(); ++i) {
|
for (int i = 0; i < elems.size(); ++i) {
|
||||||
printf("i=%ld; [%s]\n", i, elems[i]->getCharArray());
|
printf("i=%ld; [%s]\n", i, elems[i]->getCharArray());
|
||||||
// elements[i]->println();
|
// elements[i]->println();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
#include "json.hpp"
|
||||||
|
|
||||||
#if __cplusplus >= 201703L
|
#if __cplusplus >= 201703L
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
@@ -119,4 +120,17 @@ static String getFileName(const String& path){
|
|||||||
}
|
}
|
||||||
return String();
|
return String();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
static T getValue(const nlohmann::json& data, const string& obj) {
|
||||||
|
T retval;
|
||||||
|
if (data.contains(obj))
|
||||||
|
retval = data[obj];
|
||||||
|
else {
|
||||||
|
printf("can not fine object '%s'\n", obj.c_str());
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
22874
src/files/json.hpp
Normal file
22874
src/files/json.hpp
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1 +1 @@
|
|||||||
24
|
25
|
||||||
Reference in New Issue
Block a user