aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/compute_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zen/cmds/compute_cmd.cpp')
-rw-r--r--src/zen/cmds/compute_cmd.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/zen/cmds/compute_cmd.cpp b/src/zen/cmds/compute_cmd.cpp
new file mode 100644
index 000000000..9a350c69c
--- /dev/null
+++ b/src/zen/cmds/compute_cmd.cpp
@@ -0,0 +1,88 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#include "compute_cmd.h"
+
+#if ZEN_WITH_COMPUTE_SERVICES
+
+# include "zenserviceclient.h"
+
+# include <zencore/compactbinary.h>
+# include <zencore/logging.h>
+# include <zenhttp/httpclient.h>
+
+using namespace std::literals;
+
+namespace zen {
+
+//////////////////////////////////////////////////////////////////////////
+// ComputeRecordStartSubCmd
+
+ComputeRecordStartSubCmd::ComputeRecordStartSubCmd() : ZenSubCmdBase("record-start", "Start recording compute actions")
+{
+ SubOptions().add_option("", "u", "hosturl", ZenCmdBase::kHostUrlHelp, cxxopts::value(m_HostName)->default_value(""), "<hosturl>");
+}
+
+void
+ComputeRecordStartSubCmd::Run(const ZenCliOptions& GlobalOptions)
+{
+ ZEN_UNUSED(GlobalOptions);
+
+ ZenServiceClient Service({.HostSpec = m_HostName, .CommandName = "record-start"});
+ HttpClient& Http = Service.Http();
+ if (HttpClient::Response Response = Http.Post("/compute/record/start"sv, HttpClient::KeyValueMap{}, HttpClient::KeyValueMap{}))
+ {
+ CbObject Obj = Response.AsObject();
+ std::string_view Path = Obj["path"sv].AsString();
+ ZEN_CONSOLE("recording started: " ZEN_BRIGHT_GREEN("{}"), Path);
+ }
+ else
+ {
+ Response.ThrowError("Failed to start recording");
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+// ComputeRecordStopSubCmd
+
+ComputeRecordStopSubCmd::ComputeRecordStopSubCmd() : ZenSubCmdBase("record-stop", "Stop recording compute actions")
+{
+ SubOptions().add_option("", "u", "hosturl", ZenCmdBase::kHostUrlHelp, cxxopts::value(m_HostName)->default_value(""), "<hosturl>");
+}
+
+void
+ComputeRecordStopSubCmd::Run(const ZenCliOptions& GlobalOptions)
+{
+ ZEN_UNUSED(GlobalOptions);
+
+ ZenServiceClient Service({.HostSpec = m_HostName, .CommandName = "record-stop"});
+ HttpClient& Http = Service.Http();
+ if (HttpClient::Response Response = Http.Post("/compute/record/stop"sv, HttpClient::KeyValueMap{}, HttpClient::KeyValueMap{}))
+ {
+ CbObject Obj = Response.AsObject();
+ std::string_view Path = Obj["path"sv].AsString();
+ ZEN_CONSOLE("recording stopped: " ZEN_BRIGHT_GREEN("{}"), Path);
+ }
+ else
+ {
+ Response.ThrowError("Failed to stop recording");
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+// ComputeCommand
+
+ComputeCommand::ComputeCommand()
+{
+ m_Options.add_options()("h,help", "Print help");
+ m_Options.add_option("__hidden__", "", "subcommand", "", cxxopts::value<std::string>(m_SubCommand)->default_value(""), "");
+ m_Options.parse_positional({"subcommand"});
+
+ AddSubCommand(m_RecordStartSubCmd);
+ AddSubCommand(m_RecordStopSubCmd);
+}
+
+ComputeCommand::~ComputeCommand() = default;
+
+} // namespace zen
+
+#endif // ZEN_WITH_COMPUTE_SERVICES