diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2025-12-23 16:07:51 +0100 |
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2025-12-23 16:55:55 +0100 |
| commit | 646a7b1ed44decdb6aff868633419dbf3f3d95d1 (patch) | |
| tree | 208b765bcc6c8c610eed517565e34921043fa75a /src | |
| parent | 802155fe01ea0cfdd3102f4688094a3925b6a4e6 (diff) | |
| download | dabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.tar.gz dabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.tar.bz2 dabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.zip | |
Add remote address to stats
Diffstat (limited to 'src')
| -rw-r--r-- | src/DabMultiplexer.cpp | 9 | ||||
| -rw-r--r-- | src/DabMultiplexer.h | 3 | ||||
| -rw-r--r-- | src/DabMux.cpp | 2 | ||||
| -rw-r--r-- | src/ManagementServer.cpp | 39 | ||||
| -rw-r--r-- | src/ManagementServer.h | 14 |
5 files changed, 41 insertions, 26 deletions
diff --git a/src/DabMultiplexer.cpp b/src/DabMultiplexer.cpp index f6ba753..d2dafa9 100644 --- a/src/DabMultiplexer.cpp +++ b/src/DabMultiplexer.cpp @@ -152,12 +152,6 @@ DabMultiplexer::DabMultiplexer(DabMultiplexerConfig& config, ClockTAI& clock_tai RC_ADD_PARAMETER(tist_offset, "Configured tist-offset"); RC_ADD_PARAMETER(reload_linking, "Write 1 to this parameter to trigger a reload of the linkage sets, frequency info and other-services from the config [write-only]"); - rcs.enrol(&m_clock_tai); -} - -DabMultiplexer::~DabMultiplexer() -{ - rcs.remove_controllable(&m_clock_tai); } void DabMultiplexer::set_edi_config(const edi::configuration_t& new_edi_conf) @@ -879,8 +873,7 @@ void DabMultiplexer::mux_frame(std::vector<std::shared_ptr<DabOutput> >& outputs for (const auto& stat : edi_sender->get_tcp_server_stats()) { get_mgmt_server().update_edi_tcp_output_stat( - stat.listen_port, - stat.stats.size()); + stat.listen_port, stat.stats); } } diff --git a/src/DabMultiplexer.h b/src/DabMultiplexer.h index d3ab532..7f12868 100644 --- a/src/DabMultiplexer.h +++ b/src/DabMultiplexer.h @@ -89,9 +89,6 @@ class DabMultiplexerConfig { class DabMultiplexer : public RemoteControllable { public: DabMultiplexer(DabMultiplexerConfig& config, ClockTAI& clock_tai); - DabMultiplexer(const DabMultiplexer& other) = delete; - DabMultiplexer& operator=(const DabMultiplexer& other) = delete; - virtual ~DabMultiplexer(); void prepare(bool require_tai_clock); diff --git a/src/DabMux.cpp b/src/DabMux.cpp index 14a7f8e..b531589 100644 --- a/src/DabMux.cpp +++ b/src/DabMux.cpp @@ -242,6 +242,8 @@ int main(int argc, char *argv[]) } ClockTAI clock_tai(mux_conf.pt.get("general.tai_clock_bulletins", "")); + rcs.enrol(&clock_tai); + DabMultiplexer mux(mux_conf, clock_tai); etiLog.level(info) << diff --git a/src/ManagementServer.cpp b/src/ManagementServer.cpp index cf248d9..bddc345 100644 --- a/src/ManagementServer.cpp +++ b/src/ManagementServer.cpp @@ -147,11 +147,13 @@ void ManagementServer::unregister_input(std::string id) } // outputs will never disappear, no need to have a "remove" logic -void ManagementServer::update_edi_tcp_output_stat(uint16_t listen_port, size_t num_connections) +void ManagementServer::update_edi_tcp_output_stat( + uint16_t listen_port, + const std::vector<Socket::TCPConnection::stats_t>& stats) { unique_lock<mutex> lock(m_statsmutex); - m_output_stats[listen_port] = num_connections; + m_output_stats[listen_port] = stats; } bool ManagementServer::isInputRegistered(std::string& id) @@ -182,7 +184,9 @@ std::string ManagementServer::get_json_stats_for_http(std::optional<int64_t> clo } j["inputs"] = get_input_values(); - j["outputs"] = get_output_values(); + auto ov = get_output_values(); + j["outputs"] = ov.values; + j["num_output_connections"] = ov.total_num_connections; return json::map_to_json(j); } @@ -193,8 +197,7 @@ json::map_t ManagementServer::get_input_config_json() std::vector<json::value_t> v; for (const auto& stat : m_input_stats) { - json::value_t id; - id = stat.first; + json::value_t id = stat.first; v.emplace_back(id); } @@ -217,22 +220,33 @@ json::map_t ManagementServer::get_input_values() const return j; } -json::map_t ManagementServer::get_output_values() const +ManagementServer::output_stats ManagementServer::get_output_values() const { unique_lock<mutex> lock(m_statsmutex); - json::map_t j; + output_stats ret; + for (const auto& stat : m_output_stats) { auto listen_port = stat.first; - auto num_connections = stat.second; + auto output_stats = stat.second; + + ret.total_num_connections += output_stats.size(); string key = "edi_tcp_" + to_string(listen_port); json::map_t o; - o["num_connections"] = num_connections; - j[key] = std::move(o); + o["num_connections"] = output_stats.size(); + + vector<json::value_t> remote_addresses; + for (const auto& s : output_stats) { + remote_addresses.emplace_back(s.remote_address.to_string()); + } + o["remote_addresses"] = remote_addresses; + + ret.values[key] = std::move(o); } - return j; + + return ret; } ManagementServer::ManagementServer() : @@ -347,7 +361,8 @@ void ManagementServer::handle_message(zmq::message_t& zmq_message) } else if (data == "output_values") { json::map_t root; - root["output_values"] = get_output_values(); + auto ov = get_output_values(); + root["output_values"] = ov.values; answer << json::map_to_json(root); } else if (data == "getptree") { diff --git a/src/ManagementServer.h b/src/ManagementServer.h index a721550..2010907 100644 --- a/src/ManagementServer.h +++ b/src/ManagementServer.h @@ -52,6 +52,7 @@ #endif #include "zmq.hpp" +#include "Socket.h" #include <string> #include <map> #include <atomic> @@ -170,7 +171,9 @@ class ManagementServer void register_input(InputStat* is); void unregister_input(std::string id); - void update_edi_tcp_output_stat(uint16_t listen_port, size_t num_connections); + void update_edi_tcp_output_stat( + uint16_t listen_port, + const std::vector<Socket::TCPConnection::stats_t>& stats); /* Load a ptree given by the management server. * @@ -212,7 +215,8 @@ class ManagementServer std::map<std::string, InputStat*> m_input_stats; // Holds information about EDI/TCP outputs - std::map<uint16_t /* port */, size_t /* num_connections */> m_output_stats; + std::map<uint16_t /* port */, + std::vector<Socket::TCPConnection::stats_t>> m_output_stats; /* Return a description of the configuration that will * allow to define what graphs to be created @@ -227,7 +231,11 @@ class ManagementServer */ json::map_t get_input_values() const; - json::map_t get_output_values() const; + struct output_stats { + json::map_t values; + size_t total_num_connections = 0; + }; + output_stats get_output_values() const; // mutex for accessing the map mutable std::mutex m_statsmutex; |
