From 80bcd67733b8e8bbb057f978f1497c4fa070d23f Mon Sep 17 00:00:00 2001 From: Kris Moore Date: Wed, 17 Feb 2016 13:08:12 -0500 Subject: [PATCH] Add two new API calls, to shutdown/halt the system, and to reboot the system. Shutdown API call REST Request: ------------------------------- PUT /sysadm/systemmanager { "action" : "halt" } WebSocket Request: ------------------------------- { "id" : "fooid", "args" : { "action" : "halt" }, "name" : "systemmanager", "namespace" : "sysadm" } Response: ------------------------------- { "args": { "halt": { "response": "true" } }, "id": "fooid", "name": "response", "namespace": "sysadm" } Reboot API call REST Request: ------------------------------- PUT /sysadm/systemmanager { "action" : "reboot" } WebSocket Request: ------------------------------- { "id" : "fooid", "args" : { "action" : "reboot" }, "name" : "systemmanager", "namespace" : "sysadm" } Response: ------------------------------- { "args": { "reboot": { "response": "true" } }, "id": "fooid", "name": "response", "namespace": "sysadm" } --- src/server/WebBackend.cpp | 8 ++++++++ src/server/library/sysadm-systemmanager.cpp | 20 ++++++++++++++++++++ src/server/library/sysadm-systemmanager.h | 2 ++ 3 files changed, 30 insertions(+) diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 2b4f5f3..6e31017 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -405,6 +405,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmSystemMgmtRequest(const QJso ok = true; out->insert("externalmounts", sysadm::SysMgmt::externalDevicePaths()); } + if(act=="halt"){ + ok = true; + out->insert("halt", sysadm::SysMgmt::systemHalt()); + } if(act=="killproc"){ ok = true; out->insert("killproc", sysadm::SysMgmt::killProc(in_args.toObject())); @@ -417,6 +421,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmSystemMgmtRequest(const QJso ok = true; out->insert("procinfo", sysadm::SysMgmt::procInfo()); } + if(act=="reboot"){ + ok = true; + out->insert("reboot", sysadm::SysMgmt::systemReboot()); + } if(act=="setsysctl"){ ok = true; out->insert("setsysctl", sysadm::SysMgmt::setSysctl(in_args.toObject())); diff --git a/src/server/library/sysadm-systemmanager.cpp b/src/server/library/sysadm-systemmanager.cpp index 444e727..9e155e2 100644 --- a/src/server/library/sysadm-systemmanager.cpp +++ b/src/server/library/sysadm-systemmanager.cpp @@ -371,3 +371,23 @@ QJsonObject SysMgmt::systemInfo() { return retObject; } +// Halt the box +QJsonObject SysMgmt::systemHalt() { + QJsonObject retObject; + + QString output = General::RunCommand("shutdown -p now"); + retObject.insert("response", "true"); + + return retObject; +} + + +// Reboot the box +QJsonObject SysMgmt::systemReboot() { + QJsonObject retObject; + + QString output = General::RunCommand("shutdown -r now"); + retObject.insert("response", "true"); + + return retObject; +} diff --git a/src/server/library/sysadm-systemmanager.h b/src/server/library/sysadm-systemmanager.h index d73b845..04d611e 100644 --- a/src/server/library/sysadm-systemmanager.h +++ b/src/server/library/sysadm-systemmanager.h @@ -24,6 +24,8 @@ public: static QJsonObject setSysctl(QJsonObject); static QJsonObject sysctlList(); static QJsonObject systemInfo(); + static QJsonObject systemReboot(); + static QJsonObject systemHalt(); }; } //end of pcbsd namespace