Files
VisualSapfor/src/GlobalData/Tasks/Supervisor/Remote/RemoteTaskSupervisor.java

89 lines
3.6 KiB
Java

package GlobalData.Tasks.Supervisor.Remote;
import Common_old.Constants;
import Common_old.Utils.Utils;
import GlobalData.RemoteFile.RemoteFile;
import GlobalData.Tasks.Supervisor.TaskSupervisor;
import GlobalData.Tasks.Task;
import GlobalData.Tasks.TaskState;
import Visual_DVM_2021.Passes.SSH.ConnectionPass;
public abstract class RemoteTaskSupervisor<T extends Task> extends TaskSupervisor<T, ConnectionPass> {
protected RemoteFile getRemoteProjectsPath() {
return new RemoteFile(pass.user.getRemoteProjectsPath(), true);
}
protected RemoteFile getRemoteProject() {
return new RemoteFile(getRemoteProjectsPath().full_name, project.getUniqKey(), true);
}
protected RemoteFile getBinary() {
return new RemoteFile(getRemoteProject().full_name, "0");
}
protected RemoteFile getPID() {
return new RemoteFile(getRemoteProject().full_name, "PID");
}
protected RemoteFile getRemoteTime() {
return new RemoteFile(getRemoteProject().full_name, Constants.time_file);
}
protected RemoteFile getRemoteOutput() {
return new RemoteFile(getRemoteProject().full_name, Constants.out_file);
}
protected RemoteFile getRemoteErrors() {
return new RemoteFile(getRemoteProject().full_name, Constants.err_file);
}
public RemoteFile getDONE_file() {
return new RemoteFile(getRemoteProject().full_name, Constants.DONE);
}
public RemoteFile getTIMEOUT_file() {
return new RemoteFile(getRemoteProject().full_name, Constants.TIMEOUT);
}
@Override
protected void PrepareWorkspace() throws Exception {
super.PrepareWorkspace(); //локальная подготовка
pass.user.connection.tryRM(getDONE_file());
pass.user.connection.tryRM(getPID());
pass.user.connection.tryRM(getTIMEOUT_file());
pass.user.connection.tryRM(getRemoteOutput());
pass.user.connection.tryRM(getRemoteErrors());
pass.user.connection.tryRM(getRemoteTime());
}
@Override
protected void CheckTask() throws Exception {
RemoteFile DONE = new RemoteFile(getRemoteProject(), Constants.DONE);
RemoteFile TIMEOUT = new RemoteFile(getRemoteProject(), Constants.TIMEOUT);
if (pass.user.connection.Exists(DONE))
task.state = TaskState.Finished;
else if (pass.user.connection.Exists(TIMEOUT))
task.state = TaskState.AbortedByTimeout;
}
@Override
protected void AchieveResults() throws Exception {
pass.user.connection.tryGetSingleFileWithMaxSize(getRemoteOutput(), task.getOutputFile(), 10240);
pass.user.connection.tryGetSingleFileWithMaxSize(getRemoteErrors(), task.getErrorsFile(), 10240);
}
@Override
protected void AbortTask() throws Exception {
pass.user.connection.Command("kill -2 " + task.PID);
}
@Override
protected void CalculatePerformanceTime() throws Exception {
if (pass.user.connection.tryGetSingleFileWithMaxSize(getRemoteTime(), task.getTimeFile(), 0))
task.RefreshTime();
}
public String getStarter() {
return String.join("/", pass.user.workspace, "modules", "starter");
}
public String getLauncher() {
return String.join("/", pass.user.workspace, "modules", "launcher");
}
protected String getStartCommand() {
String res =
String.join(" ",
Utils.DQuotes(getStarter()),
Utils.DQuotes(getLauncher()),
String.valueOf(task.maxtime),
Utils.DQuotes(getCoupDeGrace()),
task.getFullCommand()
);
return res;
}
}