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

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

16
.idea/workspace.xml generated
View File

@@ -7,17 +7,23 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment=""> <list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/StartDVMPackage.java" afterDir="false" /> <change afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingPlanner_OLD.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMTestingPlanner.java" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/DeleteDVMPackage.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Packages/dvmpackage_1702385390/package_json" beforeDir="false" /> <change beforePath="$PROJECT_DIR$/Packages/dvmpackage_1702386255/package_json" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Packages/dvmpackage_1702385477/package_json" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/Common/UI/Menus_2023/DVMPackagesBar/DVMPackagesBar.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/UI/Menus_2023/DVMPackagesBar/DVMPackagesBar.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Common/UI/Menus_2023/DVMPackagesBar/DVMPackagesBar.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/UI/Menus_2023/DVMPackagesBar/DVMPackagesBar.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Repository/Server/ServerCode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Repository/Server/ServerCode.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Repository/Server/ServerCode.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Repository/Server/ServerCode.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestingPackage/TestingPackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingPackage/TestingPackage.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestingPlanner.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingPlanner.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestingServer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMPackage/DVMPackage_json.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMPackage/DVMPackage_json.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/TestingSystem/Common/TestsDatabase.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/Common/TestsDatabase.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMPackage/DVMPackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMPackage/DVMPackage.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMPackage/DVMPackageDBTable.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/DVMPackage/DVMPackageDBTable.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/DVM/TestsSupervisor_2022.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/DVM/TestsSupervisor_2022.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/SapforTasksPackageSupervisor/SapforTasksPackageSupervisor.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/TestingSystem/SAPFOR/SapforTasksPackageSupervisor/SapforTasksPackageSupervisor.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/AddDVMPackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/AddDVMPackage.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/AddDVMPackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/AddDVMPackage.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/AddTasksToDVMPackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/AddTasksToDVMPackage.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/AddTasksToDVMPackage.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/AddTasksToDVMPackage.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/SynchronizeTests.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/All/SynchronizeTests.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/PassCode_2021.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/PassCode_2021.java" afterDir="false" /> <change beforePath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/PassCode_2021.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Visual_DVM_2021/Passes/PassCode_2021.java" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,8 @@ public class DVMPackagesBar extends DataMenuBar {
public DVMPackagesBar() { public DVMPackagesBar() {
super("пакеты задач DVM", PassCode_2021.AddDVMPackage, super("пакеты задач DVM", PassCode_2021.AddDVMPackage,
PassCode_2021.AddTasksToDVMPackage, PassCode_2021.AddTasksToDVMPackage,
PassCode_2021.StartDVMPackage PassCode_2021.StartDVMPackage,
PassCode_2021.DeleteDVMPackage
// PassCode_2021.ExportTasksPackageToExcel,PassCode_2021.AbortTaskPackage, PassCode_2021.DeleteTasksPackage // PassCode_2021.ExportTasksPackageToExcel,PassCode_2021.AbortTaskPackage, PassCode_2021.DeleteTasksPackage
); );
} }

View File

@@ -84,6 +84,7 @@ public enum ServerCode {
PublishObjects, PublishObjects,
UpdateTestTasks, UpdateTestTasks,
ActualizeSAPFORPackages, ActualizeSAPFORPackages,
ActualizeDVMPackages ActualizeDVMPackages,
// PublishTestProject // PublishTestProject
GetFirstActiveDVMPackage;
} }

View File

