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); } }