рефакторинг анализа результатов запуска двм пакетов. был удвоенный код
This commit is contained in:
5
.idea/workspace.xml
generated
5
.idea/workspace.xml
generated
@@ -8,8 +8,11 @@
|
|||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
|
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/GlobalData/Tasks/TaskState.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/GlobalData/Tasks/TaskState.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/Passes/All/RefreshDVMPackageResults.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Passes/All/RefreshDVMPackageResults.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/DVMPackage/DVMPackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/DVMPackage/DVMPackage.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/DVMPackage/DVMPackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/DVMPackage/DVMPackage.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/DVMTasks/DVMRunTask.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/DVMTasks/DVMRunTask.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/DVMTestingPlanner.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/DVMTestingPlanner.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/RemoteDVMTestingPlanner.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/TestingSystem/DVM/RemoteDVMTestingPlanner.java" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public enum TaskState implements StatusEnum {
|
|||||||
WrongTestFormat,
|
WrongTestFormat,
|
||||||
InternalError,
|
InternalError,
|
||||||
Done,
|
Done,
|
||||||
|
DoneWithDiffs,
|
||||||
//--- сугубо кластерные.
|
//--- сугубо кластерные.
|
||||||
Queued,
|
Queued,
|
||||||
NoSuchTask,
|
NoSuchTask,
|
||||||
@@ -38,6 +39,7 @@ public enum TaskState implements StatusEnum {
|
|||||||
case WrongTestFormat:
|
case WrongTestFormat:
|
||||||
case InternalError:
|
case InternalError:
|
||||||
case Crushed:
|
case Crushed:
|
||||||
|
case DoneWithDiffs:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
@@ -63,6 +65,8 @@ public enum TaskState implements StatusEnum {
|
|||||||
return "прервана";
|
return "прервана";
|
||||||
case Done:
|
case Done:
|
||||||
return "успешно";
|
return "успешно";
|
||||||
|
case DoneWithDiffs:
|
||||||
|
return "различия с эталоном";
|
||||||
case DoneWithErrors:
|
case DoneWithErrors:
|
||||||
return "с ошибками";
|
return "с ошибками";
|
||||||
case Crushed:
|
case Crushed:
|
||||||
@@ -108,6 +112,7 @@ public enum TaskState implements StatusEnum {
|
|||||||
case Crushed:
|
case Crushed:
|
||||||
return VisualiserFonts.Fatal;
|
return VisualiserFonts.Fatal;
|
||||||
case Finished:
|
case Finished:
|
||||||
|
case DoneWithDiffs:
|
||||||
return VisualiserFonts.BlueState;
|
return VisualiserFonts.BlueState;
|
||||||
case WorkspaceReady:
|
case WorkspaceReady:
|
||||||
return VisualiserFonts.ReadyState;
|
return VisualiserFonts.ReadyState;
|
||||||
@@ -136,6 +141,7 @@ public enum TaskState implements StatusEnum {
|
|||||||
public boolean isComplete() {
|
public boolean isComplete() {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case Done:
|
case Done:
|
||||||
|
case DoneWithDiffs:
|
||||||
case DoneWithErrors:
|
case DoneWithErrors:
|
||||||
case AbortedByTimeout:
|
case AbortedByTimeout:
|
||||||
case AbortedByUser:
|
case AbortedByUser:
|
||||||
|
|||||||
@@ -42,73 +42,7 @@ public class RefreshDVMPackageResults extends TestingServerPass<DVMPackage> {
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void body() throws Exception {
|
protected void body() throws Exception {
|
||||||
boolean hasErrors = false;
|
target.checkFinishState();
|
||||||
target.readJson();
|
|
||||||
Vector<DVMRunTask> runTasks = new Vector<>();
|
|
||||||
for (DVMCompilationTask compilationTask : target.package_json.compilationTasks)
|
|
||||||
runTasks.addAll(compilationTask.runTasks);
|
|
||||||
//----
|
|
||||||
int ct_count = 0;
|
|
||||||
int rt_count = 0;
|
|
||||||
int good = 0;
|
|
||||||
//--
|
|
||||||
int i = 0;
|
|
||||||
for (DVMCompilationTask compilationTask : target.package_json.compilationTasks)
|
|
||||||
for (DVMRunTask runTask : compilationTask.runTasks) {
|
|
||||||
ShowProgress(runTasks.size(), i, true);
|
|
||||||
++i;
|
|
||||||
rt_count++;
|
|
||||||
if (compilationTask.state != TaskState.Done) {
|
|
||||||
runTask.state = TaskState.Canceled;
|
|
||||||
} else {
|
|
||||||
File rt_workspace = Paths.get(target.getLocalWorkspace().getAbsolutePath(), "results", String.valueOf(runTask.id)).toFile();
|
|
||||||
if (rt_workspace.exists()) {
|
|
||||||
//анализ задачи на запуск.
|
|
||||||
File outFile = new File(rt_workspace, Constants.out_file);
|
|
||||||
File errFile = new File(rt_workspace.getAbsolutePath(), Constants.err_file);
|
|
||||||
//--
|
|
||||||
String output = FileUtils.readFileToString(outFile);
|
|
||||||
String errors = FileUtils.readFileToString(errFile);
|
|
||||||
//--
|
|
||||||
List<String> output_lines = Arrays.asList(output.split("\n"));
|
|
||||||
List<String> errors_lines = Arrays.asList(errors.split("\n"));
|
|
||||||
//---
|
|
||||||
if (output.trim().isEmpty()) {
|
|
||||||
runTask.state = TaskState.Crushed;
|
|
||||||
} else {
|
|
||||||
if (Utils.isCrushed(output_lines, errors_lines)) {
|
|
||||||
runTask.state = TaskState.Crushed;
|
|
||||||
} else {
|
|
||||||
Pair<TaskState, Integer> results = new Pair<>(TaskState.Done, 100);
|
|
||||||
switch (runTask.test_type) {
|
|
||||||
case Correctness:
|
|
||||||
results = Utils.analyzeCorrectness(output_lines);
|
|
||||||
break;
|
|
||||||
case Performance:
|
|
||||||
results = Utils.analyzePerformance(output_lines);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
runTask.state = results.getKey();
|
|
||||||
runTask.progress = results.getValue();
|
|
||||||
runTask.CleanTime = Utils.parseCleanTime(output);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!runTask.state.equals(TaskState.Done))
|
|
||||||
hasErrors = true;
|
|
||||||
else good++;
|
|
||||||
}
|
|
||||||
//--
|
|
||||||
target.saveJson(); //запись обновленных результатов пакета в json!
|
|
||||||
target.doneTasksCount = good;
|
|
||||||
target.state = hasErrors ? TasksPackageState.DoneWithErrors : TasksPackageState.Done;
|
|
||||||
double percent = (((double) (good)) / target.tasksCount) * 100.0;
|
|
||||||
target.description = "Выполнено на " + ((int) percent) + "%\n" +
|
|
||||||
"Всего задач: " + target.tasksCount + ", из них с ошибками " + (target.tasksCount - good);
|
|
||||||
//--
|
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void performDone() throws Exception {
|
protected void performDone() throws Exception {
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ import Common.Database.Objects.DBObject;
|
|||||||
import Common.Utils.Index;
|
import Common.Utils.Index;
|
||||||
import Common.Utils.Utils_;
|
import Common.Utils.Utils_;
|
||||||
import _VisualDVM.ComponentsServer.UserAccount.UserAccount;
|
import _VisualDVM.ComponentsServer.UserAccount.UserAccount;
|
||||||
|
import _VisualDVM.Constants;
|
||||||
import _VisualDVM.Global;
|
import _VisualDVM.Global;
|
||||||
import _VisualDVM.GlobalData.Compiler.Compiler;
|
import _VisualDVM.GlobalData.Compiler.Compiler;
|
||||||
import _VisualDVM.GlobalData.Machine.Machine;
|
import _VisualDVM.GlobalData.Machine.Machine;
|
||||||
import _VisualDVM.GlobalData.Machine.MachineType;
|
import _VisualDVM.GlobalData.Machine.MachineType;
|
||||||
|
import _VisualDVM.GlobalData.Tasks.TaskState;
|
||||||
import _VisualDVM.GlobalData.User.User;
|
import _VisualDVM.GlobalData.User.User;
|
||||||
import _VisualDVM.ServerObjectsCache.DVMConfigurationCache;
|
import _VisualDVM.ServerObjectsCache.DVMConfigurationCache;
|
||||||
import _VisualDVM.ServerObjectsCache.DVMSettingsCache;
|
import _VisualDVM.ServerObjectsCache.DVMSettingsCache;
|
||||||
@@ -21,10 +23,19 @@ import _VisualDVM.TestingSystem.DVM.DVMConfiguration.DVMConfiguration;
|
|||||||
import _VisualDVM.TestingSystem.DVM.DVMSettings.DVMSettings;
|
import _VisualDVM.TestingSystem.DVM.DVMSettings.DVMSettings;
|
||||||
import _VisualDVM.TestingSystem.DVM.DVMTasks.DVMCompilationTask;
|
import _VisualDVM.TestingSystem.DVM.DVMTasks.DVMCompilationTask;
|
||||||
import _VisualDVM.TestingSystem.DVM.DVMTasks.DVMRunTask;
|
import _VisualDVM.TestingSystem.DVM.DVMTasks.DVMRunTask;
|
||||||
|
import _VisualDVM.TestingSystem.DVM.DVMTasks.DVMTask;
|
||||||
|
import _VisualDVM.TestingSystem.SAPFOR.SapforTask.SapforTask;
|
||||||
|
import _VisualDVM.Utils;
|
||||||
import com.sun.org.glassfish.gmbal.Description;
|
import com.sun.org.glassfish.gmbal.Description;
|
||||||
import javafx.util.Pair;
|
import javafx.util.Pair;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
public class DVMPackage extends TestingPackage<DVMPackage_json> {
|
public class DVMPackage extends TestingPackage<DVMPackage_json> {
|
||||||
//---
|
//---
|
||||||
@@ -209,11 +220,111 @@ public class DVMPackage extends TestingPackage<DVMPackage_json> {
|
|||||||
public User getUser() {
|
public User getUser() {
|
||||||
return new User(user_name, "", user_workspace);
|
return new User(user_name, "", user_workspace);
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public void checkFinishState() throws Exception {
|
|
||||||
}
|
|
||||||
public String getMachineURL() {
|
public String getMachineURL() {
|
||||||
return machine_address + ":" + machine_port;
|
return machine_address + ":" + machine_port;
|
||||||
}
|
}
|
||||||
|
//получение запакованных планировщиком результатов задач.
|
||||||
|
public void getTasksInfo(File packageLocalWorkspace, List<? extends DVMTask> tasks, String file_name) throws Exception {
|
||||||
|
LinkedHashMap<Integer, DVMTask> sorted_tasks = new LinkedHashMap<>();
|
||||||
|
for (DVMTask task : tasks)
|
||||||
|
sorted_tasks.put(task.id, task);
|
||||||
|
//--
|
||||||
|
File info_file = Utils_.getFile(packageLocalWorkspace.getAbsolutePath(),"results", file_name);
|
||||||
|
List<String> lines = FileUtils.readLines(info_file, Charset.defaultCharset());
|
||||||
|
for (String packed : lines) {
|
||||||
|
if (!packed.isEmpty()) {
|
||||||
|
String[] data = packed.split(" ");
|
||||||
|
int id = Integer.parseInt(data[0]);
|
||||||
|
TaskState state = TaskState.valueOf(data[1]);
|
||||||
|
double time = Double.parseDouble(data[2]);
|
||||||
|
//--
|
||||||
|
DVMTask task = sorted_tasks.get(id);
|
||||||
|
task.state = state;
|
||||||
|
task.Time = state.equals(TaskState.AbortedByTimeout) ? (task.maxtime + 1) : time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void checkFinishState() throws Exception {
|
||||||
|
File packageLocalWorkspace = new File(Global.DVMPackagesDirectory, String.valueOf(id));
|
||||||
|
boolean hasErrors = false;
|
||||||
|
readJson();
|
||||||
|
Vector<DVMRunTask> runTasks = new Vector<>();
|
||||||
|
for (DVMCompilationTask compilationTask : package_json.compilationTasks)
|
||||||
|
runTasks.addAll(compilationTask.runTasks);
|
||||||
|
//----
|
||||||
|
getTasksInfo(packageLocalWorkspace,package_json.compilationTasks, "CompilationInfo.txt");
|
||||||
|
getTasksInfo(packageLocalWorkspace,runTasks, "RunningInfo.txt");
|
||||||
|
//--
|
||||||
|
int ct_count = 0;
|
||||||
|
int rt_count = 0;
|
||||||
|
int good = 0;
|
||||||
|
//--
|
||||||
|
for (DVMCompilationTask compilationTask : package_json.compilationTasks) {
|
||||||
|
compilationTask.dvm_package_id = id;
|
||||||
|
if (!compilationTask.state.equals(TaskState.Done))
|
||||||
|
hasErrors = true;
|
||||||
|
ct_count++;
|
||||||
|
File ct_workspace = Paths.get(packageLocalWorkspace.getAbsolutePath(), "results", String.valueOf(compilationTask.id)).toFile();
|
||||||
|
if (ct_workspace.exists()) {
|
||||||
|
for (DVMRunTask runTask : compilationTask.runTasks) {
|
||||||
|
runTask.dvm_package_id = id;
|
||||||
|
rt_count++;
|
||||||
|
runTask.compilation_state = compilationTask.state;
|
||||||
|
runTask.compilation_time = compilationTask.Time;
|
||||||
|
if (compilationTask.state != TaskState.Done) {
|
||||||
|
runTask.state = TaskState.Canceled;
|
||||||
|
} else {
|
||||||
|
File rt_workspace = Paths.get(packageLocalWorkspace.getAbsolutePath(), "results", String.valueOf(runTask.id)).toFile();
|
||||||
|
if (rt_workspace.exists() && runTask.state.equals(TaskState.Finished)
|
||||||
|
) {
|
||||||
|
//анализ задачи на запуск.
|
||||||
|
File outFile = new File(rt_workspace, Constants.out_file);
|
||||||
|
File errFile = new File(rt_workspace.getAbsolutePath(), Constants.err_file);
|
||||||
|
//--
|
||||||
|
String output = FileUtils.readFileToString(outFile);
|
||||||
|
String errors = FileUtils.readFileToString(errFile);
|
||||||
|
//--
|
||||||
|
List<String> output_lines = Arrays.asList(output.split("\n"));
|
||||||
|
List<String> errors_lines = Arrays.asList(errors.split("\n"));
|
||||||
|
//---
|
||||||
|
if (output.trim().isEmpty()) {
|
||||||
|
runTask.state = TaskState.Crushed;
|
||||||
|
} else {
|
||||||
|
if (Utils.isCrushed(output_lines, errors_lines)) {
|
||||||
|
runTask.state = TaskState.Crushed;
|
||||||
|
} else {
|
||||||
|
Pair<TaskState, Integer> results = new Pair<>(TaskState.Done, 100);
|
||||||
|
switch (runTask.test_type) {
|
||||||
|
case Correctness:
|
||||||
|
results = Utils.analyzeCorrectness(output_lines);
|
||||||
|
break;
|
||||||
|
case Performance:
|
||||||
|
results = Utils.analyzePerformance(output_lines);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
runTask.state = results.getKey();
|
||||||
|
runTask.progress = results.getValue();
|
||||||
|
runTask.CleanTime = Utils.parseCleanTime(output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!runTask.state.equals(TaskState.Done))
|
||||||
|
hasErrors = true;
|
||||||
|
else good++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
progress = 100;
|
||||||
|
doneTasksCount = good;
|
||||||
|
saveJson(); //запись обновленных результатов пакета в json!
|
||||||
|
state = hasErrors ? TasksPackageState.DoneWithErrors : TasksPackageState.Done;
|
||||||
|
double percent = (((double) (good)) / tasksCount) * 100.0;
|
||||||
|
description = "Выполнено на " + ((int) percent) + "%\n" +
|
||||||
|
"Всего задач: " + tasksCount + ", из них с ошибками " + (tasksCount - good);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -86,26 +86,6 @@ public abstract class DVMTestingPlanner extends TestingPlanner<DVMPackage> {
|
|||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
public void getTasksInfo(List<? extends DVMTask> tasks, String file_name) throws Exception {
|
|
||||||
LinkedHashMap<Integer, DVMTask> sorted_tasks = new LinkedHashMap<>();
|
|
||||||
for (DVMTask 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(" ");
|
|
||||||
int id = Integer.parseInt(data[0]);
|
|
||||||
TaskState state = TaskState.valueOf(data[1]);
|
|
||||||
double time = Double.parseDouble(data[2]);
|
|
||||||
//--
|
|
||||||
DVMTask task = sorted_tasks.get(id);
|
|
||||||
task.state = state;
|
|
||||||
task.Time = state.equals(TaskState.AbortedByTimeout) ? (task.maxtime + 1) : time;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Override
|
@Override
|
||||||
protected void Print(String message) {
|
protected void Print(String message) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -92,86 +92,7 @@ public class RemoteDVMTestingPlanner extends DVMTestingPlanner {
|
|||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void AnalyseResults() throws Exception {
|
protected void AnalyseResults() throws Exception {
|
||||||
boolean hasErrors = false;
|
testingPackage.checkFinishState();
|
||||||
testingPackage.readJson();
|
|
||||||
Print("analysing results");
|
|
||||||
Vector<DVMRunTask> runTasks = new Vector<>();
|
|
||||||
for (DVMCompilationTask compilationTask : testingPackage.package_json.compilationTasks)
|
|
||||||
runTasks.addAll(compilationTask.runTasks);
|
|
||||||
//----
|
|
||||||
getTasksInfo(testingPackage.package_json.compilationTasks, "CompilationInfo.txt");
|
|
||||||
getTasksInfo(runTasks, "RunningInfo.txt");
|
|
||||||
//--
|
|
||||||
int ct_count = 0;
|
|
||||||
int rt_count = 0;
|
|
||||||
int good = 0;
|
|
||||||
//--
|
|
||||||
for (DVMCompilationTask compilationTask : testingPackage.package_json.compilationTasks) {
|
|
||||||
compilationTask.dvm_package_id = testingPackage.id;
|
|
||||||
if (!compilationTask.state.equals(TaskState.Done))
|
|
||||||
hasErrors = true;
|
|
||||||
ct_count++;
|
|
||||||
File ct_workspace = Paths.get(packageLocalWorkspace.getAbsolutePath(), "results", String.valueOf(compilationTask.id)).toFile();
|
|
||||||
if (ct_workspace.exists()) {
|
|
||||||
for (DVMRunTask runTask : compilationTask.runTasks) {
|
|
||||||
runTask.dvm_package_id = testingPackage.id;
|
|
||||||
rt_count++;
|
|
||||||
runTask.compilation_state = compilationTask.state;
|
|
||||||
runTask.compilation_time = compilationTask.Time;
|
|
||||||
if (compilationTask.state != TaskState.Done) {
|
|
||||||
runTask.state = TaskState.Canceled;
|
|
||||||
} else {
|
|
||||||
File rt_workspace = Paths.get(packageLocalWorkspace.getAbsolutePath(), "results", String.valueOf(runTask.id)).toFile();
|
|
||||||
if (rt_workspace.exists() && runTask.state.equals(TaskState.Finished)
|
|
||||||
) {
|
|
||||||
//анализ задачи на запуск.
|
|
||||||
File outFile = new File(rt_workspace, Constants.out_file);
|
|
||||||
File errFile = new File(rt_workspace.getAbsolutePath(), Constants.err_file);
|
|
||||||
//--
|
|
||||||
String output = FileUtils.readFileToString(outFile);
|
|
||||||
String errors = FileUtils.readFileToString(errFile);
|
|
||||||
//--
|
|
||||||
List<String> output_lines = Arrays.asList(output.split("\n"));
|
|
||||||
List<String> errors_lines = Arrays.asList(errors.split("\n"));
|
|
||||||
//---
|
|
||||||
if (output.trim().isEmpty()) {
|
|
||||||
runTask.state = TaskState.Crushed;
|
|
||||||
} else {
|
|
||||||
if (Utils.isCrushed(output_lines, errors_lines)) {
|
|
||||||
runTask.state = TaskState.Crushed;
|
|
||||||
} else {
|
|
||||||
Pair<TaskState, Integer> results = new Pair<>(TaskState.Done, 100);
|
|
||||||
switch (runTask.test_type) {
|
|
||||||
case Correctness:
|
|
||||||
results = Utils.analyzeCorrectness(output_lines);
|
|
||||||
break;
|
|
||||||
case Performance:
|
|
||||||
results = Utils.analyzePerformance(output_lines);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
runTask.state = results.getKey();
|
|
||||||
runTask.progress = results.getValue();
|
|
||||||
runTask.CleanTime = Utils.parseCleanTime(output);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!runTask.state.equals(TaskState.Done))
|
|
||||||
hasErrors = true;
|
|
||||||
else good++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
testingPackage.progress = 100;
|
|
||||||
testingPackage.doneTasksCount = good;
|
|
||||||
testingPackage.saveJson(); //запись обновленных результатов пакета в json!
|
|
||||||
Print("analysis done, ct_count=" + ct_count + " rt count=" + rt_count);
|
|
||||||
testingPackage.state = hasErrors ? TasksPackageState.DoneWithErrors : TasksPackageState.Done;
|
|
||||||
double percent = (((double) (good)) / testingPackage.tasksCount) * 100.0;
|
|
||||||
testingPackage.description = "Выполнено на " + ((int) percent) + "%\n" +
|
|
||||||
"Всего задач: " + testingPackage.tasksCount + ", из них с ошибками " + (testingPackage.tasksCount - good);
|
|
||||||
UpdatePackageState();
|
UpdatePackageState();
|
||||||
//теперь удалить распакованную папку с результатами. для скачки нужен только архив.
|
//теперь удалить распакованную папку с результатами. для скачки нужен только архив.
|
||||||
File unpacked_results = new File(packageLocalWorkspace.getAbsolutePath(), "results");
|
File unpacked_results = new File(packageLocalWorkspace.getAbsolutePath(), "results");
|
||||||
|
|||||||
Reference in New Issue
Block a user