промежуточный. прописал для планировщиков общий класс-предок
This commit is contained in:
@@ -33,7 +33,7 @@ public class DVMPackage extends TestingPackage {
|
||||
user_password = tasksPackage.user_password;
|
||||
}
|
||||
public File getLocalWorkspace() {
|
||||
return new File(Global.PackagesDirectory, id);
|
||||
return new File(Global.PackagesDirectory, String.valueOf(id));
|
||||
}
|
||||
public File getJsonFile() {
|
||||
return new File(getLocalWorkspace(), "package_json");
|
||||
|
||||
@@ -10,9 +10,9 @@ import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import static Common.UI.Tables.TableRenderers.*;
|
||||
public class DVMPackageDBTable extends DBTable<String, DVMPackage> {
|
||||
public class DVMPackageDBTable extends iDBTable<DVMPackage> {
|
||||
public DVMPackageDBTable() {
|
||||
super(String.class, DVMPackage.class);
|
||||
super(DVMPackage.class);
|
||||
}
|
||||
@Override
|
||||
public Current CurrentName() {
|
||||
@@ -88,9 +88,9 @@ public class DVMPackageDBTable extends DBTable<String, DVMPackage> {
|
||||
case 8:
|
||||
return object.progress;
|
||||
case 9:
|
||||
return new Date(object.date);
|
||||
return new Date(object.StartDate);
|
||||
case 10:
|
||||
return new Date(object.change_date);
|
||||
return new Date(object.ChangeDate);
|
||||
case 11:
|
||||
return object.state;
|
||||
default:
|
||||
|
||||
190
src/TestingSystem/DVM/DVMTestingPlanner.java
Normal file
190
src/TestingSystem/DVM/DVMTestingPlanner.java
Normal file
@@ -0,0 +1,190 @@
|
||||
package TestingSystem.DVM;
|
||||
import Common.Global;
|
||||
import Common.Utils.Utils;
|
||||
import GlobalData.Machine.Machine;
|
||||
import GlobalData.Machine.MachineType;
|
||||
import GlobalData.User.User;
|
||||
import Repository.EmailMessage;
|
||||
import Repository.Server.ServerCode;
|
||||
import Repository.Server.ServerExchangeUnit_2021;
|
||||
import TestingSystem.Common.TestingPackage.TestingPackage;
|
||||
import TestingSystem.DVM.DVMPackage.DVMPackage;
|
||||
import TestingSystem.DVM.TasksPackage.TasksPackageState;
|
||||
import TestingSystem.DVM.UserConnection;
|
||||
import Visual_DVM_2021.Passes.PassException;
|
||||
import Visual_DVM_2021.Passes.Server.TestingSystemPass;
|
||||
|
||||
import java.io.FileWriter;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
public class DVMTestingPlanner {
|
||||
//----
|
||||
LinkedHashMap<String, Machine> machines = new LinkedHashMap<>();
|
||||
//todo приделать к ним очередь? или сделать в бд тестирования список машин.
|
||||
LinkedHashMap<String, User> users = new LinkedHashMap<>();
|
||||
//-- текущие машина и пользователь.
|
||||
Machine machine = null;
|
||||
User user = null;
|
||||
//----
|
||||
DVMPackage dvmPackage; // текущий активный пакет тестирования DVM
|
||||
int getSleepMillis() {
|
||||
return 2000;
|
||||
}
|
||||
//---
|
||||
Object ServerCommand(ServerCode code_in, String arg, Serializable object_in) throws Exception {
|
||||
TestingSystemPass<Object> pass = new TestingSystemPass<Object>() {
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "";
|
||||
}
|
||||
@Override
|
||||
protected void ServerAction() throws Exception {
|
||||
Command(new ServerExchangeUnit_2021(code_in, arg, object_in));
|
||||
target = response.object;
|
||||
}
|
||||
};
|
||||
if (!pass.Do()) throw new PassException("Ошибка взаимодействия с сервером " + code_in);
|
||||
return pass.target;
|
||||
}
|
||||
Object ServerCommand(ServerCode code_in, Serializable object_in) throws Exception {
|
||||
return ServerCommand(code_in, "", object_in);
|
||||
}
|
||||
Object ServerCommand(ServerCode code_in) throws Exception {
|
||||
return ServerCommand(code_in, "", null);
|
||||
}
|
||||
//---
|
||||
boolean isPrintOn() {
|
||||
return true;
|
||||
}
|
||||
public void Print(String message) {
|
||||
try {
|
||||
if (isPrintOn()) {
|
||||
FileWriter testLog = new FileWriter(getClass().getSimpleName() + "_Log.txt", true);
|
||||
String dmessage = Utils.Brackets(new Date()) + " " + message;
|
||||
System.out.println(dmessage);
|
||||
testLog.write(dmessage + "\n");
|
||||
testLog.close();
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
//---
|
||||
void CheckMachineAndUser() {
|
||||
String machine_url = dvmPackage.machine_address + ":" + dvmPackage.machine_port;
|
||||
if (!machines.containsKey(machine_url))
|
||||
machines.put(machine_url, new Machine(
|
||||
dvmPackage.machine_name,
|
||||
dvmPackage.machine_address,
|
||||
dvmPackage.machine_port,
|
||||
MachineType.Server));
|
||||
if (!users.containsKey(dvmPackage.user_name))
|
||||
users.put(dvmPackage.user_name,
|
||||
new User(dvmPackage.user_name, dvmPackage.user_password, dvmPackage.user_workspace));
|
||||
//-->>
|
||||
machine = machines.get(machine_url);
|
||||
user = users.get(dvmPackage.user_name);
|
||||
//--
|
||||
}
|
||||
boolean CheckConnection(Machine machine, User user) {
|
||||
//каждый раз соединяемся по новой. из за проблем с Exists.
|
||||
// к тому же, теперь задачи гоняет модуль, тут только проверка
|
||||
//так что время на разрыв уже не критично.
|
||||
//todo попробовать все же вариант с постоянным соединением.
|
||||
try {
|
||||
user.connection = null;
|
||||
user.connection = new UserConnection(machine, user);
|
||||
Print("Соединение c " + machine.getURL() + " " + user.login + " успешно установлено.");
|
||||
user.connection.ShellCommand("ulimit -s unlimited"); // нужно, для запуска сишной части.
|
||||
} catch (Exception ex) {
|
||||
Global.Log.PrintException(ex);
|
||||
user.connection = null;
|
||||
Print("Не удалось установить соединение.");
|
||||
}
|
||||
return user.connection != null;
|
||||
}
|
||||
//--
|
||||
void EmailPackage(TestingPackage package_in) throws Exception{
|
||||
EmailMessage message = new EmailMessage();
|
||||
message.subject = "Состояние пакета задач " + Utils.Brackets(package_in) + " изменилось на " + Utils.Brackets(package_in.state.getDescription());
|
||||
message.text = package_in.description;
|
||||
message.targets.add(package_in.sender_address);
|
||||
ServerCommand(ServerCode.Email, message);
|
||||
}
|
||||
void UpdatePackage(TestingPackage package_in){
|
||||
|
||||
}
|
||||
// состояния пакета.
|
||||
void AnalyseResults() {
|
||||
}
|
||||
//---
|
||||
public void Perform() {
|
||||
/*
|
||||
while (true) {
|
||||
try {
|
||||
dvmPackage = (DVMPackage) ServerCommand(ServerCode.GetFirstActiveDVMPackage);
|
||||
if (dvmPackage != null) {
|
||||
System.out.println(dvmPackage.id + " " + dvmPackage.state.getDescription());
|
||||
//--
|
||||
CheckMachineAndUser();
|
||||
if (dvmPackage.state.equals(TasksPackageState.Analysis)) {
|
||||
AnalyseResults(); //на анализ уже не нужно соединение.
|
||||
dvmPackage.state = TasksPackageState.Done;
|
||||
UpdateDVMPackage();
|
||||
} else {
|
||||
if (CheckConnection(machine, user)) {
|
||||
try {
|
||||
switch (dvmPackage.state){
|
||||
case TestsSynchronize:
|
||||
TestsSynchronize();
|
||||
dvmPackage.state = TasksPackageState.PackageWorkspaceCreation;
|
||||
UpdateDVMPackage();
|
||||
break;
|
||||
case PackageWorkspaceCreation:
|
||||
PackageWorkspaceCreation();
|
||||
tasksPackage.state = TasksPackageState.PackageStart;
|
||||
UpdateDVMPackage();
|
||||
break;
|
||||
case PackageStart:
|
||||
PackageStart();
|
||||
tasksPackage.state = TasksPackageState.CompilationWorkspacesCreation;
|
||||
UpdateDVMPackage();
|
||||
break;
|
||||
case CompilationWorkspacesCreation:
|
||||
case CompilationPreparation:
|
||||
case CompilationExecution:
|
||||
case RunningWorkspacesCreation:
|
||||
case RunningPreparation:
|
||||
case RunningExecution:
|
||||
checkNextState();
|
||||
break;
|
||||
case RunningEnd:
|
||||
DownloadResults();
|
||||
dvmPackage.state = TasksPackageState.Analysis;
|
||||
planner.UpdatePackage();
|
||||
break;
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Print("Ошибка сеанса.");
|
||||
Print(ex.getMessage());
|
||||
}
|
||||
finally {
|
||||
if (user.connection != null) {
|
||||
user.connection.Disconnect();
|
||||
user.connection = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
Utils.sleep(getSleepMillis());
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import GlobalData.RemoteFile.RemoteFile;
|
||||
import GlobalData.Tasks.TaskState;
|
||||
import Repository.Server.ServerCode;
|
||||
import TestingSystem.Common.Test.TestType;
|
||||
import TestingSystem.Common.TestingPlanner;
|
||||
import TestingSystem.Common.TestingPlanner_OLD;
|
||||
import TestingSystem.DVM.Tasks.TestCompilationTask;
|
||||
import TestingSystem.DVM.Tasks.TestRunTask;
|
||||
import TestingSystem.DVM.Tasks.TestTask;
|
||||
@@ -21,7 +21,7 @@ import java.nio.charset.Charset;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.*;
|
||||
public class TestsSupervisor_2022 {
|
||||
protected TestingPlanner planner; //планировщик.
|
||||
protected TestingPlanner_OLD planner; //планировщик.
|
||||
protected UserConnection connection;
|
||||
protected TasksPackage tasksPackage;
|
||||
protected RemoteFile packageRemoteWorkspace;
|
||||
@@ -29,7 +29,7 @@ public class TestsSupervisor_2022 {
|
||||
protected Vector<TestCompilationTask> compilationTasks; //список задач на компиляцию
|
||||
protected int count = 0; //число активных задач.
|
||||
//----
|
||||
public TestsSupervisor_2022(TestingPlanner planner_in, UserConnection connection_in, TasksPackage tasksPackage_in, Vector<TestCompilationTask> tasks_in) {
|
||||
public TestsSupervisor_2022(TestingPlanner_OLD planner_in, UserConnection connection_in, TasksPackage tasksPackage_in, Vector<TestCompilationTask> tasks_in) {
|
||||
planner = planner_in;
|
||||
connection = connection_in;
|
||||
tasksPackage = tasksPackage_in;
|
||||
|
||||
Reference in New Issue
Block a user