промежуточный. выкинул старые объекты и функционал. Осталось восстановить эксель, и отображение пакетов Сапфор
This commit is contained in:
@@ -41,13 +41,12 @@ public class DVMPackageDBTable extends iDBTable<DVMPackage> {
|
||||
@Override
|
||||
public void ShowCurrentObject() throws Exception {
|
||||
super.ShowCurrentObject();
|
||||
// Global.testingServer.db.dvmRunTasks.ShowDVMPackage(getCurrent());
|
||||
UI.getMainWindow().getTestingWindow().DropTestRunTasksComparison();
|
||||
}
|
||||
@Override
|
||||
public void ShowNoCurrentObject() throws Exception {
|
||||
super.ShowNoCurrentObject();
|
||||
// Global.testingServer.db.dvmRunTasks.ShowNoPackage();
|
||||
Global.testingServer.db.dvmRunTasks.ShowNoPackage();
|
||||
UI.getMainWindow().getTestingWindow().DropTestRunTasksComparison();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,20 +1,14 @@
|
||||
package TestingSystem.DVM.DVMTasks;
|
||||
import Common.Constants;
|
||||
import Common.Current;
|
||||
import Common.Database.DBObject;
|
||||
import Common.Global;
|
||||
import Common.Utils.Utils;
|
||||
import GlobalData.Tasks.TaskState;
|
||||
import ProjectData.LanguageName;
|
||||
import TestingSystem.Common.Group.Group;
|
||||
import TestingSystem.Common.Test.Test;
|
||||
import TestingSystem.Common.Test.TestType;
|
||||
import TestingSystem.DVM.Configuration.Configuration;
|
||||
import TestingSystem.DVM.DVMPackage.DVMPackage;
|
||||
import TestingSystem.DVM.Tasks.TestRunTask;
|
||||
import TestingSystem.DVM.Tasks.TestTask;
|
||||
import com.google.gson.annotations.Expose;
|
||||
import com.sun.org.glassfish.gmbal.Description;
|
||||
|
||||
import java.util.Vector;
|
||||
public class DVMRunTask extends DVMTask {
|
||||
@@ -114,5 +108,24 @@ public class DVMRunTask extends DVMTask {
|
||||
public String getUsrPar() {
|
||||
return usr_par.replace("\n", ";");
|
||||
}
|
||||
@Override
|
||||
public boolean isVisible() {
|
||||
return Global.testingServer.db.dvmRunTasks.applyFilters(this);
|
||||
}
|
||||
public String getCompilationOutput() {
|
||||
return "?";
|
||||
}
|
||||
public String getCompilationErrors() {
|
||||
return "?";
|
||||
}
|
||||
public String getOutput() {
|
||||
return "?";
|
||||
}
|
||||
public String getErrors() {
|
||||
return "?";
|
||||
}
|
||||
public String getStatistic() {
|
||||
return "?";
|
||||
}
|
||||
}
|
||||
//--
|
||||
|
||||
23
src/TestingSystem/DVM/DVMTasks/DVMRunTasksBar.java
Normal file
23
src/TestingSystem/DVM/DVMTasks/DVMRunTasksBar.java
Normal file
@@ -0,0 +1,23 @@
|
||||
package TestingSystem.DVM.DVMTasks;
|
||||
import Common.Database.DataSet;
|
||||
import Common.UI.Menus_2023.DataMenuBar;
|
||||
import Visual_DVM_2021.Passes.PassCode_2021;
|
||||
|
||||
import javax.swing.*;
|
||||
public class DVMRunTasksBar extends DataMenuBar {
|
||||
JMenuBar filters= null;
|
||||
public void DropFilters() {
|
||||
if (filters != null) {
|
||||
remove(filters);
|
||||
filters = null;
|
||||
}
|
||||
revalidate();
|
||||
repaint();
|
||||
}
|
||||
public void addFilters(JMenu cFilterMenu, JMenu rFilterMenu) {
|
||||
filters= addMenus(cFilterMenu, rFilterMenu);
|
||||
}
|
||||
public DVMRunTasksBar() {
|
||||
super("задачи", PassCode_2021.DownloadTaskTest);
|
||||
}
|
||||
}
|
||||
@@ -1,35 +1,35 @@
|
||||
package TestingSystem.DVM.Tasks;
|
||||
package TestingSystem.DVM.DVMTasks;
|
||||
import Common.Current;
|
||||
import Common.Database.DBTable;
|
||||
import Common.Database.DataSet;
|
||||
import Common.Database.TableFilter;
|
||||
import Common.UI.DataSetControlForm;
|
||||
import Common.UI.Menus_2023.TestRunTasksMenuBar.TestRunTasksMenuBar;
|
||||
import Common.UI.Menus_2023.VisualiserMenu;
|
||||
import Common.UI.UI;
|
||||
import GlobalData.Tasks.TaskState;
|
||||
import TestingSystem.DVM.DVMPackage.DVMPackage;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Comparator;
|
||||
import java.util.Vector;
|
||||
|
||||
import static Common.UI.Tables.TableRenderers.RendererProgress;
|
||||
import static Common.UI.Tables.TableRenderers.RendererStatusEnum;
|
||||
public class TestRunTasksDBTable extends DBTable<Long, TestRunTask> {
|
||||
public class DVMRunTasksSet extends DataSet<Integer, DVMRunTask> {
|
||||
//todo обобщить бы наличие фильтров для всех таблиц.
|
||||
public Vector<TableFilter<TestRunTask>> compilationFilters;
|
||||
public Vector<TableFilter<TestRunTask>> runFilters;
|
||||
public TestRunTasksDBTable() {
|
||||
super(Long.class, TestRunTask.class);
|
||||
//--
|
||||
public Vector<TableFilter<DVMRunTask>> compilationFilters;
|
||||
public Vector<TableFilter<DVMRunTask>> runFilters;
|
||||
DVMPackage target;
|
||||
public DVMRunTasksSet() {
|
||||
super(Integer.class, DVMRunTask.class);
|
||||
//todo обобщить бы наличие фильтров для всех таблиц.
|
||||
if (Current.hasUI()) {
|
||||
compilationFilters = new Vector<>();
|
||||
runFilters = new Vector<>();
|
||||
//--
|
||||
for (TaskState state : TaskState.values()) {
|
||||
if (state.isVisible()) {
|
||||
compilationFilters.add(new TableFilter<TestRunTask>(this, state.getDescription()) {
|
||||
compilationFilters.add(new TableFilter<DVMRunTask>(this, state.getDescription()) {
|
||||
@Override
|
||||
protected boolean validate(TestRunTask object) {
|
||||
protected boolean validate(DVMRunTask object) {
|
||||
return object.compilation_state.equals(state);
|
||||
}
|
||||
});
|
||||
@@ -38,9 +38,9 @@ public class TestRunTasksDBTable extends DBTable<Long, TestRunTask> {
|
||||
//--
|
||||
for (TaskState state : TaskState.values()) {
|
||||
if (state.isVisible()) {
|
||||
runFilters.add(new TableFilter<TestRunTask>(this, state.getDescription()) {
|
||||
runFilters.add(new TableFilter<DVMRunTask>(this, state.getDescription()) {
|
||||
@Override
|
||||
protected boolean validate(TestRunTask object) {
|
||||
protected boolean validate(DVMRunTask object) {
|
||||
return object.state.equals(state);
|
||||
}
|
||||
});
|
||||
@@ -49,20 +49,20 @@ public class TestRunTasksDBTable extends DBTable<Long, TestRunTask> {
|
||||
}
|
||||
}
|
||||
public void ResetFiltersCount() {
|
||||
for (TableFilter<TestRunTask> filter : compilationFilters)
|
||||
for (TableFilter<DVMRunTask> filter : compilationFilters)
|
||||
filter.count = 0;
|
||||
for (TableFilter<TestRunTask> filter : runFilters)
|
||||
for (TableFilter<DVMRunTask> filter : runFilters)
|
||||
filter.count = 0;
|
||||
}
|
||||
public void ShowFiltersCount() {
|
||||
for (TableFilter<TestRunTask> filter : compilationFilters) {
|
||||
for (TableFilter<DVMRunTask> filter : compilationFilters) {
|
||||
filter.ShowDescriptionAndCount();
|
||||
}
|
||||
for (TableFilter<TestRunTask> filter : runFilters) {
|
||||
for (TableFilter<DVMRunTask> filter : runFilters) {
|
||||
filter.ShowDescriptionAndCount();
|
||||
}
|
||||
}
|
||||
public boolean applyFilters(TestRunTask object) {
|
||||
public boolean applyFilters(DVMRunTask object) {
|
||||
boolean compilation = false;
|
||||
//возвращать сразу нельзя. иначе количество не посчитает.
|
||||
for (TableFilter filter : compilationFilters) {
|
||||
@@ -76,7 +76,41 @@ public class TestRunTasksDBTable extends DBTable<Long, TestRunTask> {
|
||||
run |= true;
|
||||
}
|
||||
}
|
||||
return compilation&&run;
|
||||
return compilation && run;
|
||||
}
|
||||
@Override
|
||||
public void mountUI(JPanel content_in) {
|
||||
super.mountUI(content_in);
|
||||
//-
|
||||
DVMRunTasksBar menuBar = (DVMRunTasksBar) UI.menuBars.get(getClass());
|
||||
menuBar.DropFilters();
|
||||
//----
|
||||
menuBar.addFilters(
|
||||
new VisualiserMenu("Компиляция", "/icons/Filter.png", true) {
|
||||
{
|
||||
for (TableFilter filter : compilationFilters)
|
||||
add(filter.menuItem);
|
||||
}
|
||||
},
|
||||
new VisualiserMenu("Запуск", "/icons/Filter.png", true) {
|
||||
{
|
||||
for (TableFilter filter : runFilters)
|
||||
add(filter.menuItem);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
@Override
|
||||
public void ShowUI() {
|
||||
ResetFiltersCount();
|
||||
super.ShowUI();
|
||||
ShowFiltersCount();
|
||||
}
|
||||
@Override
|
||||
public void ShowUI(Object key) {
|
||||
ResetFiltersCount();
|
||||
super.ShowUI(key);
|
||||
ShowFiltersCount();
|
||||
}
|
||||
@Override
|
||||
public String getSingleDescription() {
|
||||
@@ -102,28 +136,6 @@ public class TestRunTasksDBTable extends DBTable<Long, TestRunTask> {
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public void mountUI(JPanel content_in) {
|
||||
super.mountUI(content_in);
|
||||
//-
|
||||
TestRunTasksMenuBar menuBar = (TestRunTasksMenuBar) UI.menuBars.get(getClass());
|
||||
menuBar.DropFilters();
|
||||
//----
|
||||
menuBar.addFilters(
|
||||
new VisualiserMenu("Компиляция", "/icons/Filter.png", true) {
|
||||
{
|
||||
for (TableFilter filter : compilationFilters)
|
||||
add(filter.menuItem);
|
||||
}
|
||||
},
|
||||
new VisualiserMenu("Запуск", "/icons/Filter.png", true) {
|
||||
{
|
||||
for (TableFilter filter : runFilters)
|
||||
add(filter.menuItem);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
@Override
|
||||
public String[] getUIColumnNames() {
|
||||
return new String[]{
|
||||
"Тест",
|
||||
@@ -141,7 +153,7 @@ public class TestRunTasksDBTable extends DBTable<Long, TestRunTask> {
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public Object getFieldAt(TestRunTask object, int columnIndex) {
|
||||
public Object getFieldAt(DVMRunTask object, int columnIndex) {
|
||||
switch (columnIndex) {
|
||||
case 2:
|
||||
return object.test_description;
|
||||
@@ -172,23 +184,37 @@ public class TestRunTasksDBTable extends DBTable<Long, TestRunTask> {
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public Comparator<TestRunTask> getComparator() {
|
||||
return (o1, o2) -> -o1.getChangeDate().compareTo(o2.getChangeDate());
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
return Current.TestRunTask;
|
||||
return Current.DVMRunTask;
|
||||
}
|
||||
@Override
|
||||
public void ShowUI() {
|
||||
ResetFiltersCount();
|
||||
super.ShowUI();
|
||||
ShowFiltersCount();
|
||||
public void ShowDVMPackage(DVMPackage dvmPackage) {
|
||||
target = dvmPackage;
|
||||
ClearUI();
|
||||
Data.clear();
|
||||
if (dvmPackage.package_json == null) {
|
||||
if (dvmPackage.getJsonFile().exists()) {
|
||||
try {
|
||||
dvmPackage.readJson();
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dvmPackage.package_json != null) {
|
||||
for (DVMCompilationTask compilationTask : dvmPackage.package_json.compilationTasks) {
|
||||
for (DVMRunTask runTask : compilationTask.runTasks) {
|
||||
Data.put(runTask.id, runTask);
|
||||
}
|
||||
}
|
||||
ShowUI();
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void ShowUI(Object key) {
|
||||
ResetFiltersCount();
|
||||
super.ShowUI(key);
|
||||
ShowFiltersCount();
|
||||
public void ShowNoPackage() {
|
||||
ClearUI();
|
||||
Data.clear();
|
||||
if (target != null) {
|
||||
target.destructor();
|
||||
target = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,115 +0,0 @@
|
||||
package TestingSystem.DVM.DVMTasksSet;
|
||||
import Common.Current;
|
||||
import Common.Database.DataSet;
|
||||
import Common.UI.DataSetControlForm;
|
||||
import TestingSystem.DVM.DVMPackage.DVMPackage;
|
||||
import TestingSystem.DVM.DVMTasks.DVMCompilationTask;
|
||||
import TestingSystem.DVM.DVMTasks.DVMRunTask;
|
||||
|
||||
import static Common.UI.Tables.TableRenderers.RendererProgress;
|
||||
import static Common.UI.Tables.TableRenderers.RendererStatusEnum;
|
||||
public class DVMRunTasksSet extends DataSet<Integer, DVMRunTask> {
|
||||
public DVMRunTasksSet() {
|
||||
super(Integer.class, DVMRunTask.class);
|
||||
}
|
||||
@Override
|
||||
public String getSingleDescription() {
|
||||
return "задача";
|
||||
}
|
||||
@Override
|
||||
public String getPluralDescription() {
|
||||
return "задачи";
|
||||
}
|
||||
@Override
|
||||
protected DataSetControlForm createUI() {
|
||||
return new DataSetControlForm(this) {
|
||||
@Override
|
||||
public boolean hasCheckBox() {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
protected void AdditionalInitColumns() {
|
||||
columns.get(5).setRenderer(RendererStatusEnum);
|
||||
columns.get(6).setRenderer(RendererStatusEnum);
|
||||
columns.get(13).setRenderer(RendererProgress);
|
||||
}
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public String[] getUIColumnNames() {
|
||||
return new String[]{
|
||||
"Тест",
|
||||
"Язык",
|
||||
"Флаги",
|
||||
"Компиляция",
|
||||
"Запуск",
|
||||
"Матрица",
|
||||
"Окружение",
|
||||
"usr.par",
|
||||
"Время компиляции (с)",
|
||||
"Время запуска (с)",
|
||||
"Чистое время (с)",
|
||||
"Прогресс",
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public Object getFieldAt(DVMRunTask object, int columnIndex) {
|
||||
switch (columnIndex) {
|
||||
case 2:
|
||||
return object.test_description;
|
||||
case 3:
|
||||
return object.language;
|
||||
case 4:
|
||||
return object.flags;
|
||||
case 5:
|
||||
return object.compilation_state;
|
||||
case 6:
|
||||
return object.state;
|
||||
case 7:
|
||||
return object.matrix;
|
||||
case 8:
|
||||
return object.getEnvironments();
|
||||
case 9:
|
||||
return object.getUsrPar();
|
||||
case 10:
|
||||
return object.compilation_time;
|
||||
case 11:
|
||||
return object.Time;
|
||||
case 12:
|
||||
return object.CleanTime;
|
||||
case 13:
|
||||
return object.progress;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
return Current.DVMRunTask;
|
||||
}
|
||||
public void ShowDVMPackage(DVMPackage dvmPackage) {
|
||||
ClearUI();
|
||||
Data.clear();
|
||||
if (dvmPackage.package_json == null) {
|
||||
if (dvmPackage.getJsonFile().exists()) {
|
||||
try {
|
||||
dvmPackage.readJson();
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dvmPackage.package_json != null) {
|
||||
for (DVMCompilationTask compilationTask : dvmPackage.package_json.compilationTasks) {
|
||||
for (DVMRunTask runTask : compilationTask.runTasks) {
|
||||
Data.put(runTask.id, runTask);
|
||||
}
|
||||
}
|
||||
ShowUI();
|
||||
}
|
||||
}
|
||||
public void ShowNoPackage() {
|
||||
ClearUI();
|
||||
Data.clear();
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
package TestingSystem.DVM.Tasks;
|
||||
import Common.Database.DBObject;
|
||||
import TestingSystem.DVM.Configuration.Configuration;
|
||||
import TestingSystem.Common.Group.Group;
|
||||
import TestingSystem.Common.Test.Test;
|
||||
import com.sun.org.glassfish.gmbal.Description;
|
||||
|
||||
import java.util.Vector;
|
||||
//-
|
||||
public class TestCompilationTask extends TestTask {
|
||||
@Description("DEFAULT ''")
|
||||
public String makefile_text = "";
|
||||
@Description("DEFAULT ''")
|
||||
public String test_home = ""; //место где лежит код теста.
|
||||
@Description("IGNORE")
|
||||
public Vector<TestRunTask> runTasks = null;
|
||||
@Override
|
||||
public Vector<String> pack(int kernels_in) {
|
||||
Vector<String> res = new Vector<>();
|
||||
res.add(String.valueOf(id)); //1
|
||||
res.add(String.valueOf(maxtime)); //2
|
||||
res.add(String.valueOf(test_id)); //3
|
||||
res.add(makefile_text.replace("\n", "|")); //4
|
||||
//игнор аргумента. ядро всегда одно.
|
||||
return res;
|
||||
}
|
||||
public TestCompilationTask() {
|
||||
}
|
||||
public TestCompilationTask(Configuration configuration, Group group, Test test, String flags_in) {
|
||||
super(configuration, group, test, flags_in);
|
||||
flags = flags_in;
|
||||
maxtime = configuration.c_maxtime;
|
||||
}
|
||||
@Override
|
||||
public void SynchronizeFields(DBObject src) {
|
||||
super.SynchronizeFields(src);
|
||||
TestCompilationTask ct = (TestCompilationTask) src;
|
||||
makefile_text = ct.makefile_text;
|
||||
test_home = ct.test_home;
|
||||
if (ct.runTasks == null) this.runTasks = null;
|
||||
else {
|
||||
this.runTasks = new Vector<>();
|
||||
for (TestRunTask runTask : ct.runTasks) {
|
||||
this.runTasks.add(new TestRunTask(runTask));
|
||||
}
|
||||
}
|
||||
}
|
||||
public TestCompilationTask(TestCompilationTask src) {
|
||||
this.SynchronizeFields(src);
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package TestingSystem.DVM.Tasks;
|
||||
import Common.Current;
|
||||
import Common.Database.DBTable;
|
||||
public class TestCompilationTasksDBTable extends DBTable<Integer, TestCompilationTask> {
|
||||
public TestCompilationTasksDBTable() {
|
||||
super(Integer.class, TestCompilationTask.class);
|
||||
}
|
||||
@Override
|
||||
public String getSingleDescription() {
|
||||
return "задачи на компиляцию тестов";
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
return Current.TestCompilationTask;
|
||||
}
|
||||
}
|
||||
@@ -1,117 +0,0 @@
|
||||
package TestingSystem.DVM.Tasks;
|
||||
import Common.Constants;
|
||||
import Common.Current;
|
||||
import Common.Database.DBObject;
|
||||
import Common.Global;
|
||||
import GlobalData.Tasks.TaskState;
|
||||
import ProjectData.LanguageName;
|
||||
import TestingSystem.Common.Group.Group;
|
||||
import TestingSystem.Common.Test.Test;
|
||||
import TestingSystem.DVM.Configuration.Configuration;
|
||||
import com.sun.org.glassfish.gmbal.Description;
|
||||
|
||||
import java.util.Vector;
|
||||
public class TestRunTask extends TestTask {
|
||||
//не факт что тут нужно переводить на полный интерфейс. достаточно убрать фильтрацию
|
||||
public long testcompilationtask_id = Constants.Nan;
|
||||
public String matrix = "";
|
||||
@Description("DEFAULT ''")
|
||||
public String args = "";
|
||||
public double CleanTime = 0.0;
|
||||
@Description("DEFAULT 0")
|
||||
public int progress = 0;
|
||||
public LanguageName language = LanguageName.fortran;
|
||||
public int cube = 1;
|
||||
public int min_dim = 1;
|
||||
public int max_dim = 1;
|
||||
public String environments = "";
|
||||
public String usr_par = "";
|
||||
public int compilation_maxtime = 40;
|
||||
public String compilation_output = "";
|
||||
public String compilation_errors = "";
|
||||
public TaskState compilation_state = TaskState.Waiting;
|
||||
public double compilation_time = 0.0;
|
||||
public String statistic = "";
|
||||
public String jsonStatistic = "";
|
||||
public TestRunTask(Configuration configuration,
|
||||
Group group, Test test,
|
||||
String matrix_in, String flags_in,
|
||||
String environments_in,
|
||||
String par_in) {
|
||||
super(configuration, group, test, flags_in);
|
||||
//--------------------------
|
||||
//инфа о компиляции.
|
||||
language = group.language;
|
||||
compilation_maxtime = configuration.c_maxtime;
|
||||
compilation_output = "";
|
||||
compilation_errors = "";
|
||||
compilation_state = TaskState.Waiting;
|
||||
//инфа о запуске
|
||||
cube = configuration.cube;
|
||||
min_dim = configuration.max_dim_proc_count;
|
||||
max_dim = configuration.max_dim_proc_count;
|
||||
maxtime = configuration.r_maxtime;
|
||||
environments = environments_in;
|
||||
usr_par = par_in;
|
||||
args = test.args;
|
||||
//---------
|
||||
matrix = matrix_in;
|
||||
}
|
||||
public TestRunTask() {
|
||||
}
|
||||
@Override
|
||||
public void SynchronizeFields(DBObject src) {
|
||||
super.SynchronizeFields(src);
|
||||
TestRunTask rt = (TestRunTask) src;
|
||||
testcompilationtask_id = rt.testcompilationtask_id;
|
||||
matrix = rt.matrix;
|
||||
CleanTime = rt.CleanTime;
|
||||
progress = rt.progress;
|
||||
language = rt.language;
|
||||
cube = rt.cube;
|
||||
min_dim = rt.min_dim;
|
||||
max_dim = rt.max_dim;
|
||||
maxtime = rt.maxtime;
|
||||
environments = rt.environments;
|
||||
usr_par = rt.usr_par;
|
||||
compilation_maxtime = rt.compilation_maxtime;
|
||||
compilation_output = rt.compilation_output;
|
||||
compilation_errors = rt.compilation_errors;
|
||||
compilation_state = rt.compilation_state;
|
||||
compilation_time = rt.compilation_time;
|
||||
statistic = rt.statistic;
|
||||
args = rt.args;
|
||||
jsonStatistic = rt.jsonStatistic;
|
||||
}
|
||||
public TestRunTask(TestRunTask src) {
|
||||
this.SynchronizeFields(src);
|
||||
}
|
||||
//-
|
||||
@Override
|
||||
public Vector<String> pack(int kernels_in) {
|
||||
Vector<String> res = new Vector<>();
|
||||
res.add(String.valueOf(id)); //1
|
||||
res.add(String.valueOf(maxtime)); //2
|
||||
res.add(String.valueOf(testcompilationtask_id)); //3
|
||||
res.add(matrix); //4
|
||||
res.add(environments); //5
|
||||
res.add(usr_par.replace("\n", "|")); //6
|
||||
res.add(args); //7
|
||||
res.add(String.valueOf(kernels_in)); //8
|
||||
return res;
|
||||
}
|
||||
//---
|
||||
public boolean isVisible() {
|
||||
return
|
||||
Current.HasTasksPackage() &&
|
||||
(taskspackage_id==Current.getTasksPackage().id) &&
|
||||
Global.testingServer.account_db.testRunTasks.applyFilters(this);
|
||||
}
|
||||
public String getEnvironments() {
|
||||
return environments.replace("\n", ";");
|
||||
}
|
||||
public String getUsrPar() {
|
||||
return usr_par.replace("\n", ";");
|
||||
}
|
||||
//--
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
package TestingSystem.DVM.Tasks;
|
||||
import Common.Constants;
|
||||
import Common.Database.DBObject;
|
||||
import GlobalData.Tasks.TaskState;
|
||||
import TestingSystem.DVM.Configuration.Configuration;
|
||||
import TestingSystem.Common.Group.Group;
|
||||
import TestingSystem.Common.Test.Test;
|
||||
import TestingSystem.Common.Test.TestType;
|
||||
import com.sun.org.glassfish.gmbal.Description;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Vector;
|
||||
//тут все поля должны быть текстовыми. никаких ссылок по ид. мало ли, группу удалят
|
||||
public class TestTask extends DBObject {
|
||||
@Description("PRIMARY KEY, UNIQUE")
|
||||
public long id = Constants.Nan;
|
||||
@Description("DEFAULT '-1'")
|
||||
public long taskspackage_id = Constants.Nan;
|
||||
@Description("DEFAULT -1")
|
||||
public int group_id = Constants.Nan;
|
||||
@Description("DEFAULT ''")
|
||||
public String group_description = ""; //видимое имя группы для юзера
|
||||
@Description("DEFAULT -1")
|
||||
public int test_id = Constants.Nan; //ключ - будет генерироваться автоматически.
|
||||
@Description("DEFAULT ''")
|
||||
public String test_description = ""; //видимое имя теста для юзера
|
||||
@Description("DEFAULT ''")
|
||||
public String flags = "";
|
||||
@Description("DEFAULT 'Inactive'")
|
||||
public TaskState state = TaskState.Inactive;
|
||||
@Description("DEFAULT ''")
|
||||
public String PID = "";
|
||||
@Description("DEFAULT 40")
|
||||
public int maxtime = 40;
|
||||
@Description("DEFAULT ''")
|
||||
public String remote_workspace = ""; //вывести. память экономим.
|
||||
@Description("DEFAULT ''")
|
||||
public String binary_name = ""; //вывести. имя генерим по ид задачи и матрице.
|
||||
@Description("DEFAULT 'Default'")
|
||||
public TestType test_type = TestType.Default;
|
||||
//результаты-------------------------------
|
||||
public double Time; //время выполнения.
|
||||
public long StartDate = 0; //дата начала выполнения
|
||||
public long ChangeDate = 0;//дата изменения
|
||||
@Description("DEFAULT ''")
|
||||
public String output = "";
|
||||
@Description("DEFAULT ''")
|
||||
public String errors = "";
|
||||
//------------------------------------------------------
|
||||
@Override
|
||||
public Object getPK() {
|
||||
return id;
|
||||
}
|
||||
public Date getChangeDate() {
|
||||
return new Date(ChangeDate);
|
||||
}
|
||||
//--->>>
|
||||
@Override
|
||||
public void SynchronizeFields(DBObject src) {
|
||||
super.SynchronizeFields(src);
|
||||
TestTask t = (TestTask) src;
|
||||
id = t.id;
|
||||
taskspackage_id = t.taskspackage_id;
|
||||
group_id = t.group_id;
|
||||
group_description = t.group_description;
|
||||
test_id = t.test_id;
|
||||
test_description = t.test_description;
|
||||
flags = t.flags;
|
||||
state = t.state;
|
||||
PID = t.PID;
|
||||
maxtime = t.maxtime;
|
||||
remote_workspace = t.remote_workspace;
|
||||
binary_name = t.binary_name;
|
||||
test_type = t.test_type;
|
||||
Time = t.Time;
|
||||
StartDate = t.StartDate;
|
||||
ChangeDate = t.ChangeDate;
|
||||
output = t.output;
|
||||
errors = t.errors;
|
||||
}
|
||||
public TestTask(TestTask src) {
|
||||
this.SynchronizeFields(src);
|
||||
}
|
||||
public TestTask() {
|
||||
}
|
||||
public TestTask(Configuration configuration,
|
||||
Group group, Test test, String flags_in) {
|
||||
group_id = group.id;
|
||||
test_id = test.id;
|
||||
group_description = group.description;
|
||||
test_description = test.description;
|
||||
test_type = group.type;
|
||||
flags = flags_in;
|
||||
}
|
||||
|
||||
public Vector<String> pack (int kernels){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
package TestingSystem.DVM.TasksPackage;
|
||||
import Common.Constants;
|
||||
import Common.Database.DBObject;
|
||||
import GlobalData.Machine.MachineType;
|
||||
import TestingSystem.DVM.Tasks.TestCompilationTask;
|
||||
import com.sun.org.glassfish.gmbal.Description;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Vector;
|
||||
public class TasksPackage extends DBObject {
|
||||
@Description("PRIMARY KEY, UNIQUE")
|
||||
public long id = Constants.Nan;
|
||||
public String pid=""; //сишная часть.
|
||||
public String summary = "";
|
||||
//---
|
||||
public String dvm_version = "?";
|
||||
public String dvm_drv = "";
|
||||
//---
|
||||
public String machine_name = "";
|
||||
public String machine_address = "";
|
||||
public int machine_port = 22;
|
||||
public MachineType machine_type;
|
||||
public String user_name = "";
|
||||
public String user_password;
|
||||
public String user_workspace;
|
||||
//---
|
||||
public int compilationTasksCount = 0;
|
||||
public int runTasksCount = 0;
|
||||
public int needsEmail = 0;
|
||||
//---
|
||||
public double Time; //время выполнения.
|
||||
public long StartDate = 0; //дата начала выполнения
|
||||
public long ChangeDate = 0;//дата окончания выполнения
|
||||
//-
|
||||
@Description("DEFAULT 1")
|
||||
public int kernels = 1;
|
||||
//-
|
||||
public TasksPackageState state = TasksPackageState.Queued;
|
||||
//--
|
||||
//нужно только для публикации задач.
|
||||
public LinkedHashMap<Integer, LinkedHashMap<Integer, Vector<TestCompilationTask>>> sorted_tasks = new LinkedHashMap<>();
|
||||
@Override
|
||||
public Object getPK() {
|
||||
return id;
|
||||
}
|
||||
@Override
|
||||
public void SynchronizeFields(DBObject src) {
|
||||
super.SynchronizeFields(src);
|
||||
TasksPackage tasksPackage = (TasksPackage) src;
|
||||
pid = tasksPackage.pid;
|
||||
summary = tasksPackage.summary;
|
||||
dvm_drv = tasksPackage.dvm_drv;
|
||||
dvm_version = tasksPackage.dvm_version;
|
||||
machine_name = tasksPackage.machine_name;
|
||||
machine_address = tasksPackage.machine_address;
|
||||
machine_port = tasksPackage.machine_port;
|
||||
machine_type = tasksPackage.machine_type;
|
||||
user_name = tasksPackage.user_name;
|
||||
user_workspace = tasksPackage.user_workspace;
|
||||
user_password = tasksPackage.user_password;
|
||||
compilationTasksCount = tasksPackage.compilationTasksCount;
|
||||
runTasksCount = tasksPackage.runTasksCount;
|
||||
needsEmail = tasksPackage.needsEmail;
|
||||
Time = tasksPackage.Time;
|
||||
StartDate = tasksPackage.StartDate;
|
||||
ChangeDate = tasksPackage.ChangeDate;
|
||||
sorted_tasks = new LinkedHashMap<>();
|
||||
kernels = tasksPackage.kernels;
|
||||
state = tasksPackage.state;
|
||||
//-
|
||||
for (int group_id : tasksPackage.sorted_tasks.keySet()) {
|
||||
LinkedHashMap<Integer, Vector<TestCompilationTask>> src_groupTasks = tasksPackage.sorted_tasks.get(group_id);
|
||||
LinkedHashMap<Integer, Vector<TestCompilationTask>> dst_groupTasks = new LinkedHashMap<>();
|
||||
for (int test_id : src_groupTasks.keySet()) {
|
||||
Vector<TestCompilationTask> src_testTasks = src_groupTasks.get(test_id);
|
||||
Vector<TestCompilationTask> dst_testTasks = new Vector<>();
|
||||
for (TestCompilationTask src_testCompilationTask : src_testTasks)
|
||||
dst_testTasks.add(new TestCompilationTask(src_testCompilationTask));
|
||||
dst_groupTasks.put(test_id, dst_testTasks);
|
||||
}
|
||||
sorted_tasks.put(group_id, dst_groupTasks);
|
||||
}
|
||||
}
|
||||
public TasksPackage(TasksPackage src) {
|
||||
this.SynchronizeFields(src);
|
||||
}
|
||||
public TasksPackage() {
|
||||
}
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
package TestingSystem.DVM.TasksPackage;
|
||||
import Common.Current;
|
||||
import Common.Database.*;
|
||||
import Common.UI.DataSetControlForm;
|
||||
import Common.UI.UI;
|
||||
import TestingSystem.DVM.Tasks.TestRunTask;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import static Common.UI.Tables.TableRenderers.RendererDate;
|
||||
import static Common.UI.Tables.TableRenderers.RendererStatusEnum;
|
||||
public class TasksPackageDBTable extends DBTable<Long,TasksPackage> {
|
||||
|
||||
public TasksPackageDBTable() {
|
||||
super(Long.class,TasksPackage.class);
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
return Current.TasksPackage;
|
||||
}
|
||||
@Override
|
||||
public String getSingleDescription() {
|
||||
return "пакет задач";
|
||||
}
|
||||
@Override
|
||||
public String getPluralDescription() {
|
||||
return "пакеты задач";
|
||||
}
|
||||
@Override
|
||||
protected DataSetControlForm createUI() {
|
||||
return new DataSetControlForm(this) {
|
||||
@Override
|
||||
public boolean hasCheckBox() {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
protected void AdditionalInitColumns() {
|
||||
// columns.get(0).setVisible(false);
|
||||
columns.get(7).setRenderer(RendererDate);
|
||||
columns.get(8).setRenderer(RendererDate);
|
||||
columns.get(9).setRenderer(RendererStatusEnum);
|
||||
}
|
||||
@Override
|
||||
public void ShowCurrentObject() throws Exception {
|
||||
super.ShowCurrentObject();
|
||||
UI.getMainWindow().getTestingWindow().DropTestRunTasksComparison();
|
||||
}
|
||||
@Override
|
||||
public void ShowNoCurrentObject() throws Exception {
|
||||
super.ShowNoCurrentObject();
|
||||
UI.getMainWindow().getTestingWindow().DropTestRunTasksComparison();
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public String[] getUIColumnNames() {
|
||||
return new String[]{
|
||||
"Машина",
|
||||
"Пользователь",
|
||||
"DVM",
|
||||
"Задач",
|
||||
|
||||
"Ядер",
|
||||
"Начало",
|
||||
"Изменено",
|
||||
"Статус"
|
||||
};
|
||||
}
|
||||
@Override
|
||||
public Object getFieldAt(TasksPackage object, int columnIndex) {
|
||||
switch (columnIndex) {
|
||||
case 2:
|
||||
return object.machine_address + ":" + object.machine_port;
|
||||
case 3:
|
||||
return object.user_name;
|
||||
case 4:
|
||||
return object.dvm_version;
|
||||
case 5:
|
||||
return object.runTasksCount;
|
||||
case 6:
|
||||
return object.kernels;
|
||||
case 7:
|
||||
return new Date(object.StartDate);
|
||||
case 8:
|
||||
return new Date(object.ChangeDate);
|
||||
case 9:
|
||||
return object.state;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public LinkedHashMap<Class<? extends DBObject>, FKBehaviour> getFKDependencies() {
|
||||
LinkedHashMap<Class<? extends DBObject>, FKBehaviour> res = new LinkedHashMap<>();
|
||||
res.put(TestRunTask.class, new FKBehaviour(FKDataBehaviour.DELETE, FKCurrentObjectBehaviuor.ACTIVE));
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -1,281 +0,0 @@
|
||||
package TestingSystem.DVM;
|
||||
import Common.Constants;
|
||||
import Common.Global;
|
||||
import Common.Utils.Utils;
|
||||
import GlobalData.RemoteFile.RemoteFile;
|
||||
import GlobalData.Tasks.TaskState;
|
||||
import Repository.Server.ServerCode;
|
||||
import TestingSystem.Common.Test.TestType;
|
||||
import TestingSystem.Common.TestingPlanner_OLD;
|
||||
import TestingSystem.DVM.Tasks.TestCompilationTask;
|
||||
import TestingSystem.DVM.Tasks.TestRunTask;
|
||||
import TestingSystem.DVM.Tasks.TestTask;
|
||||
import TestingSystem.DVM.TasksPackage.TasksPackage;
|
||||
import TestingSystem.DVM.TasksPackage.TasksPackageState;
|
||||
import Visual_DVM_2021.Passes.All.UnzipFolderPass;
|
||||
import javafx.util.Pair;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
public class TestsSupervisor_2022 {
|
||||
protected TestingPlanner_OLD planner; //планировщик.
|
||||
protected UserConnection connection;
|
||||
protected TasksPackage tasksPackage;
|
||||
protected RemoteFile packageRemoteWorkspace;
|
||||
protected File packageLocalWorkspace;
|
||||
protected Vector<TestCompilationTask> compilationTasks; //список задач на компиляцию
|
||||
protected int count = 0; //число активных задач.
|
||||
//----
|
||||
public TestsSupervisor_2022(TestingPlanner_OLD planner_in, UserConnection connection_in, TasksPackage tasksPackage_in, Vector<TestCompilationTask> tasks_in) {
|
||||
planner = planner_in;
|
||||
connection = connection_in;
|
||||
tasksPackage = tasksPackage_in;
|
||||
compilationTasks = tasks_in;
|
||||
packageRemoteWorkspace = new RemoteFile(tasksPackage.user_workspace + "/tests", String.valueOf(tasksPackage.id), true);
|
||||
packageLocalWorkspace = new File(Global.PackagesDirectory, String.valueOf(tasksPackage.id));
|
||||
}
|
||||
public boolean packageNeedsKill() throws Exception {
|
||||
return (boolean) planner.ServerCommand(ServerCode.CheckPackageToKill, tasksPackage.id);
|
||||
}
|
||||
public void Perform() throws Exception {
|
||||
if (packageNeedsKill()) {
|
||||
System.out.println("PACKAGE " + tasksPackage.id + " NEEDS TO KILL");
|
||||
if (!tasksPackage.pid.isEmpty()) {
|
||||
connection.ShellCommand("kill -9 " + tasksPackage.pid);
|
||||
}
|
||||
tasksPackage.state = TasksPackageState.Aborted;
|
||||
planner.UpdatePackage();
|
||||
} else {
|
||||
switch (tasksPackage.state) {
|
||||
case TestsSynchronize:
|
||||
TestsSynchronize();
|
||||
tasksPackage.state = TasksPackageState.PackageWorkspaceCreation;
|
||||
planner.UpdatePackage();
|
||||
break;
|
||||
case PackageWorkspaceCreation:
|
||||
PackageWorkspaceCreation();
|
||||
tasksPackage.state = TasksPackageState.PackageStart;
|
||||
planner.UpdatePackage();
|
||||
break;
|
||||
case PackageStart:
|
||||
PackageStart();
|
||||
tasksPackage.state = TasksPackageState.CompilationWorkspacesCreation;
|
||||
planner.UpdatePackage();
|
||||
break;
|
||||
case CompilationWorkspacesCreation:
|
||||
case CompilationPreparation:
|
||||
case CompilationExecution:
|
||||
case RunningWorkspacesCreation:
|
||||
case RunningPreparation:
|
||||
case RunningExecution:
|
||||
checkNextState();
|
||||
break;
|
||||
case RunningEnd:
|
||||
DownloadResults();
|
||||
tasksPackage.state = TasksPackageState.Analysis;
|
||||
planner.UpdatePackage();
|
||||
break;
|
||||
case Analysis:
|
||||
AnalyseResults();
|
||||
tasksPackage.state = TasksPackageState.Done;
|
||||
planner.UpdatePackage();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
private void TestsSynchronize() throws Exception {
|
||||
//1, получить набор уникальных тестов.
|
||||
Vector<String> test_ids = new Vector<>();
|
||||
for (TestCompilationTask current_task : compilationTasks)
|
||||
if (!test_ids.contains(current_task.test_id))
|
||||
test_ids.add(String.valueOf(current_task.test_id));
|
||||
//синхронизировать их.
|
||||
for (String test_id : test_ids) {
|
||||
File test_src = Paths.get(Global.TestsDirectory.getAbsolutePath(), test_id).toFile();
|
||||
RemoteFile test_dst = new RemoteFile(tasksPackage.user_workspace + "/projects/" + test_id, true);
|
||||
connection.MKDIR(test_dst);
|
||||
connection.SynchronizeSubDirsR(test_src, test_dst);
|
||||
}
|
||||
}
|
||||
private void PackageWorkspaceCreation() throws Exception {
|
||||
//создать папку для пакета.
|
||||
connection.sftpChannel.mkdir(packageRemoteWorkspace.full_name);
|
||||
//положить туда запакованные тексты задач.
|
||||
Vector<String> compilationLines = new Vector<>();
|
||||
Vector<String> runLines = new Vector<>();
|
||||
for (TestCompilationTask compilationTask : planner.packageTasks.values()) {
|
||||
compilationLines.addAll(compilationTask.pack(1));
|
||||
for (TestRunTask runTask : compilationTask.runTasks) {
|
||||
int rt_kernels = (runTask.test_type == TestType.Performance) ? tasksPackage.kernels :
|
||||
Math.min(Utils.getMatrixProcessors(runTask.matrix), tasksPackage.kernels);
|
||||
runLines.addAll(runTask.pack(rt_kernels));
|
||||
}
|
||||
}
|
||||
RemoteFile compilationPackage = new RemoteFile(packageRemoteWorkspace, "compilationTasks");
|
||||
RemoteFile runPackage = new RemoteFile(packageRemoteWorkspace, "runTasks");
|
||||
connection.writeToFile(String.join("\n", compilationLines) + "\n", compilationPackage);
|
||||
connection.writeToFile(String.join("\n", runLines) + "\n", runPackage);
|
||||
// --
|
||||
connection.MKDIR(new RemoteFile(packageRemoteWorkspace, "state"));
|
||||
}
|
||||
private void PackageStart() throws Exception {
|
||||
String plannerStartCommand =
|
||||
String.join(" ",
|
||||
"nohup",
|
||||
Utils.DQuotes(planner.getPlanner()),
|
||||
Utils.DQuotes(tasksPackage.user_workspace),
|
||||
Utils.DQuotes(packageRemoteWorkspace.full_name),
|
||||
Utils.DQuotes(tasksPackage.kernels),
|
||||
Utils.DQuotes(tasksPackage.dvm_drv),
|
||||
"&"
|
||||
);
|
||||
connection.ShellCommand(plannerStartCommand);
|
||||
RemoteFile PID = new RemoteFile(packageRemoteWorkspace, "PID");
|
||||
RemoteFile STARTED = new RemoteFile(packageRemoteWorkspace, "STARTED");
|
||||
while (!connection.Exists(STARTED)) {
|
||||
System.out.println("waiting for package start...");
|
||||
Utils.sleep(1000);
|
||||
}
|
||||
if (connection.Exists(PID)) {
|
||||
tasksPackage.pid = connection.readFromFile(PID);
|
||||
}
|
||||
}
|
||||
public void checkNextState() throws Exception {
|
||||
RemoteFile stateDir = new RemoteFile(packageRemoteWorkspace, "state");
|
||||
//состояния пакета могут меняться только по возрастанию. ищем, появилось ли такое.
|
||||
Vector<TasksPackageState> higherStates = tasksPackage.state.getHigherStates();
|
||||
Collections.reverse(higherStates); //берем в обратном порядке, чтобы быстрее найти высшее.
|
||||
for (TasksPackageState state : higherStates) {
|
||||
RemoteFile file = new RemoteFile(stateDir, state.toString());
|
||||
if (connection.Exists(file)) {
|
||||
System.out.println("found new state: " + file.name);
|
||||
tasksPackage.state = state;
|
||||
planner.UpdatePackage();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void DownloadResults() throws Exception {
|
||||
Utils.CheckDirectory(packageLocalWorkspace);
|
||||
RemoteFile remote_results_archive = new RemoteFile(packageRemoteWorkspace, "results.zip");
|
||||
File results_archive = new File(packageLocalWorkspace, "results.zip");
|
||||
connection.performScript(packageRemoteWorkspace, "zip -r " + Utils.DQuotes("results.zip") + " " + Utils.DQuotes("results"));
|
||||
//---
|
||||
if (connection.Exists(remote_results_archive)) {
|
||||
connection.getSingleFile(remote_results_archive.full_name, results_archive.getAbsolutePath());
|
||||
UnzipFolderPass unzipFolderPass = new UnzipFolderPass();
|
||||
unzipFolderPass.Do(results_archive.getAbsolutePath(), packageLocalWorkspace.getAbsolutePath(), false);
|
||||
}
|
||||
//получили результат. теперь уничтожаем папку пакета на целевой машине.
|
||||
if (connection.Exists(packageRemoteWorkspace)){
|
||||
connection.RMDIR(packageRemoteWorkspace.full_name);
|
||||
}
|
||||
}
|
||||
public void getTasksInfo(Vector<? extends TestTask> tasks, String file_name) throws Exception {
|
||||
LinkedHashMap<Long, TestTask> sorted_tasks = new LinkedHashMap<>();
|
||||
for (TestTask task : tasks)
|
||||
sorted_tasks.put(task.id, task);
|
||||
//--
|
||||
File info_file = Paths.get(packageLocalWorkspace.getAbsolutePath(), "results", file_name).toFile();
|
||||
List<String> lines = FileUtils.readLines(info_file, Charset.defaultCharset());
|
||||
for (String packed : lines) {
|
||||
if (!packed.isEmpty()) {
|
||||
String[] data = packed.split(" ");
|
||||
long id = Long.parseLong(data[0]);
|
||||
TaskState state = TaskState.valueOf(data[1]);
|
||||
double time = Double.parseDouble(data[2]);
|
||||
//--
|
||||
TestTask task = sorted_tasks.get(id);
|
||||
task.state = state;
|
||||
task.Time = state.equals(TaskState.AbortedByTimeout)?(task.maxtime+1):time;
|
||||
}
|
||||
}
|
||||
}
|
||||
public void AnalyseResults() throws Exception {
|
||||
System.out.println("analysing results");
|
||||
Vector<TestRunTask> runTasks = new Vector<>();
|
||||
for (TestCompilationTask compilationTask : compilationTasks)
|
||||
runTasks.addAll(compilationTask.runTasks);
|
||||
//----
|
||||
getTasksInfo(compilationTasks, "CompilationInfo.txt");
|
||||
getTasksInfo(runTasks, "RunningInfo.txt");
|
||||
//--
|
||||
int ct_count = 0;
|
||||
int rt_count = 0;
|
||||
//--
|
||||
for (TestCompilationTask testCompilationTask : compilationTasks) {
|
||||
ct_count++;
|
||||
if (readTask(testCompilationTask)) {
|
||||
for (TestRunTask testRunTask : testCompilationTask.runTasks) {
|
||||
rt_count++;
|
||||
testRunTask.compilation_state = testCompilationTask.state;
|
||||
testRunTask.compilation_output = testCompilationTask.output;
|
||||
testRunTask.compilation_errors = testCompilationTask.errors;
|
||||
testRunTask.compilation_time = testCompilationTask.Time;
|
||||
if (testCompilationTask.state == TaskState.DoneWithErrors) {
|
||||
testRunTask.state = TaskState.Canceled;
|
||||
} else {
|
||||
readTask(testRunTask);
|
||||
}
|
||||
if (testRunTask.state.equals(TaskState.Finished)) {
|
||||
//анализ задачи на запуск.
|
||||
List<String> output_lines = Arrays.asList(testRunTask.output.split("\n"));
|
||||
List<String> errors_lines = Arrays.asList(testRunTask.errors.split("\n"));
|
||||
//---
|
||||
if (Utils.isCrushed(output_lines, errors_lines)) {
|
||||
testRunTask.state = TaskState.Crushed;
|
||||
} else {
|
||||
Pair<TaskState, Integer> results = new Pair<>(TaskState.Done, 100);
|
||||
switch (testRunTask.test_type) {
|
||||
case Correctness:
|
||||
results = Utils.analyzeCorrectness(output_lines);
|
||||
break;
|
||||
case Performance:
|
||||
results = Utils.analyzePerformance(output_lines);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
testRunTask.state = results.getKey();
|
||||
testRunTask.progress = results.getValue();
|
||||
testRunTask.CleanTime = Utils.parseCleanTime(testRunTask.output);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("ct_count=" + ct_count + " rt count=" + rt_count);
|
||||
//теперь обновить их единым списком, и удалить задачи на компиляцию.
|
||||
planner.ServerCommand(ServerCode.UpdateTestTasks, compilationTasks);
|
||||
//--
|
||||
System.out.println("cleaning results on server");
|
||||
Utils.forceDeleteWithCheck(packageLocalWorkspace);
|
||||
System.out.println("done");
|
||||
|
||||
}
|
||||
public boolean readTask(TestTask testTask) throws Exception {
|
||||
File taskWorkspace = Paths.get(packageLocalWorkspace.getAbsolutePath(), "results", String.valueOf(testTask.id)).toFile();
|
||||
if (taskWorkspace.exists()) {
|
||||
System.out.println("id=" + testTask.id + ": path=" + taskWorkspace.getAbsolutePath());
|
||||
File outFile = new File(taskWorkspace, Constants.out_file);
|
||||
File errFile = new File(taskWorkspace.getAbsolutePath(), Constants.err_file);
|
||||
File stsFile = new File(taskWorkspace.getAbsolutePath(), "statistic.txt");
|
||||
if (outFile.exists())
|
||||
testTask.output = FileUtils.readFileToString(outFile);
|
||||
if (errFile.exists())
|
||||
testTask.errors = FileUtils.readFileToString(errFile);
|
||||
if ((testTask instanceof TestRunTask) && stsFile.exists()) {
|
||||
TestRunTask testRunTask = (TestRunTask) testTask;
|
||||
testRunTask.statistic = FileUtils.readFileToString(stsFile);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user