72 lines
3.2 KiB
Java
72 lines
3.2 KiB
Java
|
|
package SapforTestingSystem.PackageModeSupervisor;
|
|||
|
|
import Common.Constants;
|
|||
|
|
import Common.Global;
|
|||
|
|
import Common.Utils.Utils;
|
|||
|
|
import SapforTestingSystem.Json.SapforConfiguration_json;
|
|||
|
|
import SapforTestingSystem.Json.SapforTasksResults_json;
|
|||
|
|
import SapforTestingSystem.Json.SapforTasksPackage_json;
|
|||
|
|
import SapforTestingSystem.PerformSapforTask;
|
|||
|
|
import SapforTestingSystem.SapforTask.SapforTask;
|
|||
|
|
import SapforTestingSystem.ThreadsPlanner.ThreadsPlanner;
|
|||
|
|
import org.apache.commons.io.FileUtils;
|
|||
|
|
|
|||
|
|
import java.io.File;
|
|||
|
|
import java.util.Date;
|
|||
|
|
public class PackageModeSupervisor extends ThreadsPlanner {
|
|||
|
|
SapforTasksPackage_json package_json = null;
|
|||
|
|
SapforTasksResults_json results_json = new SapforTasksResults_json();
|
|||
|
|
public PackageModeSupervisor() throws Exception {
|
|||
|
|
super(2000);
|
|||
|
|
package_json = (SapforTasksPackage_json) Utils.jsonFromFile(new File(Global.Home, "package_json"), SapforTasksPackage_json.class);
|
|||
|
|
results_json.StartDate = new Date().getTime();
|
|||
|
|
//формирование списка задач.
|
|||
|
|
File sapfor_drv = new File(Global.Home, package_json.sapfor_drv);
|
|||
|
|
setMaxKernels(package_json.kernels);
|
|||
|
|
for (SapforConfiguration_json sapforConfiguration_json : package_json.configurations) {
|
|||
|
|
for (String testName : package_json.tests) {
|
|||
|
|
//--- чтобы было можно на нее сослаться после выполнения всех нитей.
|
|||
|
|
SapforTask task = new SapforTask();
|
|||
|
|
results_json.tasks.add(task);
|
|||
|
|
//---
|
|||
|
|
addThread(() -> new PerformSapforTask().Do(
|
|||
|
|
sapfor_drv,
|
|||
|
|
sapforConfiguration_json,
|
|||
|
|
testName,
|
|||
|
|
task
|
|||
|
|
));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
interruptThread.start();
|
|||
|
|
}
|
|||
|
|
@Override
|
|||
|
|
public void Interrupt() throws Exception {
|
|||
|
|
/*
|
|||
|
|
System.out.println("killing " + package_json.sapfor_drv + "...");
|
|||
|
|
String kill_command = Global.isWindows ? ("taskkill /FI \"IMAGENAME eq " + package_json.sapfor_drv + "\" /F /T") :
|
|||
|
|
("killall -SIGKILL " + package_json.sapfor_drv);
|
|||
|
|
Process killer = Runtime.getRuntime().exec(kill_command);
|
|||
|
|
killer.waitFor();
|
|||
|
|
System.out.println("done!");
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
//todo для надежности сделать еще один kill с внешнего процесса.
|
|||
|
|
// может быть гонка, что нить успеет запустить процесс уже после интеррупта.
|
|||
|
|
}
|
|||
|
|
@Override
|
|||
|
|
protected void finalize() {
|
|||
|
|
results_json.EndDate = new Date().getTime();
|
|||
|
|
|
|||
|
|
//записать результаты всех задач.
|
|||
|
|
try {
|
|||
|
|
Utils.jsonToFile(results_json, new File(Global.Home, "results_json"));
|
|||
|
|
//тут же и строить версии.
|
|||
|
|
Utils.deleteFilesByExtensions(new File(Global.Home),"proj","dep"); //Потом txt тоже добавить.
|
|||
|
|
FileUtils.writeStringToFile(new File(Constants.DONE), "");
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
Global.Log.PrintException(e);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
System.exit(0);
|
|||
|
|
}
|
|||
|
|
}
|