diff options
| author | Stefan Boberg <[email protected]> | 2021-08-17 22:14:28 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-08-17 22:14:28 +0200 |
| commit | 5bbca1c180bd40544ba0fee3d699202e81aa9da1 (patch) | |
| tree | e5bc14180fe1e2e1c637032b371bc8cc30fc5afc /zen/cmds/cache.cpp | |
| parent | Implemented support for dropping z$ buckets while online (diff) | |
| download | archived-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.cpp | 66 |
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; +} |