From 9a4d67238412338530703a073d3e3ec6a6140adc Mon Sep 17 00:00:00 2001 From: Avan Thakkar Date: Wed, 1 Jun 2022 16:38:43 +0530 Subject: [PATCH] exporter: minor fixes and cleanups Signed-off-by: Avan Thakkar --- src/common/options/ceph-exporter.yaml.in | 10 ++++++++-- src/exporter/DaemonMetricCollector.cc | 23 ++++++++--------------- src/exporter/DaemonMetricCollector.h | 3 --- src/exporter/ceph_exporter.cc | 13 ++++--------- src/exporter/http_server.cc | 8 ++++---- src/exporter/http_server.h | 2 +- 6 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/common/options/ceph-exporter.yaml.in b/src/common/options/ceph-exporter.yaml.in index d7c6b8cc7b9e5..f18845548d36b 100644 --- a/src/common/options/ceph-exporter.yaml.in +++ b/src/common/options/ceph-exporter.yaml.in @@ -2,14 +2,16 @@ --- options: -- name: sock_dir +- name: exporter_sock_dir type: str level: advanced desc: The path to ceph daemons socket files dir default: /var/run/ceph/ services: - ceph-exporter -- name: exporter_addrs + flags: + - runtime +- name: exporter_addr type: str level: advanced desc: Host ip address where exporter is deployed @@ -30,6 +32,8 @@ options: default: 10 services: - ceph-exporter + flags: + - runtime - name: exporter_stats_period type: int level: advanced @@ -37,3 +41,5 @@ options: default: 5 services: - ceph-exporter + flags: + - runtime diff --git a/src/exporter/DaemonMetricCollector.cc b/src/exporter/DaemonMetricCollector.cc index 3283bce7b12a4..c9961c9507839 100644 --- a/src/exporter/DaemonMetricCollector.cc +++ b/src/exporter/DaemonMetricCollector.cc @@ -19,21 +19,17 @@ using json_array = boost::json::array; void DaemonMetricCollector::request_loop(boost::asio::steady_timer &timer) { timer.async_wait([&](const boost::system::error_code &e) { std::cerr << e << std::endl; - const auto start = std::chrono::system_clock::now(); update_sockets(); dump_asok_metrics(); - const std::chrono::duration end = std::chrono::system_clock::now() - start; - timer.expires_from_now(std::chrono::seconds(std::max(stats_period, (int)std::round(end.count())))); + auto stats_period = g_conf().get_val("exporter_stats_period"); + timer.expires_from_now(std::chrono::seconds(stats_period)); request_loop(timer); }); } -void DaemonMetricCollector::set_sock_dir() { - SOCKETDIR = g_conf().get_val("sock_dir"); -} - void DaemonMetricCollector::main() { - stats_period = g_conf().get_val("exporter_stats_period");; + // time to wait before sending requests again + auto stats_period = g_conf().get_val("exporter_stats_period"); boost::asio::io_service io; boost::asio::steady_timer timer{io, std::chrono::seconds(stats_period)}; request_loop(timer); @@ -94,8 +90,7 @@ void DaemonMetricCollector::dump_asok_metrics() { for (auto &perf_counter : perf_group_object) { std::string perf_name = perf_counter.key().to_string(); json_object perf_info = perf_counter.value().as_object(); - int prio_limit = g_conf().get_val("exporter_prio_limit"); - // std::cout << prio_limit << std::endl; + auto prio_limit = g_conf().get_val("exporter_prio_limit"); if (perf_info["priority"].as_int64() < prio_limit) { continue; @@ -189,19 +184,17 @@ void DaemonMetricCollector::dump_asok_metric(std::stringstream &ss, } } void DaemonMetricCollector::update_sockets() { - // std:: cout << SOCKETDIR << std::endl; + std::string sock_dir = g_conf().get_val("exporter_sock_dir"); clients.clear(); for (const auto &entry : - std::filesystem::directory_iterator(SOCKETDIR)) { + std::filesystem::directory_iterator(sock_dir)) { if (entry.path().extension() == ".asok") { std::string daemon_socket_name = entry.path().filename().string(); std::string daemon_name = daemon_socket_name.substr(0, daemon_socket_name.size() - 5); if (clients.find(daemon_name) == clients.end() && - !(daemon_name.find("mgr") != std::string::npos) && - !(daemon_name.find("client") != std::string::npos)) { + !(daemon_name.find("mgr") != std::string::npos)) { AdminSocketClient sock(entry.path().string()); - std::cout << entry.path().string() << std::endl; clients.insert({daemon_name, std::move(sock)}); } } diff --git a/src/exporter/DaemonMetricCollector.h b/src/exporter/DaemonMetricCollector.h index 5ae9e9e650197..28ffb84214185 100644 --- a/src/exporter/DaemonMetricCollector.h +++ b/src/exporter/DaemonMetricCollector.h @@ -15,15 +15,12 @@ class DaemonMetricCollector { public: void main(); - void set_sock_dir(); std::string get_metrics(); - std::string SOCKETDIR = "/var/run/ceph/"; private: std::map clients; std::string metrics; std::mutex metrics_mutex; - int stats_period; // time to wait before sending requests again void update_sockets(); void request_loop(boost::asio::steady_timer &timer); diff --git a/src/exporter/ceph_exporter.cc b/src/exporter/ceph_exporter.cc index 6eea558e5a084..36f954ffa4638 100644 --- a/src/exporter/ceph_exporter.cc +++ b/src/exporter/ceph_exporter.cc @@ -38,23 +38,19 @@ int main(int argc, char **argv) { auto cct = global_init(NULL, args, CEPH_ENTITY_TYPE_CLIENT, CODE_ENVIRONMENT_DAEMON, 0); - std::string val, sock_dir, exporter_addrs, exporter_prio_limit; + std::string val; for (auto i = args.begin(); i != args.end();) { if (ceph_argparse_double_dash(args, i)) { break; } else if (ceph_argparse_witharg(args, i, &val, "--sock-dir", (char *)NULL)) { - sock_dir = val; - cct->_conf.set_val("sock_dir", val); + cct->_conf.set_val("exporter_sock_dir", val); } else if (ceph_argparse_witharg(args, i, &val, "--addrs", (char *)NULL)) { - exporter_addrs = val; - cct->_conf.set_val("exporter_addrs", val); + cct->_conf.set_val("exporter_addr", val); } else if (ceph_argparse_witharg(args, i, &val, "--port", (char *)NULL)) { cct->_conf.set_val("exporter_port", val); } else if (ceph_argparse_witharg(args, i, &val, "--prio-limit", (char *)NULL)) { - exporter_prio_limit = val; cct->_conf.set_val("exporter_prio_limit", val); } else if (ceph_argparse_witharg(args, i, &val, "--stats-period", (char *)NULL)) { - exporter_prio_limit = val; cct->_conf.set_val("exporter_stats_period", val); } else { ++i; @@ -62,9 +58,8 @@ int main(int argc, char **argv) { } common_init_finish(g_ceph_context); - boost::thread server_thread(http_server_thread_entrypoint, exporter_addrs); + boost::thread server_thread(http_server_thread_entrypoint); DaemonMetricCollector &collector = collector_instance(); - collector.set_sock_dir(); collector.main(); server_thread.join(); } diff --git a/src/exporter/http_server.cc b/src/exporter/http_server.cc index 248ef352fb87b..92d28c1d306b9 100644 --- a/src/exporter/http_server.cc +++ b/src/exporter/http_server.cc @@ -136,10 +136,10 @@ void http_server(tcp::acceptor &acceptor, tcp::socket &socket) { }); } -void http_server_thread_entrypoint(std::string exporter_addrs) { +void http_server_thread_entrypoint() { try { - exporter_addrs = !exporter_addrs.empty() ? exporter_addrs : g_conf().get_val("exporter_addrs"); - auto const address = net::ip::make_address(exporter_addrs); + std::string exporter_addr = g_conf().get_val("exporter_addr"); + auto const address = net::ip::make_address(exporter_addr); unsigned short port = g_conf().get_val("exporter_port"); net::io_context ioc{1}; @@ -147,7 +147,7 @@ void http_server_thread_entrypoint(std::string exporter_addrs) { tcp::acceptor acceptor{ioc, {address, port}}; tcp::socket socket{ioc}; http_server(acceptor, socket); - std::cout << "Http server running on " << exporter_addrs + ":" << port << std::endl; + std::cout << "Http server running on " << exporter_addr << ":" << port << std::endl; ioc.run(); } catch (std::exception const &e) { std::cerr << "Error: " << e.what() << std::endl; diff --git a/src/exporter/http_server.h b/src/exporter/http_server.h index fa502bfa50634..0d0502f57c8af 100644 --- a/src/exporter/http_server.h +++ b/src/exporter/http_server.h @@ -2,4 +2,4 @@ #include -void http_server_thread_entrypoint(std::string exporter_addrs); +void http_server_thread_entrypoint(); -- 2.39.5