// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab /* * Ceph - scalable distributed file system * * Copyright (C) 2017 Red Hat * * This is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software * Foundation. See file COPYING. * */ #ifndef CEPH_ADMIN_SOCKET_OUTPUT_H #define CEPH_ADMIN_SOCKET_OUTPUT_H #include #include #include #include #include // For path #include // For exists, is_directory namespace bfs = boost::filesystem; using socket_results = std::map; using test_functions = std::vector>; class AdminSocketClient; class AdminSocketOutput { public: AdminSocketOutput() {} void add_target(const std::string &target); void add_command(const std::string &target, const std::string &command); void add_test(const std::string &target, const std::string &command, bool (*test)(std::string &)); void postpone(const std::string &target, const std::string &command); void exec(); void mod_for_vstart() { socketdir = "./out"; prefix = ""; } private: bool init_directories() const { std::cout << "Checking " << socketdir << std::endl; return exists(socketdir) && is_directory(socketdir); } bool init_sockets(); bool gather_socket_output(); std::string get_result(const std::string target, const std::string command) const; std::pair run_command(AdminSocketClient &client, const std::string raw_command, bool send_untouched = false); bool run_tests() const; std::set targets; std::map sockets; std::map results; std::map> custom_commands; std::map> postponed_commands; std::map tests; std::string prefix = "ceph-"; bfs::path socketdir = "/var/run/ceph"; }; #endif // CEPH_ADMIN_SOCKET_OUTPUT_H