@@ -1,10 +1,8 @@
package TestingSystem.Common.TestingPackage; package TestingSystem.Common.TestingPackage;
import Common.Constants;
import Common.Database.DBObject; import Common.Database.DBObject;
import Common.Database.rDBObject; import Common.Database.riDBObject;
import TestingSystem.DVM.TasksPackage.TasksPackageState; import TestingSystem.DVM.TasksPackage.TasksPackageState;
import com.sun.org.glassfish.gmbal.Description; public class TestingPackage extends riDBObject {
public class TestingPackage extends rDBObject {
public int tasksCount = 0; //Общее число задач public int tasksCount = 0; //Общее число задач
//-- //--
public int kernels = 1; public int kernels = 1;
@@ -14,6 +12,8 @@ public class TestingPackage extends rDBObject {
public String drv = ""; //пусть к исполняемому файлы тестируемого объекта public String drv = ""; //пусть к исполняемому файлы тестируемого объекта
//-- //--
public int progress = 0; //прогресс выполнения public int progress = 0; //прогресс выполнения
public long StartDate= 0;
public long ChangeDate =0;
public TasksPackageState state = TasksPackageState.Draft; public TasksPackageState state = TasksPackageState.Draft;
//-- //--
@Override @Override

View File

@@ -1,61 +1,23 @@
package TestingSystem.Common; package TestingSystem.Common;
import Common.Global;
import Common.Utils.Utils; import Common.Utils.Utils;
import GlobalData.Machine.Machine;
import GlobalData.User.User;
import Repository.EmailMessage; import Repository.EmailMessage;
import Repository.Server.ServerCode; import Repository.Server.ServerCode;
import Repository.Server.ServerExchangeUnit_2021; import Repository.Server.ServerExchangeUnit_2021;
import TestingSystem.DVM.Tasks.TestCompilationTask; import TestingSystem.Common.TestingPackage.TestingPackage;
import TestingSystem.DVM.TasksPackage.TasksPackage;
import TestingSystem.DVM.TasksPackage.TasksPackageState; import TestingSystem.DVM.TasksPackage.TasksPackageState;
import TestingSystem.DVM.TestsSupervisor_2022;
import TestingSystem.DVM.UserConnection;
import TestingSystem.SAPFOR.SapforTasksPackage.SapforTasksPackage;
import TestingSystem.SAPFOR.SapforTasksPackageSupervisor.SapforTasksPackageSupervisor;
import Visual_DVM_2021.Passes.PassException; import Visual_DVM_2021.Passes.PassException;
import Visual_DVM_2021.Passes.SSH.ConnectionPass;
import Visual_DVM_2021.Passes.Server.TestingSystemPass; import Visual_DVM_2021.Passes.Server.TestingSystemPass;
import javafx.util.Pair;
import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.LinkedHashMap; public abstract class TestingPlanner<P extends TestingPackage> {
import java.util.Vector; protected P testingPackage;
protected int getSleepMillis() {
import static Common.Constants.tests_db_name; return 2000;
public class TestingPlanner {
public String email;
TasksPackage tasksPackage;
TestsSupervisor_2022 supervisor;
LinkedHashMap<String, Machine> machines = new LinkedHashMap<>();
LinkedHashMap<String, User> users = new LinkedHashMap<>();
protected Machine machine = null;
protected User user = null;
public LinkedHashMap<Long, TestCompilationTask> packageTasks = new LinkedHashMap<>();
//----------
SapforTasksPackage sapforTasksPackage = null;
//----------
public void UpdatePackage() throws Exception {
tasksPackage.ChangeDate = new Date().getTime();
ServerCommand(ServerCode.EditAccountObject, tasksPackage);
//---------------
if ((tasksPackage.needsEmail == 1) &&
(tasksPackage.state.equals(TasksPackageState.PackageStart) ||
(tasksPackage.state.equals(TasksPackageState.Done)) ||
(tasksPackage.state.equals(TasksPackageState.Aborted))
)) {
EmailMessage message = new EmailMessage();
message.subject = "Состояние пакета задач " + Utils.Brackets(tasksPackage.id) + " изменилось на " + Utils.Brackets(tasksPackage.state.getDescription());
message.text = tasksPackage.summary;
message.targets.add(email);
ServerCommand(ServerCode.Email, message);
} }
} //---
//- protected Object ServerCommand(ServerCode code_in, String arg, Serializable object_in) throws Exception {
public Object ServerCommand(ServerCode code_in, String arg, Serializable object_in) throws Exception {
TestingSystemPass<Object> pass = new TestingSystemPass<Object>() { TestingSystemPass<Object> pass = new TestingSystemPass<Object>() {
@Override @Override
public String getDescription() { public String getDescription() {
@@ -70,163 +32,132 @@ public class TestingPlanner {
if (!pass.Do()) throw new PassException("Ошибка взаимодействия с сервером " + code_in); if (!pass.Do()) throw new PassException("Ошибка взаимодействия с сервером " + code_in);
return pass.target; return pass.target;
} }
public Object ServerCommand(ServerCode code_in, Serializable object_in) throws Exception { protected Object ServerCommand(ServerCode code_in, Serializable object_in) throws Exception {
return ServerCommand(code_in, email, object_in); return ServerCommand(code_in, "", object_in);
} }
Object ServerCommand(ServerCode code_in) throws Exception { protected Object ServerCommand(ServerCode code_in) throws Exception {
return ServerCommand(code_in, email, null); return ServerCommand(code_in, "", null);
} }
//- //---
boolean isPrintOn() { protected boolean isPrintOn() {
return true; return true;
} }
public void Print(String message) { protected void Print(String message) {
try { try {
if (isPrintOn()) {
FileWriter testLog = new FileWriter(getClass().getSimpleName() + "_Log.txt", true); FileWriter testLog = new FileWriter(getClass().getSimpleName() + "_Log.txt", true);
String dmessage = Utils.Brackets(new Date()) + " " + message; String dmessage = Utils.Brackets(new Date()) + " " + message;
if (isPrintOn())
System.out.println(dmessage); System.out.println(dmessage);
testLog.write(dmessage + "\n"); testLog.write(dmessage + "\n");
testLog.close(); testLog.close();
}
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
} }
boolean CheckConnection(Machine machine, User user) { //---
//каждый раз соединяемся по новой. из за проблем с Exists. void UpdatePackageState(TasksPackageState state_in) throws Exception {
// к тому же, теперь задачи гоняет модуль, тут только проверка testingPackage.state = state_in;
//так что время на разрыв уже не критично. testingPackage.ChangeDate = new Date().getTime();
try { ServerCommand(ServerCode.EditObject, testingPackage);
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 UpdatePackage() throws Exception {
testingPackage.ChangeDate = new Date().getTime();
ServerCommand(ServerCode.EditObject, testingPackage);
} }
//- void EmailPackage() throws Exception {
EmailMessage message = new EmailMessage();
message.subject = "Состояние пакета задач " + Utils.Brackets(testingPackage) + " изменилось на " + Utils.Brackets(testingPackage.state.getDescription());
message.text = testingPackage.description;
message.targets.add(testingPackage.sender_address);
ServerCommand(ServerCode.Email, message);
}
//---
protected abstract ServerCode getActivePackageCode();
protected abstract ServerCode getCheckIfNeedsKillCode();
protected abstract TasksPackageState getStateAfterStart();
protected void InitSessionCredentials() {
}
protected abstract void TestsSynchronize();
protected abstract void PackageWorkspaceCreation();
protected abstract void AnalyseResults();
protected abstract void PackageStart();
protected abstract boolean CheckNextState();
protected abstract void DownloadResults();
protected abstract void Kill();
protected boolean Connect() {
return true;
}
protected void Disconnect() {
}
//---
//жизненный цикл планировщика
protected void Session() throws Exception {
switch (testingPackage.state) {
case TestsSynchronize:
TestsSynchronize();
UpdatePackageState(TasksPackageState.PackageWorkspaceCreation);
break;
case PackageWorkspaceCreation:
PackageWorkspaceCreation();
UpdatePackageState(TasksPackageState.PackageStart);
break;
case PackageStart:
PackageStart();
UpdatePackageState(getStateAfterStart());
EmailPackage();
break;
case CompilationWorkspacesCreation:
case CompilationPreparation:
case CompilationExecution:
case RunningWorkspacesCreation:
case RunningPreparation:
case RunningExecution:
if (CheckNextState()) UpdatePackage();
break;
case RunningEnd:
DownloadResults();
UpdatePackageState(TasksPackageState.Analysis);
break;
}
}
// ---
public void Perform() { public void Perform() {
Vector<String> emails = new Vector<>();
while (true) { while (true) {
emails.clear();
try { try {
File[] accountsBases_ = Global.DataDirectory.listFiles(pathname -> testingPackage = (P) ServerCommand(getActivePackageCode());
pathname.isFile() && if (testingPackage != null) {
Utils.getExtension(pathname).equals("sqlite") && Print(testingPackage.id + ":" + testingPackage.state.getDescription());
!Utils.getNameWithoutExtension(pathname.getName()).isEmpty() && //--
!pathname.getName().equals(tests_db_name + ".sqlite") InitSessionCredentials();
); if (testingPackage.state.equals(TasksPackageState.Analysis)) {
if (accountsBases_ != null) { AnalyseResults();
for (File accountBase : accountsBases_) { UpdatePackageState(TasksPackageState.Done);
String fileName = accountBase.getName(); EmailPackage();
String account_email = accountBase.getName().substring(0, fileName.lastIndexOf('_')); } else {
emails.add(account_email); try {
if (Connect()) {
if ((boolean) ServerCommand(getCheckIfNeedsKillCode(), testingPackage.id)) {
Print("package " + testingPackage.id + " NEEDS TO KILL");
Kill();
UpdatePackageState(TasksPackageState.Aborted);
EmailPackage();
} else
Session();
}
} catch (Exception ex) {
Print("Ошибка сеанса.");
Print(ex.getMessage());
} finally {
Disconnect();
}
} }
for (String current_email : emails)
emailPass(current_email);
} }
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} finally { } finally {
try {
Utils.sleep(getSleepMillis()); Utils.sleep(getSleepMillis());
} catch (Exception ignored) {
} }
} }
} }
} }
protected int getSleepMillis() {
return 2000;
}
void emailPass(String email_in) {
email = email_in;
try {
// System.out.println(email+" testing planner starts...");
Pair<TasksPackage, LinkedHashMap<Long, TestCompilationTask>> p = (Pair<TasksPackage, LinkedHashMap<Long, TestCompilationTask>>) ServerCommand(ServerCode.GetFirstActiveAccountPackage);
sapforTasksPackage = (SapforTasksPackage) ServerCommand(ServerCode.GetFirstActiveSapforTasksPackage);
tasksPackage = null;
packageTasks = null;
tasksPackage = p.getKey();
packageTasks = p.getValue();
if (tasksPackage != null) {
// System.out.println("found dvm package: "+sapforTasksPackage.id);
String machine_url = tasksPackage.machine_address + ":" + tasksPackage.machine_port;
if (!machines.containsKey(machine_url))
machines.put(machine_url, new Machine(
tasksPackage.machine_name,
tasksPackage.machine_address,
tasksPackage.machine_port,
tasksPackage.machine_type));
if (!users.containsKey(tasksPackage.user_name))
users.put(tasksPackage.user_name,
new User(tasksPackage.user_name, tasksPackage.user_password, tasksPackage.user_workspace));
machine = machines.get(machine_url);
//-->>
user = users.get(tasksPackage.user_name);
if (CheckConnection(machine, user)) {
try {
supervisor = new TestsSupervisor_2022(this, user.connection, tasksPackage, new Vector<>(packageTasks.values()));
supervisor.Perform();
} catch (Exception ex) {
Print("Ошибка сеанса.");
Print(ex.getMessage());
}
finally {
if (user.connection != null) {
user.connection.Disconnect();
user.connection = null;
}
}
}
}
if (sapforTasksPackage != null) {
System.out.println("found sapfor package: " + sapforTasksPackage.id + " state = " + sapforTasksPackage.state);
try {
(new SapforTasksPackageSupervisor(this, sapforTasksPackage)).Perform();
} catch (Exception ex) {
Print("Исключение при тестировании SAPROR");
Print(ex.getMessage());
}
}
} catch (Exception ex) {
Global.Log.PrintException(ex);
}
}
public String getStarter() {
return String.join("/", user.workspace, ConnectionPass.modules, ConnectionPass.starter);
}
public String getLauncher() {
return String.join("/", user.workspace, ConnectionPass.modules, ConnectionPass.launcher);
}
public String getPlanner() {
return String.join("/", user.workspace, ConnectionPass.modules, ConnectionPass.planner);
}
//--
public void UpdateSapforPackage() throws Exception {
sapforTasksPackage.ChangeDate = new Date().getTime();
EmailMessage message = null;
ServerCommand(ServerCode.EditAccountObject, sapforTasksPackage);
if (sapforTasksPackage.needsEmail == 1) {
switch (sapforTasksPackage.state) {
case RunningExecution:
case Aborted:
case Done:
//результаты.
message = new EmailMessage();
message.subject = "Состояние пакета задач SAPFOR" + Utils.Brackets(sapforTasksPackage.id) + " изменилось на " + Utils.Brackets(sapforTasksPackage.state.getDescription());
message.text = sapforTasksPackage.summary;
break;
default:
break;
}
}
if (message != null) {
message.targets.add(email);
ServerCommand(ServerCode.Email, message);
}
}
}

View File

@@ -0,0 +1,232 @@
package TestingSystem.Common;
import Common.Global;
import Common.Utils.Utils;
import GlobalData.Machine.Machine;
import GlobalData.User.User;
import Repository.EmailMessage;
import Repository.Server.ServerCode;
import Repository.Server.ServerExchangeUnit_2021;
import TestingSystem.DVM.Tasks.TestCompilationTask;
import TestingSystem.DVM.TasksPackage.TasksPackage;
import TestingSystem.DVM.TasksPackage.TasksPackageState;
import TestingSystem.DVM.TestsSupervisor_2022;
import TestingSystem.DVM.UserConnection;
import TestingSystem.SAPFOR.SapforTasksPackage.SapforTasksPackage;
import TestingSystem.SAPFOR.SapforTasksPackageSupervisor.SapforTasksPackageSupervisor;
import Visual_DVM_2021.Passes.PassException;
import Visual_DVM_2021.Passes.SSH.ConnectionPass;
import Visual_DVM_2021.Passes.Server.TestingSystemPass;
import javafx.util.Pair;
import java.io.File;
import java.io.FileWriter;
import java.io.Serializable;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Vector;
import static Common.Constants.tests_db_name;
public class TestingPlanner_OLD {
public String email;
TasksPackage tasksPackage;
TestsSupervisor_2022 supervisor;
LinkedHashMap<String, Machine> machines = new LinkedHashMap<>();
LinkedHashMap<String, User> users = new LinkedHashMap<>();
protected Machine machine = null;
protected User user = null;
public LinkedHashMap<Long, TestCompilationTask> packageTasks = new LinkedHashMap<>();
//----------
SapforTasksPackage sapforTasksPackage = null;
//----------
public void UpdatePackage() throws Exception {
tasksPackage.ChangeDate = new Date().getTime();
ServerCommand(ServerCode.EditAccountObject, tasksPackage);
//---------------
if ((tasksPackage.needsEmail == 1) &&
(tasksPackage.state.equals(TasksPackageState.PackageStart) ||
(tasksPackage.state.equals(TasksPackageState.Done)) ||
(tasksPackage.state.equals(TasksPackageState.Aborted))
)) {
EmailMessage message = new EmailMessage();
message.subject = "Состояние пакета задач " + Utils.Brackets(tasksPackage.id) + " изменилось на " + Utils.Brackets(tasksPackage.state.getDescription());
message.text = tasksPackage.summary;
message.targets.add(email);
ServerCommand(ServerCode.Email, message);
}
}
//-
public 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;
}
public Object ServerCommand(ServerCode code_in, Serializable object_in) throws Exception {
return ServerCommand(code_in, email, object_in);
}
Object ServerCommand(ServerCode code_in) throws Exception {
return ServerCommand(code_in, email, null);
}
//-
boolean isPrintOn() {
return true;
}
public void Print(String message) {
try {
FileWriter testLog = new FileWriter(getClass().getSimpleName() + "_Log.txt", true);
String dmessage = Utils.Brackets(new Date()) + " " + message;
if (isPrintOn())
System.out.println(dmessage);
testLog.write(dmessage + "\n");
testLog.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
boolean CheckConnection(Machine machine, User user) {
//каждый раз соединяемся по новой. из за проблем с Exists.
// к тому же, теперь задачи гоняет модуль, тут только проверка
//так что время на разрыв уже не критично.
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;
}
//-
public void Perform() {
Vector<String> emails = new Vector<>();
while (true) {
emails.clear();
try {
File[] accountsBases_ = Global.DataDirectory.listFiles(pathname ->
pathname.isFile() &&
Utils.getExtension(pathname).equals("sqlite") &&
!Utils.getNameWithoutExtension(pathname.getName()).isEmpty() &&
!pathname.getName().equals(tests_db_name + ".sqlite")
);
if (accountsBases_ != null) {
for (File accountBase : accountsBases_) {
String fileName = accountBase.getName();
String account_email = accountBase.getName().substring(0, fileName.lastIndexOf('_'));
emails.add(account_email);
}
for (String current_email : emails)
emailPass(current_email);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
Utils.sleep(getSleepMillis());
} catch (Exception ignored) {
}
}
}
}
protected int getSleepMillis() {
return 2000;
}
void emailPass(String email_in) {
email = email_in;
try {
// System.out.println(email+" testing planner starts...");
Pair<TasksPackage, LinkedHashMap<Long, TestCompilationTask>> p = (Pair<TasksPackage, LinkedHashMap<Long, TestCompilationTask>>) ServerCommand(ServerCode.GetFirstActiveAccountPackage);
sapforTasksPackage = (SapforTasksPackage) ServerCommand(ServerCode.GetFirstActiveSapforTasksPackage);
tasksPackage = null;
packageTasks = null;
tasksPackage = p.getKey();
packageTasks = p.getValue();
if (tasksPackage != null) {
// System.out.println("found dvm package: "+sapforTasksPackage.id);
String machine_url = tasksPackage.machine_address + ":" + tasksPackage.machine_port;
if (!machines.containsKey(machine_url))
machines.put(machine_url, new Machine(
tasksPackage.machine_name,
tasksPackage.machine_address,
tasksPackage.machine_port,
tasksPackage.machine_type));
if (!users.containsKey(tasksPackage.user_name))
users.put(tasksPackage.user_name,
new User(tasksPackage.user_name, tasksPackage.user_password, tasksPackage.user_workspace));
machine = machines.get(machine_url);
//-->>
user = users.get(tasksPackage.user_name);
if (CheckConnection(machine, user)) {
try {
supervisor = new TestsSupervisor_2022(this, user.connection, tasksPackage, new Vector<>(packageTasks.values()));
supervisor.Perform();
} catch (Exception ex) {
Print("Ошибка сеанса.");
Print(ex.getMessage());
}
finally {
if (user.connection != null) {
user.connection.Disconnect();
user.connection = null;
}
}
}
}
if (sapforTasksPackage != null) {
System.out.println("found sapfor package: " + sapforTasksPackage.id + " state = " + sapforTasksPackage.state);
try {
(new SapforTasksPackageSupervisor(this, sapforTasksPackage)).Perform();
} catch (Exception ex) {
Print("Исключение при тестировании SAPROR");
Print(ex.getMessage());
}
}
} catch (Exception ex) {
Global.Log.PrintException(ex);
}
}
public String getStarter() {
return String.join("/", user.workspace, ConnectionPass.modules, ConnectionPass.starter);
}
public String getLauncher() {
return String.join("/", user.workspace, ConnectionPass.modules, ConnectionPass.launcher);
}
public String getPlanner() {
return String.join("/", user.workspace, ConnectionPass.modules, ConnectionPass.planner);
}
//--
public void UpdateSapforPackage() throws Exception {
sapforTasksPackage.ChangeDate = new Date().getTime();
EmailMessage message = null;
ServerCommand(ServerCode.EditAccountObject, sapforTasksPackage);
if (sapforTasksPackage.needsEmail == 1) {
switch (sapforTasksPackage.state) {
case RunningExecution:
case Aborted:
case Done:
//результаты.
message = new EmailMessage();
message.subject = "Состояние пакета задач SAPFOR" + Utils.Brackets(sapforTasksPackage.id) + " изменилось на " + Utils.Brackets(sapforTasksPackage.state.getDescription());
message.text = sapforTasksPackage.summary;
break;
default:
break;
}
}
if (message != null) {
message.targets.add(email);
ServerCommand(ServerCode.Email, message);
}
}
}

View File

@@ -22,6 +22,7 @@ import TestingSystem.Common.TasksPackageToKill.TasksPackageToKill;
import TestingSystem.Common.Test.Test; import TestingSystem.Common.Test.Test;
import TestingSystem.Common.Test.TestType; import TestingSystem.Common.Test.TestType;
import TestingSystem.DVM.DVMPackage.DVMPackage; import TestingSystem.DVM.DVMPackage.DVMPackage;
import TestingSystem.DVM.DVMTestingPlanner;
import TestingSystem.DVM.Tasks.TestCompilationTask; import TestingSystem.DVM.Tasks.TestCompilationTask;
import TestingSystem.DVM.Tasks.TestRunTask; import TestingSystem.DVM.Tasks.TestRunTask;
import TestingSystem.DVM.Tasks.TestTask; import TestingSystem.DVM.Tasks.TestTask;
@@ -102,9 +103,13 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
@Override @Override
protected void startAdditionalThreads() { protected void startAdditionalThreads() {
testingThread.start(); testingThread.start();
testingThread_2023.start();
} }
protected TestingPlanner testingPlanner = new TestingPlanner(); protected TestingPlanner_OLD testingPlannerOLD = new TestingPlanner_OLD();
protected Thread testingThread = new Thread(() -> testingPlanner.Perform()); protected Thread testingThread = new Thread(() -> testingPlannerOLD.Perform());
//---
protected DVMTestingPlanner DVMTestingPlanner_ = new DVMTestingPlanner();
protected Thread testingThread_2023 = new Thread(() -> DVMTestingPlanner_.Perform());
//------>>> //------>>>
public static Timer checkTimer = null; public static Timer checkTimer = null;
public static void TimerOn() { public static void TimerOn() {
@@ -369,6 +374,11 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
response = new ServerExchangeUnit_2021(ServerCode.OK); response = new ServerExchangeUnit_2021(ServerCode.OK);
ActualizeSAPFORPackages(); ActualizeSAPFORPackages();
break; break;
case GetFirstActiveDVMPackage:
Print("Получить первый активный пакет задач DVM");
response = new ServerExchangeUnit_2021(ServerCode.OK);
response.object = db.getFirstActiveDVMPackage();
break;
default: default:
throw new RepositoryRefuseException("Неподдерживаемый код: " + code); throw new RepositoryRefuseException("Неподдерживаемый код: " + code);
} }
@@ -529,13 +539,6 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
} else if (object instanceof SapforTasksPackage) { } else if (object instanceof SapforTasksPackage) {
SapforTasksPackage sapforTasksPackage = (SapforTasksPackage) object; SapforTasksPackage sapforTasksPackage = (SapforTasksPackage) object;
sapforTasksPackage.id = db.IncKey(SettingName.SAPFORPackageId); sapforTasksPackage.id = db.IncKey(SettingName.SAPFORPackageId);
}else if (object instanceof DVMPackage){
DVMPackage dvmPackage = (DVMPackage) object;
//--
dvmPackage.state = TasksPackageState.Queued;
Utils.CheckAndCleanDirectory(dvmPackage.getLocalWorkspace());
//--
dvmPackage.saveJson();
} }
} }
@Override @Override
@@ -593,6 +596,14 @@ public class TestingServer extends RepositoryServer<TestsDatabase> {
+ "\nТест будет удален" + "\nТест будет удален"
); );
} }
}else if (object instanceof DVMPackage) {
DVMPackage dvmPackage = (DVMPackage) object;
//--
dvmPackage.state = TasksPackageState.Queued;
Utils.CheckAndCleanDirectory(dvmPackage.getLocalWorkspace());
//--
dvmPackage.saveJson();
dvmPackage.package_json = null; // объект больше не нужен.
} }
} }
@Override @Override

