// Copyright Epic Games, Inc. All Rights Reserved. #include "compute_cmd.h" #if ZEN_WITH_COMPUTE_SERVICES # include # include # include 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(""), ""); } void ComputeRecordStartSubCmd::Run(const ZenCliOptions& GlobalOptions) { ZEN_UNUSED(GlobalOptions); m_HostName = ZenCmdBase::ResolveTargetHostSpec(m_HostName); if (m_HostName.empty()) { throw OptionParseException("Unable to resolve server specification", SubOptions().help()); } HttpClient Http = ZenCmdBase::CreateHttpClient(m_HostName); 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(""), ""); } void ComputeRecordStopSubCmd::Run(const ZenCliOptions& GlobalOptions) { ZEN_UNUSED(GlobalOptions); m_HostName = ZenCmdBase::ResolveTargetHostSpec(m_HostName); if (m_HostName.empty()) { throw OptionParseException("Unable to resolve server specification", SubOptions().help()); } HttpClient Http = ZenCmdBase::CreateHttpClient(m_HostName); 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(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