aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/scrub.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2023-05-02 10:01:47 +0200
committerGitHub <[email protected]>2023-05-02 10:01:47 +0200
commit075d17f8ada47e990fe94606c3d21df409223465 (patch)
treee50549b766a2f3c354798a54ff73404217b4c9af /src/zen/cmds/scrub.cpp
parentfix: bundle shouldn't append content zip to zen (diff)
downloadarchived-zen-075d17f8ada47e990fe94606c3d21df409223465.tar.xz
archived-zen-075d17f8ada47e990fe94606c3d21df409223465.zip
moved source directories into `/src` (#264)
* moved source directories into `/src` * updated bundle.lua for new `src` path * moved some docs, icon * removed old test trees
Diffstat (limited to 'src/zen/cmds/scrub.cpp')
-rw-r--r--src/zen/cmds/scrub.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/src/zen/cmds/scrub.cpp b/src/zen/cmds/scrub.cpp
new file mode 100644
index 000000000..27ff5e0ac
--- /dev/null
+++ b/src/zen/cmds/scrub.cpp
@@ -0,0 +1,154 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#include "scrub.h"
+#include <zencore/logging.h>
+#include <zenhttp/httpcommon.h>
+
+ZEN_THIRD_PARTY_INCLUDES_START
+#include <cpr/cpr.h>
+ZEN_THIRD_PARTY_INCLUDES_END
+
+using namespace std::literals;
+
+namespace zen {
+
+ScrubCommand::ScrubCommand()
+{
+ m_Options.add_options()("h,help", "Print help");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value("http://localhost:1337"), "<hosturl>");
+}
+
+ScrubCommand::~ScrubCommand() = default;
+
+int
+ScrubCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
+{
+ ZEN_UNUSED(GlobalOptions, argc, argv);
+
+ return 0;
+}
+
+//////////////////////////////////////////////////////////////////////////
+
+GcCommand::GcCommand()
+{
+ m_Options.add_options()("h,help", "Print help");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value("http://localhost:1337"), "<hosturl>");
+ m_Options.add_option("",
+ "s",
+ "smallobjects",
+ "Collect small objects",
+ cxxopts::value(m_SmallObjects)->default_value("false"),
+ "<smallobjects>");
+ m_Options.add_option("",
+ "m",
+ "maxcacheduration",
+ "Max cache lifetime (in seconds)",
+ cxxopts::value(m_MaxCacheDuration)->default_value("0"),
+ "<maxcacheduration>");
+ m_Options.add_option("",
+ "d",
+ "disksizesoftlimit",
+ "Max disk usage size (in bytes)",
+ cxxopts::value(m_DiskSizeSoftLimit)->default_value("0"),
+ "<disksizesoftlimit>");
+}
+
+GcCommand::~GcCommand()
+{
+}
+
+int
+GcCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
+{
+ ZEN_UNUSED(GlobalOptions, argc, argv);
+
+ if (!ParseOptions(argc, argv))
+ {
+ return 0;
+ }
+
+ cpr::Parameters Params;
+ if (m_SmallObjects)
+ {
+ Params.Add({"smallobjects", "true"});
+ }
+ if (m_MaxCacheDuration != 0)
+ {
+ Params.Add({"maxcacheduration", fmt::format("{}", m_MaxCacheDuration)});
+ }
+ if (m_DiskSizeSoftLimit != 0)
+ {
+ Params.Add({"disksizesoftlimit", fmt::format("{}", m_DiskSizeSoftLimit)});
+ }
+
+ cpr::Session Session;
+ Session.SetHeader(cpr::Header{{"Accept", "application/json"}});
+ Session.SetUrl({fmt::format("{}/admin/gc", m_HostName)});
+ Session.SetParameters(Params);
+
+ cpr::Response Result = Session.Post();
+
+ if (zen::IsHttpSuccessCode(Result.status_code))
+ {
+ ZEN_CONSOLE("OK: {}", Result.text);
+ return 0;
+ }
+
+ if (Result.status_code)
+ {
+ ZEN_ERROR("GC start failed: {}: {} ({})", Result.status_code, Result.reason, Result.text);
+ }
+ else
+ {
+ ZEN_ERROR("GC start failed: {}", Result.error.message);
+ }
+
+ return 1;
+}
+
+GcStatusCommand::GcStatusCommand()
+{
+ m_Options.add_options()("h,help", "Print help");
+ m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value("http://localhost:1337"), "<hosturl>");
+}
+
+GcStatusCommand::~GcStatusCommand()
+{
+}
+
+int
+GcStatusCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
+{
+ ZEN_UNUSED(GlobalOptions, argc, argv);
+
+ if (!ParseOptions(argc, argv))
+ {
+ return 0;
+ }
+
+ cpr::Session Session;
+ Session.SetHeader(cpr::Header{{"Accept", "application/json"}});
+ Session.SetUrl({fmt::format("{}/admin/gc", m_HostName)});
+
+ cpr::Response Result = Session.Get();
+
+ if (zen::IsHttpSuccessCode(Result.status_code))
+ {
+ ZEN_CONSOLE("OK: {}", Result.text);
+ return 0;
+ }
+
+ if (Result.status_code)
+ {
+ ZEN_ERROR("GC status failed: {}: {} ({})", Result.status_code, Result.reason, Result.text);
+ }
+ else
+ {
+ ZEN_ERROR("GC status failed: {}", Result.error.message);
+ }
+
+ return 1;
+}
+
+} // namespace zen