diff --git a/spectrum_manager/src/main.cpp b/spectrum_manager/src/main.cpp index 58581be223f2d267103ff9547c910a46c37c00d3..3a267b0f380a7259133637984db5dfcadb528f28 100644 --- a/spectrum_manager/src/main.cpp +++ b/spectrum_manager/src/main.cpp @@ -1,200 +1,200 @@ -#include "managerconfig.h" -#include "methods.h" -#include "server.h" -#include "transport/config.h" -#include "transport/protocol.pb.h" -#include "Swiften/Swiften.h" -#include "Swiften/EventLoop/SimpleEventLoop.h" - -#include -#include -#include -#include -#include -#include -#include -#include "signal.h" -#include "sys/wait.h" - - -using namespace Transport; - -using namespace boost::filesystem; - -using namespace boost; - - -// static void ask_local_servers(ManagerConfig *config, Swift::BoostNetworkFactories &networkFactories, const std::string &message) { -// path p(CONFIG_STRING(config, "service.config_directory")); -// -// try { -// if (!exists(p)) { -// std::cerr << "Config directory " << CONFIG_STRING(config, "service.config_directory") << " does not exist\n"; -// exit(6); -// } -// -// if (!is_directory(p)) { -// std::cerr << "Config directory " << CONFIG_STRING(config, "service.config_directory") << " does not exist\n"; -// exit(7); -// } -// -// directory_iterator end_itr; -// for (directory_iterator itr(p); itr != end_itr; ++itr) { -// if (is_regular(itr->path()) && extension(itr->path()) == ".cfg") { -// Config cfg; -// if (cfg.load(itr->path().string()) == false) { -// std::cerr << "Can't load config file " << itr->path().string() << ". Skipping...\n"; -// continue; -// } -// -// if (CONFIG_VECTOR(&cfg, "service.admin_jid").empty() || CONFIG_STRING(&cfg, "service.admin_password").empty()) { -// std::cerr << itr->path().string() << ": service.admin_jid or service.admin_password empty. This server can't be queried over XMPP.\n"; -// continue; -// } -// -// finished++; -// Swift::Client *client = new Swift::Client(CONFIG_VECTOR(&cfg, "service.admin_jid")[0], CONFIG_STRING(&cfg, "service.admin_password"), &networkFactories); -// client->setAlwaysTrustCertificates(); -// client->onConnected.connect(boost::bind(&handleConnected, client, CONFIG_STRING(&cfg, "service.jid"))); -// client->onDisconnected.connect(bind(&handleDisconnected, client, _1, CONFIG_STRING(&cfg, "service.jid"))); -// client->onMessageReceived.connect(bind(&handleMessageReceived, client, _1, CONFIG_STRING(&cfg, "service.jid"))); -// Swift::ClientOptions opt; -// opt.allowPLAINWithoutTLS = true; -// client->connect(opt); -// } -// } -// } -// catch (const filesystem_error& ex) { -// std::cerr << "boost filesystem error\n"; -// exit(5); -// } -// } - - -int main(int argc, char **argv) -{ - ManagerConfig config; - std::string config_file; - std::vector command; - boost::program_options::variables_map vm; - - boost::program_options::options_description desc("Usage: spectrum [OPTIONS] \n" - " spectrum [OPTIONS] \nCommands:\n" - " start - start all local Spectrum2 instances\n" - " stop - stop all local Spectrum2 instances\n" - " restart - restart all local Spectrum2 instances\n" - " status - status of local Spectrum2 instances\n" - " - send command to local Spectrum2 instance and print output\n" - "Allowed options"); - desc.add_options() - ("help,h", "Show help output") - ("config,c", boost::program_options::value(&config_file)->default_value("/etc/spectrum2/spectrum_manager.cfg"), "Spectrum manager config file") - ("command", boost::program_options::value >(&command), "Command") - ; - try - { - boost::program_options::positional_options_description p; - p.add("command", -1); - boost::program_options::store(boost::program_options::command_line_parser(argc, argv). - options(desc).positional(p).run(), vm); - boost::program_options::notify(vm); - - if(vm.count("help")) - { - std::cout << desc << "\n"; - return 1; - } - } - catch (std::runtime_error& e) - { - std::cout << desc << "\n"; - return 2; - } - catch (...) - { - std::cout << desc << "\n"; - return 3; - } - - if (!config.load(config_file)) { - std::cerr << "Can't load configuration file.\n"; - return 4; - } - - if (command.empty()) { - std::cout << desc << "\n"; - return 1; - } - - if (command[0] == "start") { - return start_instances(&config); - } - else if (command[0] == "stop") { - stop_instances(&config); - } - else if (command[0] == "status") { - return show_status(&config); - } - else if (command[0] == "list") { - std::vector list = show_list(&config); - } - else if (command[0] == "restart") { - return restart_instances(&config); - } - else if (command[0] == "server") { - Server server(&config); - if (server.start() == false) { - std::cerr << "Can't set up server handler.\n"; - return 1; - } - while (1) { sleep(10); } - } - else { - if (command.size() < 2) { - std::cout << desc << "\n"; - return 11; - } - Swift::SimpleEventLoop eventLoop; - Swift::BoostNetworkFactories networkFactories(&eventLoop); - - std::string jid = command[0]; - command.erase(command.begin()); - std::string cmd = boost::algorithm::join(command, " "); - - if (cmd == "start") { - return start_instances(&config, jid); - } - else if (cmd == "stop") { - stop_instances(&config, jid); - return 0; - } - else if (cmd == "restart") { - return restart_instances(&config, jid); - } - - ask_local_server(&config, networkFactories, jid, cmd); -// std::string message = command; -// m = &message; - -// ask_local_server(&config, networkFactories, message); - - eventLoop.runUntilEvents(); - - - struct timeval td_start,td_end; - float elapsed = 0; - gettimeofday(&td_start, NULL); - - time_t started = time(NULL); - while(get_response().empty()) { - eventLoop.runUntilEvents(); - } - if (!get_response().empty()) { - gettimeofday(&td_end, NULL); - elapsed = 1000000.0 * (td_end.tv_sec -td_start.tv_sec); \ - elapsed += (td_end.tv_usec - td_start.tv_usec); \ - elapsed = elapsed / 1000 / 1000; \ -// std::cout << "Response received after " << (elapsed) << " seconds\n"; - } - } -} +#include "managerconfig.h" +#include "methods.h" +#include "server.h" +#include "transport/config.h" +#include "transport/protocol.pb.h" +#include "Swiften/Swiften.h" +#include "Swiften/EventLoop/SimpleEventLoop.h" + +#include +#include +#include +#include +#include +#include +#include +#include "signal.h" +#include "sys/wait.h" + + +using namespace Transport; + +using namespace boost::filesystem; + +using namespace boost; + + +// static void ask_local_servers(ManagerConfig *config, Swift::BoostNetworkFactories &networkFactories, const std::string &message) { +// path p(CONFIG_STRING(config, "service.config_directory")); +// +// try { +// if (!exists(p)) { +// std::cerr << "Config directory " << CONFIG_STRING(config, "service.config_directory") << " does not exist\n"; +// exit(6); +// } +// +// if (!is_directory(p)) { +// std::cerr << "Config directory " << CONFIG_STRING(config, "service.config_directory") << " does not exist\n"; +// exit(7); +// } +// +// directory_iterator end_itr; +// for (directory_iterator itr(p); itr != end_itr; ++itr) { +// if (is_regular(itr->path()) && extension(itr->path()) == ".cfg") { +// Config cfg; +// if (cfg.load(itr->path().string()) == false) { +// std::cerr << "Can't load config file " << itr->path().string() << ". Skipping...\n"; +// continue; +// } +// +// if (CONFIG_VECTOR(&cfg, "service.admin_jid").empty() || CONFIG_STRING(&cfg, "service.admin_password").empty()) { +// std::cerr << itr->path().string() << ": service.admin_jid or service.admin_password empty. This server can't be queried over XMPP.\n"; +// continue; +// } +// +// finished++; +// Swift::Client *client = new Swift::Client(CONFIG_VECTOR(&cfg, "service.admin_jid")[0], CONFIG_STRING(&cfg, "service.admin_password"), &networkFactories); +// client->setAlwaysTrustCertificates(); +// client->onConnected.connect(boost::bind(&handleConnected, client, CONFIG_STRING(&cfg, "service.jid"))); +// client->onDisconnected.connect(bind(&handleDisconnected, client, _1, CONFIG_STRING(&cfg, "service.jid"))); +// client->onMessageReceived.connect(bind(&handleMessageReceived, client, _1, CONFIG_STRING(&cfg, "service.jid"))); +// Swift::ClientOptions opt; +// opt.allowPLAINWithoutTLS = true; +// client->connect(opt); +// } +// } +// } +// catch (const filesystem_error& ex) { +// std::cerr << "boost filesystem error\n"; +// exit(5); +// } +// } + + +int main(int argc, char **argv) +{ + ManagerConfig config; + std::string config_file; + std::vector command; + boost::program_options::variables_map vm; + + boost::program_options::options_description desc("Usage: spectrum [OPTIONS] \n" + " spectrum [OPTIONS] \nCommands:\n" + " start - start all local Spectrum2 instances\n" + " stop - stop all local Spectrum2 instances\n" + " restart - restart all local Spectrum2 instances\n" + " status - status of local Spectrum2 instances\n" + " - send command to local Spectrum2 instance and print output\n" + "Allowed options"); + desc.add_options() + ("help,h", "Show help output") + ("config,c", boost::program_options::value(&config_file)->default_value("/etc/spectrum2/spectrum_manager.cfg"), "Spectrum manager config file") + ("command", boost::program_options::value >(&command), "Command") + ; + try + { + boost::program_options::positional_options_description p; + p.add("command", -1); + boost::program_options::store(boost::program_options::command_line_parser(argc, argv). + options(desc).positional(p).run(), vm); + boost::program_options::notify(vm); + + if(vm.count("help")) + { + std::cout << desc << "\n"; + return 1; + } + } + catch (std::runtime_error& e) + { + std::cout << desc << "\n"; + return 2; + } + catch (...) + { + std::cout << desc << "\n"; + return 3; + } + + if (!config.load(config_file)) { + std::cerr << "Can't load configuration file.\n"; + return 4; + } + + if (command.empty()) { + std::cout << desc << "\n"; + return 1; + } + + if (command[0] == "start") { + return start_instances(&config); + } + else if (command[0] == "stop") { + stop_instances(&config); + } + else if (command[0] == "status") { + return show_status(&config); + } + else if (command[0] == "list") { + std::vector list = show_list(&config); + } + else if (command[0] == "restart") { + return restart_instances(&config); + } + else if (command[0] == "server") { + Server server(&config); + if (server.start() == false) { + std::cerr << "Can't set up server handler.\n"; + return 1; + } + while (1) { sleep(10); } + } + else { + if (command.size() < 2) { + std::cout << desc << "\n"; + return 11; + } + Swift::SimpleEventLoop eventLoop; + Swift::BoostNetworkFactories networkFactories(&eventLoop); + + std::string jid = command[0]; + command.erase(command.begin()); + std::string cmd = boost::algorithm::join(command, " "); + + if (cmd == "start") { + return start_instances(&config, jid); + } + else if (cmd == "stop") { + stop_instances(&config, jid); + return 0; + } + else if (cmd == "restart") { + return restart_instances(&config, jid); + } + + ask_local_server(&config, networkFactories, jid, cmd); +// std::string message = command; +// m = &message; + +// ask_local_server(&config, networkFactories, message); + + eventLoop.runUntilEvents(); + + + struct timeval td_start,td_end; + float elapsed = 0; + gettimeofday(&td_start, NULL); + + time_t started = time(NULL); + while(get_response().empty()) { + eventLoop.runUntilEvents(); + } + if (!get_response().empty()) { + gettimeofday(&td_end, NULL); + elapsed = 1000000.0 * (td_end.tv_sec -td_start.tv_sec); \ + elapsed += (td_end.tv_usec - td_start.tv_usec); \ + elapsed = elapsed / 1000 / 1000; \ +// std::cout << "Response received after " << (elapsed) << " seconds\n"; + } + } +}