aboutsummaryrefslogtreecommitdiff
path: root/zen/cmds/cache.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-08-17 22:14:28 +0200
committerStefan Boberg <[email protected]>2021-08-17 22:14:28 +0200
commit5bbca1c180bd40544ba0fee3d699202e81aa9da1 (patch)
treee5bc14180fe1e2e1c637032b371bc8cc30fc5afc /zen/cmds/cache.cpp
parentImplemented support for dropping z$ buckets while online (diff)
downloadarchived-zen-5bbca1c180bd40544ba0fee3d699202e81aa9da1.tar.xz
archived-zen-5bbca1c180bd40544ba0fee3d699202e81aa9da1.zip
added 'zen drop' command to drop cache buckets online
also cleaned up the server side implementation a bit
Diffstat (limited to 'zen/cmds/cache.cpp')
-rw-r--r--zen/cmds/cache.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/zen/cmds/cache.cpp b/zen/cmds/cache.cpp
new file mode 100644
index 000000000..9a2591ded
--- /dev/null
+++ b/zen/cmds/cache.cpp
@@ -0,0 +1,66 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include "cache.h"
+
+#include <zencore/filesystem.h>
+#include <zenserverprocess.h>
+
+#include <spdlog/spdlog.h>
+#include <memory>
+
+// cpr ////////////////////////////////////////////////////////////////////
+//
+// For some reason, these don't seem to stick, so we disable the warnings
+//# define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING 1
+//# define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS 1
+#pragma warning(push)
+#pragma warning(disable : 4004)
+#pragma warning(disable : 4996)
+#include <cpr/cpr.h>
+#pragma warning(pop)
+
+using namespace fmt::literals;
+
+DropCommand::DropCommand()
+{
+ m_Options.add_options()("h,help", "Print help");
+ m_Options.add_option("", "b", "bucket", "Bucket name", cxxopts::value(m_BucketName), "<bucketname>");
+ m_Options.add_option("", "", "positional", "Positional arguments", cxxopts::value(m_Positional), "");
+}
+
+DropCommand::~DropCommand() = default;
+
+int
+DropCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
+{
+ ZEN_UNUSED(GlobalOptions, argc, argv);
+
+ m_Options.parse_positional({"bucket", "positional"});
+ m_Options.parse(argc, argv);
+
+ spdlog::info("Dropping cache bucket '{}' from '{}'", m_BucketName, m_HostName);
+
+ cpr::Session Session;
+ Session.SetUrl({"{}/z$/{}"_format(m_HostName, m_BucketName)});
+ cpr::Response Result = Session.Delete();
+
+ if (Result.status_code >= 200 && Result.status_code < 300)
+ {
+ spdlog::info("OK: dropped cache bucket '{}' from '{}'", m_BucketName, m_HostName);
+
+ return 0;
+ }
+
+ if (Result.status_code)
+ {
+ spdlog::error("Drop failed: {}: {} ({})", Result.status_code, Result.reason, Result.text);
+ }
+ else
+ {
+ spdlog::error("Drop failed: {}", Result.error.message);
+ }
+
+ return 1;
+}