2023-11-19 02:12:44 +03:00
|
|
|
|
package Visual_DVM_2021.Passes.All;
|
2024-10-08 00:39:13 +03:00
|
|
|
|
import Common.CurrentAnchestor;
|
2024-10-07 14:22:52 +03:00
|
|
|
|
import Common.Utils.CommonUtils;
|
2024-10-09 22:01:19 +03:00
|
|
|
|
import _VisualDVM.Current;
|
|
|
|
|
|
import _VisualDVM.Visual.UI;
|
|
|
|
|
|
import _VisualDVM.Utils;
|
2024-10-08 01:30:25 +03:00
|
|
|
|
import GlobalData.GlobalDatabase;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
import GlobalData.Machine.MachineType;
|
|
|
|
|
|
import GlobalData.Tasks.RunTask.RunTask;
|
|
|
|
|
|
import GlobalData.Tasks.TaskState;
|
|
|
|
|
|
import ProjectData.Project.db_project_info;
|
2023-11-19 02:12:44 +03:00
|
|
|
|
import Visual_DVM_2021.Passes.PassCode_2021;
|
|
|
|
|
|
import Visual_DVM_2021.Passes.PassException;
|
|
|
|
|
|
import Visual_DVM_2021.Passes.Pass_2021;
|
2023-09-17 22:13:42 +03:00
|
|
|
|
|
|
|
|
|
|
import java.util.Vector;
|
|
|
|
|
|
public class Run extends Pass_2021<db_project_info> {
|
|
|
|
|
|
Pass_2021 subpass = null;
|
|
|
|
|
|
Vector<RunTask> runTasks;
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public String getIconPath() {
|
|
|
|
|
|
return "/icons/GreenStart.png";
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public String getButtonText() {
|
|
|
|
|
|
return "";
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void performPreparation() throws Exception {
|
|
|
|
|
|
runTasks = Current.getRunConfiguration().generateRunTasks(target, Current.getCompilationTask());
|
|
|
|
|
|
for (RunTask runTask : runTasks) {
|
2024-10-08 01:30:25 +03:00
|
|
|
|
CommonUtils.db.Insert(runTask);
|
2023-09-17 22:13:42 +03:00
|
|
|
|
Utils.forceDeleteWithCheck(runTask.getLocalWorkspace());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void showPreparation() throws Exception {
|
2024-10-08 01:30:25 +03:00
|
|
|
|
((GlobalDatabase)CommonUtils.db).runTasks.ShowUI();
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected boolean canStart(Object... args) {
|
|
|
|
|
|
subpass = null;
|
2024-10-08 00:39:13 +03:00
|
|
|
|
if (CurrentAnchestor.Check(Log, Current.Project, Current.Machine, Current.User, Current.Makefile, Current.RunConfiguration,
|
2023-09-17 22:13:42 +03:00
|
|
|
|
Current.CompilationTask)) {
|
|
|
|
|
|
//-
|
|
|
|
|
|
target = Current.getProject();
|
|
|
|
|
|
//-
|
|
|
|
|
|
if (Current.getMachine().type.equals(MachineType.MVS_cluster) &&
|
|
|
|
|
|
Current.getRunConfiguration().LauncherCall.isEmpty()
|
|
|
|
|
|
) {
|
|
|
|
|
|
Log.Writeln_("Запуск напрямую на кластере запрещён.Используйте для запуска DVM систему или MPI");
|
|
|
|
|
|
}
|
|
|
|
|
|
if (!Current.getCompilationTask().state.equals(TaskState.Done))
|
|
|
|
|
|
Log.Writeln_("Текущая задача на компиляцию еще не выполнялась, или была завершена с ошибками");
|
|
|
|
|
|
return Log.isEmpty();
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
|
|
|
protected void body() throws Exception {
|
|
|
|
|
|
switch (Current.getMachine().type) {
|
|
|
|
|
|
case Local:
|
2024-10-08 22:33:49 +03:00
|
|
|
|
if (CommonUtils.isWindows()) {
|
2023-09-17 22:13:42 +03:00
|
|
|
|
subpass = passes.get(PassCode_2021.WindowsLocalRun);
|
|
|
|
|
|
} else
|
|
|
|
|
|
subpass = passes.get(PassCode_2021.LinuxLocalRun);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case Undefined:
|
2024-01-08 20:37:16 +03:00
|
|
|
|
case MVS_cluster:
|
2024-10-07 14:22:52 +03:00
|
|
|
|
throw new PassException("Запуск не реализован для типа машины " + CommonUtils.DQuotes(Current.getMachine().type));
|
2024-01-08 20:37:16 +03:00
|
|
|
|
/*
|
2023-09-17 22:13:42 +03:00
|
|
|
|
case MVS_cluster:
|
|
|
|
|
|
subpass = passes.get(PassCode_2021.MVSRun);
|
|
|
|
|
|
break;
|
2024-01-08 20:37:16 +03:00
|
|
|
|
*/
|
2023-09-17 22:13:42 +03:00
|
|
|
|
default:
|
|
|
|
|
|
subpass = passes.get(PassCode_2021.ServerRun);
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
int i = 1;
|
|
|
|
|
|
RunTask current_task = null;
|
|
|
|
|
|
for (RunTask task : runTasks) {
|
|
|
|
|
|
current_task = task;
|
|
|
|
|
|
boolean task_completed = false;
|
|
|
|
|
|
task.setProgress(i, runTasks.size());
|
|
|
|
|
|
//-
|
2024-10-08 01:30:25 +03:00
|
|
|
|
((GlobalDatabase)CommonUtils.db).runTasks.RefreshUI();
|
|
|
|
|
|
((GlobalDatabase)CommonUtils.db).runTasks.SetCurrentObjectUI(task.id);
|
2023-09-17 22:13:42 +03:00
|
|
|
|
//-
|
|
|
|
|
|
subpass.Do(task, target);
|
|
|
|
|
|
//-
|
|
|
|
|
|
switch (task.state) {
|
|
|
|
|
|
case Done:
|
|
|
|
|
|
case DoneWithErrors:
|
|
|
|
|
|
task_completed = true;
|
|
|
|
|
|
if (task.hasDvmSts) {
|
|
|
|
|
|
Utils.CheckAndCleanDirectory(Current.getProject().getStatisticDirectory());
|
|
|
|
|
|
Pass_2021.passes.get(PassCode_2021.SPF_StatisticAnalyzer).Do(task);
|
|
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case Finished:
|
|
|
|
|
|
case Crushed:
|
|
|
|
|
|
case AbortedByTimeout:
|
|
|
|
|
|
task_completed = true;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
//-
|
2024-10-08 01:30:25 +03:00
|
|
|
|
((GlobalDatabase)CommonUtils.db).runTasks.RefreshUI();
|
2023-10-11 18:44:16 +03:00
|
|
|
|
UI.getDebugWindow().ShowCurrentRunTask();
|
2023-09-17 22:13:42 +03:00
|
|
|
|
//-
|
|
|
|
|
|
if (!task_completed) break;
|
|
|
|
|
|
++i;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (current_task!=null){
|
2023-10-11 18:44:16 +03:00
|
|
|
|
UI.getDebugWindow().ShowLastRunTask();
|
2023-09-17 22:13:42 +03:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|