X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Fcli%2Flistkeyscommand.cpp;fp=src%2Fcli%2Flistkeyscommand.cpp;h=04f39c75261c76c6eea0390da4d9e8aebcd822b3;hb=fefde502cd4b1d2517f9de30a009d2dea59a7cf1;hp=0000000000000000000000000000000000000000;hpb=63869e10ac4d8572238989e1b582c0314da91f9c;p=ric-plt%2Fsdl.git diff --git a/src/cli/listkeyscommand.cpp b/src/cli/listkeyscommand.cpp new file mode 100644 index 0000000..04f39c7 --- /dev/null +++ b/src/cli/listkeyscommand.cpp @@ -0,0 +1,77 @@ +#include +#include +#include "private/cli/commandmap.hpp" +#include "private/cli/common.hpp" +#include +#include + +using namespace shareddatalayer; +using namespace shareddatalayer::cli; + +namespace +{ + std::shared_ptr createSyncStorage(const SyncStorage::Namespace& ns, + std::ostream& out) + { + try + { + auto sdl(shareddatalayer::SyncStorage::create()); + sdl->waitReady(ns, std::chrono::minutes(1)); + return sdl; + } + catch (const shareddatalayer::Exception& error) + { + out << "SyncStorage create failed: " << error.what() << std::endl; + } + + return nullptr; + } + + void listkeys(shareddatalayer::SyncStorage& sdl, + const SyncStorage::Namespace& ns, + const std::string& pattern, + std::ostream& out) + { + try + { + auto keys(sdl.listKeys(ns, pattern)); + for (auto key: keys) + out << key << std::endl; + } + catch (const shareddatalayer::Exception& error) + { + out << "listKeys(" << ns << ", " << pattern << ") failed: " + << error.what() << std::endl; + } + } + + int listKeysCommand(std::ostream& out, const boost::program_options::variables_map& map) + { + auto ns(map["ns"].as()); + auto pattern(map["pattern"].as()); + + auto sdl(createSyncStorage(ns, out)); + if (nullptr == sdl) + return EXIT_FAILURE; + sdl->setOperationTimeout(std::chrono::seconds(5)); + + listkeys(std::ref(*sdl), ns, pattern, out); + + return EXIT_SUCCESS; + } +} + +const char *longHelpListkeysCmd = + "Use listKeys SDL API to list keys matching search pattern under the namespace.\n\n" + "Example: sdltool listkeys --ns 'sdltool' --pattern 'foo*'"; + +AUTO_REGISTER_COMMAND(std::bind(listKeysCommand, std::placeholders::_1, std::placeholders::_3), + "listkeys", + "listKeys SDL API", + longHelpListkeysCmd, + CommandMap::Category::UTIL, + 30030, + ("ns,n", boost::program_options::value()->default_value("sdltoolns"), "namespace to use") + ("pattern,p", boost::program_options::value()->default_value("*"), "key search pattern") + ); +