From 7b4bee524f5834816e29abbd895e69d18597c28f Mon Sep 17 00:00:00 2001 From: Gerhard Hoffmann Date: Wed, 5 Feb 2025 16:25:01 +0100 Subject: [PATCH] adding commnds to execute --- ..._and_fetch_customer_repository_command.cpp | 6 +++ ...ck_and_fetch_customer_repository_command.h | 14 ++++++ .../check_ismas_connectivity_command.cpp | 9 ++++ .../check_ismas_connectivity_command.h | 14 ++++++ .../check_update_activation_command.cpp | 9 ++++ .../process/check_update_activation_command.h | 14 ++++++ UpdatePTUDevCtrl/process/command.cpp | 2 + UpdatePTUDevCtrl/process/command.h | 17 +++++-- .../process/exec_opkg_command.cpp | 10 +++++ UpdatePTUDevCtrl/process/exec_opkg_command.h | 17 +++++++ .../process/show_software_status_command.cpp | 9 ++++ .../process/show_software_status_command.h | 13 ++++++ UpdatePTUDevCtrl/process/update_command.cpp | 45 +++++++++++++++++++ UpdatePTUDevCtrl/process/update_command.h | 20 +++++++++ .../process/update_dc_command.cpp | 8 ++++ UpdatePTUDevCtrl/process/update_dc_command.h | 14 ++++++ .../process/update_filesystem_command.cpp | 8 ++++ .../process/update_filesystem_command.h | 14 ++++++ .../process/update_json_command.cpp | 8 ++++ .../process/update_json_command.h | 14 ++++++ 20 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 UpdatePTUDevCtrl/process/check_and_fetch_customer_repository_command.cpp create mode 100644 UpdatePTUDevCtrl/process/check_and_fetch_customer_repository_command.h create mode 100644 UpdatePTUDevCtrl/process/check_ismas_connectivity_command.cpp create mode 100644 UpdatePTUDevCtrl/process/check_ismas_connectivity_command.h create mode 100644 UpdatePTUDevCtrl/process/check_update_activation_command.cpp create mode 100644 UpdatePTUDevCtrl/process/check_update_activation_command.h create mode 100644 UpdatePTUDevCtrl/process/exec_opkg_command.cpp create mode 100644 UpdatePTUDevCtrl/process/exec_opkg_command.h create mode 100644 UpdatePTUDevCtrl/process/show_software_status_command.cpp create mode 100644 UpdatePTUDevCtrl/process/show_software_status_command.h create mode 100644 UpdatePTUDevCtrl/process/update_command.cpp create mode 100644 UpdatePTUDevCtrl/process/update_command.h create mode 100644 UpdatePTUDevCtrl/process/update_dc_command.cpp create mode 100644 UpdatePTUDevCtrl/process/update_dc_command.h create mode 100644 UpdatePTUDevCtrl/process/update_filesystem_command.cpp create mode 100644 UpdatePTUDevCtrl/process/update_filesystem_command.h create mode 100644 UpdatePTUDevCtrl/process/update_json_command.cpp create mode 100644 UpdatePTUDevCtrl/process/update_json_command.h diff --git a/UpdatePTUDevCtrl/process/check_and_fetch_customer_repository_command.cpp b/UpdatePTUDevCtrl/process/check_and_fetch_customer_repository_command.cpp new file mode 100644 index 0000000..80c5f27 --- /dev/null +++ b/UpdatePTUDevCtrl/process/check_and_fetch_customer_repository_command.cpp @@ -0,0 +1,6 @@ +#include "process/check_and_fetch_customer_repository_command.h" + +CheckAndFetchCustomerRepositoryCommand::CheckAndFetchCustomerRepositoryCommand( + QString const &command, Worker *worker, int start_timeout, int finish_timeout) + : UpdateCommand(command, worker, start_timeout, finish_timeout) { +} diff --git a/UpdatePTUDevCtrl/process/check_and_fetch_customer_repository_command.h b/UpdatePTUDevCtrl/process/check_and_fetch_customer_repository_command.h new file mode 100644 index 0000000..6d48ba1 --- /dev/null +++ b/UpdatePTUDevCtrl/process/check_and_fetch_customer_repository_command.h @@ -0,0 +1,14 @@ +#ifndef CHECK_AND_FETCH_CUSTOMER_REPOSITORY_COMMAND_H_INCLUDED +#define CHECK_AND_FETCH_CUSTOMER_REPOSITORY_COMMAND_H_INCLUDED + +#include "update_command.h" + +class CheckAndFetchCustomerRepositoryCommand : public UpdateCommand { +public: + explicit CheckAndFetchCustomerRepositoryCommand(QString const &command, + Worker *worker, + int start_timeout = 100000, + int finish_timeout = 100000); +}; + +#endif // CHECK_AND_FETCH_CUSTOMER_REPOSITORY_COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/check_ismas_connectivity_command.cpp b/UpdatePTUDevCtrl/process/check_ismas_connectivity_command.cpp new file mode 100644 index 0000000..c88a1ca --- /dev/null +++ b/UpdatePTUDevCtrl/process/check_ismas_connectivity_command.cpp @@ -0,0 +1,9 @@ +#include "process/check_ismas_connectivity_command.h" + + +CheckIsmasConnectivityCommand::CheckIsmasConnectivityCommand(QString const &command, + Worker *worker, + int start_timeout, + int finish_timeout) + : UpdateCommand(command, worker, start_timeout, finish_timeout) { +} diff --git a/UpdatePTUDevCtrl/process/check_ismas_connectivity_command.h b/UpdatePTUDevCtrl/process/check_ismas_connectivity_command.h new file mode 100644 index 0000000..161a79c --- /dev/null +++ b/UpdatePTUDevCtrl/process/check_ismas_connectivity_command.h @@ -0,0 +1,14 @@ +#ifndef CHECK_ISMAS_CONNECTIVITY_COMMAND_H_INCLUDED +#define CHECK_ISMAS_CONNECTIVITY_COMMAND_H_INCLUDED + +#include "update_command.h" + +class CheckIsmasConnectivityCommand : public UpdateCommand { +public: + explicit CheckIsmasConnectivityCommand(QString const &command, + Worker *worker, + int start_timeout = 100000, + int finish_timeout = 100000); +}; + +#endif // CHECK_ISMAS_CONNECTIVITY_COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/check_update_activation_command.cpp b/UpdatePTUDevCtrl/process/check_update_activation_command.cpp new file mode 100644 index 0000000..a325678 --- /dev/null +++ b/UpdatePTUDevCtrl/process/check_update_activation_command.cpp @@ -0,0 +1,9 @@ +#include "process/check_update_activation_command.h" + + +CheckUpdateActivationCommand::CheckUpdateActivationCommand(QString const &command, + Worker *worker, + int start_timeout, + int finish_timeout) + : UpdateCommand(command, worker, start_timeout, finish_timeout) { +} diff --git a/UpdatePTUDevCtrl/process/check_update_activation_command.h b/UpdatePTUDevCtrl/process/check_update_activation_command.h new file mode 100644 index 0000000..40ae287 --- /dev/null +++ b/UpdatePTUDevCtrl/process/check_update_activation_command.h @@ -0,0 +1,14 @@ +#ifndef CHECK_UPDATE_ACTIVATION_COMMAND_H_INCLUDED +#define CHECK_UPDATE_ACTIVATION_COMMAND_H_INCLUDED + +#include "update_command.h" + +class CheckUpdateActivationCommand : public UpdateCommand { +public: + explicit CheckUpdateActivationCommand(QString const &command, + Worker *worker, + int start_timeout = 100000, + int finish_timeout = 100000); +}; + +#endif // CHECK_UPDATE_ACTIVATION_COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/command.cpp b/UpdatePTUDevCtrl/process/command.cpp index 608b11b..0ae462c 100644 --- a/UpdatePTUDevCtrl/process/command.cpp +++ b/UpdatePTUDevCtrl/process/command.cpp @@ -92,6 +92,7 @@ void Command::readyReadStandardError() { } } +// TODO: nach UpdateCommands ziehen void Command::finished(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/) { QProcess *p = (QProcess *)sender(); // read all remaining data sent to the process, just in case @@ -109,6 +110,7 @@ void Command::finished(int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/) { } } +// TODO: nach UpdateCommand ziehen bool Command::start(QString workingDirectory, QStringList args) { if (!QDir::setCurrent(workingDirectory)) { qCritical() << "SET WORKING_DIRECTORY" << workingDirectory diff --git a/UpdatePTUDevCtrl/process/command.h b/UpdatePTUDevCtrl/process/command.h index 71efb22..bf9ccb6 100644 --- a/UpdatePTUDevCtrl/process/command.h +++ b/UpdatePTUDevCtrl/process/command.h @@ -1,6 +1,5 @@ #ifndef COMMAND_H_INCLUDED #define COMMAND_H_INCLUDED -#endif // COMMAND_H_INCLUDED #include #include @@ -13,14 +12,24 @@ class Worker; class Command : public QObject { Q_OBJECT +protected: QString m_command; mutable QString m_commandResult; + +private: int m_waitForStartTimeout; int m_waitForFinishTimeout; int m_exitCode; + +protected: mutable QMutex m_mtx; + +private: QProcess *m_p; + +protected: Worker *m_worker; + public: explicit Command(QString const &command, int start_timeout = 100000, @@ -35,8 +44,10 @@ public: void setWorker(Worker *worker) {m_worker = worker; } -private slots: +protected slots: void readyReadStandardOutput(); void readyReadStandardError(); - void finished(int exitCode, QProcess::ExitStatus exitStatus); + virtual void finished(int exitCode, QProcess::ExitStatus exitStatus); }; + +#endif // COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/exec_opkg_command.cpp b/UpdatePTUDevCtrl/process/exec_opkg_command.cpp new file mode 100644 index 0000000..d9fbd3f --- /dev/null +++ b/UpdatePTUDevCtrl/process/exec_opkg_command.cpp @@ -0,0 +1,10 @@ +#include "process/exec_opkg_command.h" + + +ExecOpkgCommand::ExecOpkgCommand(QString const &command, + Worker *worker, + int start_timeout, + int finish_timeout) + : UpdateCommand(command, worker, start_timeout, finish_timeout) + , m_noaction(m_noaction) { +} diff --git a/UpdatePTUDevCtrl/process/exec_opkg_command.h b/UpdatePTUDevCtrl/process/exec_opkg_command.h new file mode 100644 index 0000000..6effab5 --- /dev/null +++ b/UpdatePTUDevCtrl/process/exec_opkg_command.h @@ -0,0 +1,17 @@ +#ifndef EXEC_OPKG_COMMAND_H_INCLUDED +#define EXEC_OPKG_COMMAND_H_INCLUDED + + +#include "update_command.h" + +class ExecOpkgCommand : public UpdateCommand { + bool m_noaction{false}; +public: + explicit ExecOpkgCommand(QString const &command, + Worker *worker, + bool noaction, + int start_timeout = 100000, + int finish_timeout = 100000); +}; + +#endif // EXEC_OPKG_COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/show_software_status_command.cpp b/UpdatePTUDevCtrl/process/show_software_status_command.cpp new file mode 100644 index 0000000..2032d6d --- /dev/null +++ b/UpdatePTUDevCtrl/process/show_software_status_command.cpp @@ -0,0 +1,9 @@ +#include "process/show_software_status_command.h" + + +ShowSoftwareStatusCommand::ShowSoftwareStatusCommand(QString const &command, + Worker *worker, + int start_timeout, + int finish_timeout) + : UpdateCommand(command, worker, start_timeout, finish_timeout) { +} diff --git a/UpdatePTUDevCtrl/process/show_software_status_command.h b/UpdatePTUDevCtrl/process/show_software_status_command.h new file mode 100644 index 0000000..1049be3 --- /dev/null +++ b/UpdatePTUDevCtrl/process/show_software_status_command.h @@ -0,0 +1,13 @@ +#ifndef SHOW_SOFTWARE_STATUS_COMMAND_H_INCLUDED +#define SHOW_SOFTWARE_STATUS_COMMAND_H_INCLUDED + +#include "update_command.h" + +class ShowSoftwareStatusCommand : public UpdateCommand { +public: + explicit ShowSoftwareStatusCommand(QString const &command, + Worker *worker, + int start_timeout = 100000, + int finish_timeout = 100000); +}; +#endif // SHOW_SOFTWARE_STATUS_COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/update_command.cpp b/UpdatePTUDevCtrl/process/update_command.cpp new file mode 100644 index 0000000..fcd529c --- /dev/null +++ b/UpdatePTUDevCtrl/process/update_command.cpp @@ -0,0 +1,45 @@ +#include "update_command.h" +#include "worker.h" + +#include +#include + +UpdateCommand::UpdateCommand(QString const &command, + Worker *worker, + int start_timeout, + int finish_timeout) + : Command(command, start_timeout, finish_timeout) { + setWorker(worker); +} + +bool UpdateCommand::stopUpdateOnFailure() { + return true; +} + +void UpdateCommand::finished(int exitCode, QProcess::ExitStatus exitStatus) { + + qCritical() << __func__ << ":" << __LINE__ << m_command + << "exitCode" << exitCode + << "exitStatus" << exitStatus; + + QProcess *p = (QProcess *)sender(); + if (p) { + // read all remaining data sent to the process, just in case + m_commandResult += p->readAllStandardOutput(); + + disconnect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(readyReadStandardOutput())); + disconnect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(readyReadStandardError())); + disconnect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(finished(int,QProcess::ExitStatus))); + } + + if (!m_worker->workList().empty()) { + if (exitCode == 0 && exitStatus == QProcess::ExitStatus::NormalExit) { + if (m_worker->workList().nextExec()) { + m_worker->workList().exec(); + } + } else { + bool execShowStatus = true; + m_worker->workList().exec(execShowStatus); + } + } +} diff --git a/UpdatePTUDevCtrl/process/update_command.h b/UpdatePTUDevCtrl/process/update_command.h new file mode 100644 index 0000000..a843b2d --- /dev/null +++ b/UpdatePTUDevCtrl/process/update_command.h @@ -0,0 +1,20 @@ +#ifndef UPDATE_COMMAND_H_INCLUDED +#define UPDATE_COMMAND_H_INCLUDED + +#include "process/command.h" + +class Worker; +class UpdateCommand : public Command { +public: + explicit UpdateCommand(QString const &command, + Worker *worker, + int start_timeout = 100000, + int finish_timeout = 100000); + + virtual bool stopUpdateOnFailure(); + +private slots: + virtual void finished(int exitCode, QProcess::ExitStatus exitStatus) override; +}; + +#endif // UPDATE_COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/update_dc_command.cpp b/UpdatePTUDevCtrl/process/update_dc_command.cpp new file mode 100644 index 0000000..6e46012 --- /dev/null +++ b/UpdatePTUDevCtrl/process/update_dc_command.cpp @@ -0,0 +1,8 @@ +#include "process/update_dc_command.h" + +UpdateDCCommand::UpdateDCCommand(QString const &command, + Worker *worker, + int start_timeout, + int finish_timeout) + : UpdateCommand(command, worker, start_timeout, finish_timeout) { +} diff --git a/UpdatePTUDevCtrl/process/update_dc_command.h b/UpdatePTUDevCtrl/process/update_dc_command.h new file mode 100644 index 0000000..d9c3c41 --- /dev/null +++ b/UpdatePTUDevCtrl/process/update_dc_command.h @@ -0,0 +1,14 @@ +#ifndef UPDATE_DC_COMMAND_H_INCLUDED +#define UPDATE_DC_COMMAND_H_INCLUDED + +#include "update_command.h" + +class UpdateDCCommand : public UpdateCommand { +public: + explicit UpdateDCCommand(QString const &command, + Worker *worker, + int start_timeout = 100000, + int finish_timeout = 100000); +}; + +#endif // UPDATE_DC_COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/update_filesystem_command.cpp b/UpdatePTUDevCtrl/process/update_filesystem_command.cpp new file mode 100644 index 0000000..e509c78 --- /dev/null +++ b/UpdatePTUDevCtrl/process/update_filesystem_command.cpp @@ -0,0 +1,8 @@ +#include "process/update_filesystem_command.h" + +UpdateFileSystemCommand::UpdateFileSystemCommand(QString const &command, + Worker *worker, + int start_timeout, + int finish_timeout) + : UpdateCommand(command, worker, start_timeout, finish_timeout) { +} diff --git a/UpdatePTUDevCtrl/process/update_filesystem_command.h b/UpdatePTUDevCtrl/process/update_filesystem_command.h new file mode 100644 index 0000000..3022c79 --- /dev/null +++ b/UpdatePTUDevCtrl/process/update_filesystem_command.h @@ -0,0 +1,14 @@ +#ifndef UPDATE_FS_COMMAND_H_INCLUDED +#define UPDATE_FS_COMMAND_H_INCLUDED + +#include "update_command.h" + +class UpdateFileSystemCommand : public UpdateCommand { +public: + explicit UpdateFileSystemCommand(QString const &command, + Worker *worker, + int start_timeout = 100000, + int finish_timeout = 100000); +}; + +#endif // UPDATE_FS_COMMAND_H_INCLUDED diff --git a/UpdatePTUDevCtrl/process/update_json_command.cpp b/UpdatePTUDevCtrl/process/update_json_command.cpp new file mode 100644 index 0000000..81b8fac --- /dev/null +++ b/UpdatePTUDevCtrl/process/update_json_command.cpp @@ -0,0 +1,8 @@ +#include "process/update_json_command.h" + +UpdateJsonCommand::UpdateJsonCommand(QString const &command, + Worker *worker, + int start_timeout, + int finish_timeout) + : UpdateCommand(command, worker, start_timeout, finish_timeout) { +} diff --git a/UpdatePTUDevCtrl/process/update_json_command.h b/UpdatePTUDevCtrl/process/update_json_command.h new file mode 100644 index 0000000..06e3989 --- /dev/null +++ b/UpdatePTUDevCtrl/process/update_json_command.h @@ -0,0 +1,14 @@ +#ifndef UPDATE_JSON_COMMAND_H_INCLUDED +#define UPDATE_JSON_COMMAND_H_INCLUDED + +#include "process/update_command.h" + +class UpdateJsonCommand : public UpdateCommand { +public: + explicit UpdateJsonCommand(QString const &command, + Worker *worker, + int start_timeout = 100000, + int finish_timeout = 100000); +}; + +#endif // UPDATE_JSON_HANDLER_H_INCLUDED