промежуточный. прописал для планировщиков общий класс-предок

This commit is contained in:
2023-12-14 02:30:56 +03:00
parent 749c0397e6
commit c07b72eb5d
18 changed files with 669 additions and 4416 deletions

View File

@@ -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");

View File

@@ -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:

View 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());
}
}
*/
}
}

View File

@@ -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;