aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2025-12-23 16:07:51 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2025-12-23 16:55:55 +0100
commit646a7b1ed44decdb6aff868633419dbf3f3d95d1 (patch)
tree208b765bcc6c8c610eed517565e34921043fa75a /src
parent802155fe01ea0cfdd3102f4688094a3925b6a4e6 (diff)
downloaddabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.tar.gz
dabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.tar.bz2
dabmux-646a7b1ed44decdb6aff868633419dbf3f3d95d1.zip
Add remote address to stats
Diffstat (limited to 'src')
-rw-r--r--src/DabMultiplexer.cpp9
-rw-r--r--src/DabMultiplexer.h3
-rw-r--r--src/DabMux.cpp2
-rw-r--r--src/ManagementServer.cpp39
-rw-r--r--src/ManagementServer.h14
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;