aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordevhyper <57877914+devhyper@users.noreply.github.com>2023-01-31 18:23:20 -0800
committerdevhyper <57877914+devhyper@users.noreply.github.com>2023-01-31 18:23:20 -0800
commit757bc7d7b953ca997aaa2897d79ddd4c37caa45a (patch)
tree5adde2cb9eb4f7d28fa567f08f619fb730f2a69a /src
parentb7ba9437d8cca6df4ecff7f5ae38a53cac5e26b2 (diff)
downloadmonzero-gui-757bc7d7b953ca997aaa2897d79ddd4c37caa45a.tar.gz
monzero-gui-757bc7d7b953ca997aaa2897d79ddd4c37caa45a.tar.xz
monzero-gui-757bc7d7b953ca997aaa2897d79ddd4c37caa45a.zip
p2pool: Restart monerod only when needed and with proper args
Diffstat (limited to 'src')
-rw-r--r--src/daemon/DaemonManager.cpp79
-rw-r--r--src/daemon/DaemonManager.h3
2 files changed, 82 insertions, 0 deletions
diff --git a/src/daemon/DaemonManager.cpp b/src/daemon/DaemonManager.cpp
index 6a5a8233..f52ab42a 100644
--- a/src/daemon/DaemonManager.cpp
+++ b/src/daemon/DaemonManager.cpp
@@ -342,6 +342,85 @@ bool DaemonManager::checkLmdbExists(QString datadir) {
return validateDataDir(datadir).value("lmdbExists").value<bool>();
}
+bool DaemonManager::checkUnderSystemd() {
+ #ifdef Q_OS_LINUX
+ QProcess p;
+ QStringList args;
+ args << "monerod";
+ p.setProgram("pgrep");
+ p.setArguments(args);
+ p.start();
+ p.waitForFinished();
+ QString pid = p.readAllStandardOutput().trimmed();
+ if (pid.isEmpty()) {
+ return false;
+ }
+ args.clear();
+
+ args << "-c";
+ args << "ps -eo pid,cgroup | grep " + pid + " | grep -q .service$";
+ p.setProgram("sh");
+ p.setArguments(args);
+ p.start();
+ p.waitForFinished();
+ if (p.exitCode() == 0) {
+ return true;
+ }
+ #endif
+ return false;
+}
+
+QString DaemonManager::getArgs(const QString &dataDir) {
+ if (!running(NetworkType::MAINNET, dataDir)) {
+ return args;
+ }
+ QProcess p;
+ QStringList tempArgs;
+ #ifdef Q_OS_WIN
+ //powershell
+ tempArgs << "Get-CimInstance Win32_Process -Filter \"name = 'monerod.exe'\" | select -ExpandProperty CommandLine ";
+ p.setProgram("powershell");
+ p.setArguments(tempArgs);
+ p.start();
+ p.waitForFinished();
+ args = p.readAllStandardOutput().simplified().trimmed();
+
+ #elif defined(Q_OS_UNIX)
+ //pgrep
+ tempArgs << "monerod";
+ p.setProgram("pgrep");
+ p.setArguments(tempArgs);
+ p.start();
+ p.waitForFinished();
+ QString pid = p.readAllStandardOutput().trimmed();
+ if (pid.isEmpty()) {
+ return args;
+ }
+
+ tempArgs.clear();
+
+ //ps
+ tempArgs << "-o";
+ tempArgs << "args=";
+ tempArgs << "-fp";
+ tempArgs << pid;
+ p.setProgram("ps");
+ p.setArguments(tempArgs);
+ p.start();
+ p.waitForFinished();
+ args = p.readAllStandardOutput().trimmed();
+
+ #endif
+ if (args.contains("--")) {
+ int index = args.indexOf("--");
+ args.remove(0, index);
+ }
+ else {
+ args = "";
+ }
+ return args;
+}
+
DaemonManager::DaemonManager(QObject *parent)
: QObject(parent)
, m_scheduler(this)
diff --git a/src/daemon/DaemonManager.h b/src/daemon/DaemonManager.h
index 5a48a489..6a3d0fe1 100644
--- a/src/daemon/DaemonManager.h
+++ b/src/daemon/DaemonManager.h
@@ -58,6 +58,8 @@ public:
Q_INVOKABLE void exit();
Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const;
Q_INVOKABLE bool checkLmdbExists(QString datadir);
+ Q_INVOKABLE QString getArgs(const QString &dataDir);
+ Q_INVOKABLE bool checkUnderSystemd();
private:
@@ -82,6 +84,7 @@ private:
QString m_monerod;
bool m_app_exit = false;
bool m_noSync = false;
+ QString args = "";
mutable FutureScheduler m_scheduler;
};