#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") );