View File

@@ -2,15 +2,17 @@ package TestingSystem.Common;
import Common.Constants; import Common.Constants;
import Common.Database.SQLITE.SQLiteDatabase; import Common.Database.SQLITE.SQLiteDatabase;
import GlobalData.Settings.SettingName; import GlobalData.Settings.SettingName;
import TestingSystem.DVM.DVMPackage.DVMPackageDBTable;
import TestingSystem.SAPFOR.SapforConfiguration.SapforConfigurationDBTable;
import TestingSystem.SAPFOR.SapforConfigurationCommand.SapforConfigurationCommandsDBTable;
import TestingSystem.SAPFOR.ServerSapfor.ServerSapforsDBTable;
import TestingSystem.DVM.Configuration.ConfigurationDBTable;
import TestingSystem.Common.Group.GroupsDBTable; import TestingSystem.Common.Group.GroupsDBTable;
import TestingSystem.Common.TSetting.TSetting; import TestingSystem.Common.TSetting.TSetting;
import TestingSystem.Common.TSetting.TSettingsDBTable; import TestingSystem.Common.TSetting.TSettingsDBTable;
import TestingSystem.Common.Test.TestDBTable; import TestingSystem.Common.Test.TestDBTable;
import TestingSystem.DVM.Configuration.ConfigurationDBTable;
import TestingSystem.DVM.DVMPackage.DVMPackage;
import TestingSystem.DVM.DVMPackage.DVMPackageDBTable;
import TestingSystem.DVM.TasksPackage.TasksPackageState;
import TestingSystem.SAPFOR.SapforConfiguration.SapforConfigurationDBTable;
import TestingSystem.SAPFOR.SapforConfigurationCommand.SapforConfigurationCommandsDBTable;
import TestingSystem.SAPFOR.ServerSapfor.ServerSapforsDBTable;
import Visual_DVM_2021.Passes.PassCode_2021; import Visual_DVM_2021.Passes.PassCode_2021;
import java.nio.file.Paths; import java.nio.file.Paths;
@@ -66,4 +68,34 @@ public class TestsDatabase extends SQLiteDatabase {
Update(setting); Update(setting);
return res; return res;
} }
public DVMPackage getFirstActiveDVMPackage() {
DVMPackage first_active = null;
DVMPackage first_queued = null;
if (!dvmPackages.Data.isEmpty()) {
for (DVMPackage p : dvmPackages.Data.values()) {
switch (p.state) {
case Done:
case Aborted:
break;
case Queued:
if (first_queued == null) first_queued = p;
break;
default:
if (first_active == null) first_active = p; //это и будет первый активный.
break;
}
}
if (first_active != null) return first_active;
if (first_queued != null) {
first_queued.state = TasksPackageState.TestsSynchronize;
try {
Update(first_queued);
} catch (Exception ex) {
ex.printStackTrace();
}
}
return first_queued;
}
return null;
}
} }

