#include #include #include #include #include #include #include #include "private/cli/commandmap.hpp" #include "private/configurationpaths.hpp" #include "private/configurationreader.hpp" using namespace shareddatalayer; using namespace shareddatalayer::cli; namespace { bool parseConfiguration(const std::string& file) { boost::property_tree::ptree propertyTree; try { boost::property_tree::read_json(file, propertyTree); } catch (const boost::property_tree::json_parser::json_parser_error& e) { std::ostringstream os; os << "error in SDL configuration " << file << " at line " << e.line() << ": "; os << e.message(); std::cerr << os.str().c_str() << std::endl; return false; } return true; } int dumpConfigurationCommand(std::ostream& out) { std::string line; bool status(true); for (const auto& i : findConfigurationFiles( getDefaultConfDirectories() )) { std::ifstream file(i); out << "File: " << i << std::endl; unsigned int lineNum = 1; if(file.is_open()) { bool parseStatus = parseConfiguration(i); if(status && !parseStatus) status = false; while(getline(file, line)) out << lineNum++ << ": " << line << std::endl; file.close(); } } const auto var(DB_HOST_ENV_VAR_NAME); const auto conf(getenv(var)); if (conf == nullptr) out << var << " not set." << std::endl; else out << var << ": " << conf << std::endl; if(!status) { return EXIT_FAILURE; } return EXIT_SUCCESS; } } AUTO_REGISTER_COMMAND(std::bind(dumpConfigurationCommand, std::placeholders::_1), "dump-configuration", "Dump configuration", "Find, parse and dump all shareddatalayer configuration files contents.", CommandMap::Category::UTIL, 30000);