View File

@@ -33,7 +33,7 @@ public class DVMPackage extends TestingPackage {
user_password = tasksPackage.user_password; user_password = tasksPackage.user_password;
} }
public File getLocalWorkspace() { public File getLocalWorkspace() {
return new File(Global.PackagesDirectory, id); return new File(Global.PackagesDirectory, String.valueOf(id));
} }
public File getJsonFile() { public File getJsonFile() {
return new File(getLocalWorkspace(), "package_json"); return new File(getLocalWorkspace(), "package_json");

View File

@@ -10,9 +10,9 @@ import java.util.Date;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import static Common.UI.Tables.TableRenderers.*; import static Common.UI.Tables.TableRenderers.*;
public class DVMPackageDBTable extends DBTable<String, DVMPackage> { public class DVMPackageDBTable extends iDBTable<DVMPackage> {
public DVMPackageDBTable() { public DVMPackageDBTable() {
super(String.class, DVMPackage.class); super(DVMPackage.class);
} }
@Override @Override
public Current CurrentName() { public Current CurrentName() {
@@ -88,9 +88,9 @@ public class DVMPackageDBTable extends DBTable<String, DVMPackage> {
case 8: case 8:
return object.progress; return object.progress;
case 9: case 9:
return new Date(object.date); return new Date(object.StartDate);
case 10: case 10:
return new Date(object.change_date); return new Date(object.ChangeDate);
case 11: case 11:
return object.state; return object.state;
default: 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 GlobalData.Tasks.TaskState;
import Repository.Server.ServerCode; import Repository.Server.ServerCode;
import TestingSystem.Common.Test.TestType; import TestingSystem.Common.Test.TestType;
import TestingSystem.Common.TestingPlanner; import TestingSystem.Common.TestingPlanner_OLD;
import TestingSystem.DVM.Tasks.TestCompilationTask; import TestingSystem.DVM.Tasks.TestCompilationTask;
import TestingSystem.DVM.Tasks.TestRunTask; import TestingSystem.DVM.Tasks.TestRunTask;
import TestingSystem.DVM.Tasks.TestTask; import TestingSystem.DVM.Tasks.TestTask;
@@ -21,7 +21,7 @@ import java.nio.charset.Charset;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.*; import java.util.*;
public class TestsSupervisor_2022 { public class TestsSupervisor_2022 {
protected TestingPlanner planner; //планировщик. protected TestingPlanner_OLD planner; //планировщик.
protected UserConnection connection; protected UserConnection connection;
protected TasksPackage tasksPackage; protected TasksPackage tasksPackage;
protected RemoteFile packageRemoteWorkspace; protected RemoteFile packageRemoteWorkspace;
@@ -29,7 +29,7 @@ public class TestsSupervisor_2022 {
protected Vector<TestCompilationTask> compilationTasks; //список задач на компиляцию protected Vector<TestCompilationTask> compilationTasks; //список задач на компиляцию
protected int count = 0; //число активных задач. 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; planner = planner_in;
connection = connection_in; connection = connection_in;
tasksPackage = tasksPackage_in; tasksPackage = tasksPackage_in;

View File

@@ -6,7 +6,7 @@ import Common.GlobalProperties;
import Common.Utils.Utils; import Common.Utils.Utils;
import Repository.Server.ServerCode; import Repository.Server.ServerCode;
import TestingSystem.Common.Test.Test; import TestingSystem.Common.Test.Test;
import TestingSystem.Common.TestingPlanner; import TestingSystem.Common.TestingPlanner_OLD;
import TestingSystem.DVM.TasksPackage.TasksPackageState; import TestingSystem.DVM.TasksPackage.TasksPackageState;
import TestingSystem.SAPFOR.Json.SapforConfiguration_json; import TestingSystem.SAPFOR.Json.SapforConfiguration_json;
import TestingSystem.SAPFOR.Json.SapforTasksPackage_json; import TestingSystem.SAPFOR.Json.SapforTasksPackage_json;
@@ -23,9 +23,9 @@ import java.io.File;
import java.util.Date; import java.util.Date;
import java.util.Vector; import java.util.Vector;
public class SapforTasksPackageSupervisor { public class SapforTasksPackageSupervisor {
protected TestingPlanner planner; //планировщик. protected TestingPlanner_OLD planner; //планировщик.
SapforTasksPackage sapforTasksPackage = null; SapforTasksPackage sapforTasksPackage = null;
public SapforTasksPackageSupervisor(TestingPlanner planner_in, SapforTasksPackage sapforTasksPackage_in) { public SapforTasksPackageSupervisor(TestingPlanner_OLD planner_in, SapforTasksPackage sapforTasksPackage_in) {
planner = planner_in; planner = planner_in;
sapforTasksPackage = sapforTasksPackage_in; sapforTasksPackage = sapforTasksPackage_in;
} }

View File

@@ -53,8 +53,7 @@ public class AddDVMPackage extends AddObjectPass<DVMPackage> {
} }
//-- //--
target = new DVMPackage(); target = new DVMPackage();
target.genName(); target.id = Constants.Nan;
//- //-
target.sender_name=Current.getAccount().name; target.sender_name=Current.getAccount().name;
target.sender_address = Current.getAccount().email; target.sender_address = Current.getAccount().email;
@@ -72,11 +71,13 @@ public class AddDVMPackage extends AddObjectPass<DVMPackage> {
target.needsEmail = Global.properties.EmailOnTestingProgress ? 1 : 0; target.needsEmail = Global.properties.EmailOnTestingProgress ? 1 : 0;
//-- //--
target.package_json = new DVMPackage_json(); target.package_json = new DVMPackage_json();
//Utils.CheckAndCleanDirectory(target.getLocalWorkspace());
//target.saveJson();
//--
return true; return true;
} }
return false; return false;
} }
@Override
protected void body() throws Exception {
//черновик не вставляется в бд.
Global.testingServer.db.dvmPackages.Data.put(target.id, target);
}
} }

View File

@@ -145,7 +145,7 @@ public class AddTasksToDVMPackage extends Pass_2021<DVMPackage> {
return UI.Question("Будет добавлено " + tasks_count + " задач. Продолжить"); return UI.Question("Будет добавлено " + tasks_count + " задач. Продолжить");
} }
// //
return true; return false;
} }
@Override @Override
protected void body() throws Exception { protected void body() throws Exception {

View File

@@ -0,0 +1,36 @@
package Visual_DVM_2021.Passes.All;
import Common.Global;
import Common.UI.UI;
import TestingSystem.Common.TestingServer;
import TestingSystem.DVM.DVMPackage.DVMPackage;
import TestingSystem.DVM.TasksPackage.TasksPackageState;
import Visual_DVM_2021.Passes.DeleteServerObjects;
public class DeleteDVMPackage extends DeleteServerObjects<TestingServer, DVMPackage> {
public DeleteDVMPackage() {
super(Global.testingServer, DVMPackage.class);
}
//---
public boolean checkActivity() {
/*
for (Object key : target) {
DVMPackage tasksPackage = server.db.dvmPackages.get(key);
if (!tasksPackage.state.equals(TasksPackageState.Done) &&
!tasksPackage.state.equals(TasksPackageState.Aborted)
) {
Log.Writeln_("Нельзя удалить активный пакет " + key + " !");
return false;
}
}
*/
return true;
}
@Override
protected boolean canStart(Object... args) throws Exception {
return super.canStart(args) && checkActivity();
}
@Override
protected void showPreparation() throws Exception {
UI.getMainWindow().getTestingWindow().DropTestRunTasksComparison();
}
}

View File

@@ -312,12 +312,15 @@ public enum PassCode_2021 {
AddDVMPackage, AddDVMPackage,
AddTasksToDVMPackage, AddTasksToDVMPackage,
StartDVMPackage, StartDVMPackage,
DeleteDVMPackage,
//-> //->
TestPass; TestPass;
public String getDescription() { public String getDescription() {
switch (this) { switch (this) {
case Undefined: case Undefined:
return "?"; return "?";
case DeleteDVMPackage:
return "Удалить пакет задач DVM";
case StartDVMPackage: case StartDVMPackage:
return "Запустить пакет задач DVM"; return "Запустить пакет задач DVM";
case AddTasksToDVMPackage: case AddTasksToDVMPackage: