aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2025-12-22 18:10:42 +0100
committerMatthias P. Braendli <matthias.braendli@mpb.li>2025-12-22 18:10:42 +0100
commit802155fe01ea0cfdd3102f4688094a3925b6a4e6 (patch)
tree5e6a163f90422a6e23471d1d24bda20839289ed9 /src
parentcb46e8753d747ee157241e480b02ae240ac58466 (diff)
downloaddabmux-next.tar.gz
dabmux-next.tar.bz2
dabmux-next.zip
Adapt ManagementServer jsonnext
Diffstat (limited to 'src')
-rw-r--r--src/ManagementServer.cpp173
-rw-r--r--src/ManagementServer.h9
2 files changed, 70 insertions, 112 deletions
diff --git a/src/ManagementServer.cpp b/src/ManagementServer.cpp
index 95124e4..cf248d9 100644
--- a/src/ManagementServer.cpp
+++ b/src/ManagementServer.cpp
@@ -169,105 +169,70 @@ bool ManagementServer::isInputRegistered(std::string& id)
std::string ManagementServer::get_json_stats_for_http(std::optional<int64_t> clocktai_expires_at) const
{
- std::ostringstream ss;
+ json::map_t j;
- ss << "{ \"version\" : \"" << VERSION << "\"\n";
- ss << ", \"global_input_state\" : null\n"; // TODO
- ss << ", \"clock_tai_expiry\" : ";
+ j["version"] = VERSION;
+ j["global_input_state"] = std::nullopt; // TODO
if (clocktai_expires_at) {
- ss << *clocktai_expires_at;
+ j["clock_tai_expiry"] = *clocktai_expires_at;
}
else {
- ss << "null";
+ j["clock_tai_expiry"] = std::nullopt;
}
- ss << "\n";
- ss << ", \"inputs\" : \n";
- ss << get_input_values_json();
- ss << ",\n \"outputs\" : \n";
- ss << get_output_values_json();
- ss << "\n}";
+ j["inputs"] = get_input_values();
+ j["outputs"] = get_output_values();
- return ss.str();
+ return json::map_to_json(j);
}
-std::string ManagementServer::get_input_config_json()
+json::map_t ManagementServer::get_input_config_json()
{
unique_lock<mutex> lock(m_statsmutex);
- std::ostringstream ss;
- ss << "{ \"config\" : [\n";
-
- std::map<std::string,InputStat*>::iterator iter;
- int i = 0;
- for (iter = m_input_stats.begin(); iter != m_input_stats.end();
- ++iter, i++)
- {
- std::string id = iter->first;
-
- if (i > 0) {
- ss << ", ";
- }
-
- ss << " \"" << id << "\" ";
+ std::vector<json::value_t> v;
+ for (const auto& stat : m_input_stats) {
+ json::value_t id;
+ id = stat.first;
+ v.emplace_back(id);
}
- ss << "] }\n";
-
- return ss.str();
+ json::map_t j;
+ j["config"] = v;
+ return j;
}
-std::string ManagementServer::get_input_values_json() const
+json::map_t ManagementServer::get_input_values() const
{
unique_lock<mutex> lock(m_statsmutex);
- std::ostringstream ss;
- ss << "{\n";
-
- int i = 0;
- for (auto iter = m_input_stats.begin(); iter != m_input_stats.end();
- ++iter, i++)
- {
- const std::string& id = iter->first;
- InputStat* stats = iter->second;
-
- if (i > 0) {
- ss << " ,\n";
- }
+ json::map_t j;
+ for (const auto& stat : m_input_stats) {
+ const std::string& id = stat.first;
+ InputStat* stats = stat.second;
- ss << " \"" << id << "\" : ";
- ss << stats->encodeValuesJSON();
+ j[id] = stats->encodeValues();
}
-
- ss << "}\n";
-
- return ss.str();
+ return j;
}
-std::string ManagementServer::get_output_values_json() const
+json::map_t ManagementServer::get_output_values() const
{
unique_lock<mutex> lock(m_statsmutex);
- std::ostringstream ss;
- ss << "{\n";
-
- int i = 0;
- for (auto iter = m_output_stats.begin(); iter != m_output_stats.end();
- ++iter, i++)
- {
- auto listen_port = iter->first;
- auto num_connections = iter->second;
- if (i > 0) {
- ss << " ,\n";
- }
- ss << " \"edi_tcp_" << listen_port << "\" : { \"num_connections\": " <<
- num_connections << "} ";
- }
+ json::map_t j;
+ for (const auto& stat : m_output_stats) {
+ auto listen_port = stat.first;
+ auto num_connections = stat.second;
- ss << "}\n";
+ string key = "edi_tcp_" + to_string(listen_port);
+ json::map_t o;
+ o["num_connections"] = num_connections;
+ j[key] = std::move(o);
+ }
- return ss.str();
+ return j;
}
ManagementServer::ManagementServer() :
@@ -373,21 +338,17 @@ void ManagementServer::handle_message(zmq::message_t& zmq_message)
<< "}\n";
}
else if (data == "config") {
- answer << get_input_config_json();
+ answer << json::map_to_json(get_input_config_json());
}
else if (data == "values") {
- std::ostringstream ss;
- ss << "{ \"values\" : \n";
- ss << get_input_values_json();
- ss << "}";
- answer << ss.str();
+ json::map_t root;
+ root["values"] = get_input_values();
+ answer << json::map_to_json(root);
}
else if (data == "output_values") {
- std::ostringstream ss;
- ss << "{ \"output_values\" : \n";
- ss << get_output_values_json();
- ss << "}";
- answer << ss.str();
+ json::map_t root;
+ root["output_values"] = get_output_values();
+ answer << json::map_to_json(root);
}
else if (data == "getptree") {
unique_lock<mutex> lock(m_configmutex);
@@ -549,10 +510,8 @@ void InputStat::notifyVersion(const std::string& version, uint32_t uptime_s)
m_uptime_s = uptime_s;
}
-std::string InputStat::encodeValuesJSON()
+json::map_t InputStat::encodeValues()
{
- std::ostringstream ss;
-
const int16_t int16_max = std::numeric_limits<int16_t>::max();
unique_lock<mutex> lock(m_mutex);
@@ -619,41 +578,39 @@ std::string InputStat::encodeValuesJSON()
pos++;
}
- ss <<
- "{ \"inputstat\" : {"
- "\"min_fill\": " << min_fill_buffer << ", "
- "\"max_fill\": " << max_fill_buffer << ", "
- "\"peak_left\": " << to_dB(peak_left_short) << ", "
- "\"peak_right\": " << to_dB(peak_right_short) << ", "
- "\"peak_left_slow\": " << to_dB(peak_left) << ", "
- "\"peak_right_slow\": " << to_dB(peak_right) << ", "
- "\"num_underruns\": " << m_num_underruns << ", "
- "\"num_overruns\": " << m_num_overruns << ", "
- "\"last_tist_offset\": " << m_last_tist_offset << ", "
- "\"version\": \"" << version << "\", "
- "\"uptime\": " << m_uptime_s << ", "
- ;
-
- ss << "\"state\": ";
-
+ json::map_t inputstat;
+ inputstat["min_fill"] = min_fill_buffer;
+ inputstat["max_fill"] = max_fill_buffer;
+ inputstat["peak_left"] = to_dB(peak_left_short);
+ inputstat["peak_right"] = to_dB(peak_right_short);
+ inputstat["peak_left_slow"] = to_dB(peak_left);
+ inputstat["peak_right_slow"] = to_dB(peak_right);
+ inputstat["num_underruns"] = m_num_underruns;
+ inputstat["num_overruns"] = m_num_overruns;
+ inputstat["last_tist_offset"] = m_last_tist_offset;
+ inputstat["version"] = version;
+ inputstat["uptime"] = m_uptime_s;
+ inputstat["state"] = "";
+
+ string state;
switch (determineState()) {
case input_state_t::NoData:
- ss << "\"NoData (1)\"";
+ inputstat["state"] = "NoData (1)";
break;
case input_state_t::Unstable:
- ss << "\"Unstable (2)\"";
+ inputstat["state"] = "Unstable (2)";
break;
case input_state_t::Silence:
- ss << "\"Silent (3)\"";
+ inputstat["state"] = "Silent (3)";
break;
case input_state_t::Streaming:
- ss << "\"Streaming (4)\"";
+ inputstat["state"] = "Streaming (4)";
break;
}
- ss << " } }";
-
- return ss.str();
+ json::map_t ret;
+ ret["inputstat"] = inputstat;
+ return ret;
}
input_state_t InputStat::determineState()
diff --git a/src/ManagementServer.h b/src/ManagementServer.h
index c018088..a721550 100644
--- a/src/ManagementServer.h
+++ b/src/ManagementServer.h
@@ -46,6 +46,7 @@
#pragma once
+#include "Json.h"
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
@@ -105,7 +106,7 @@ class InputStat
void notifyUnderrun();
void notifyOverrun();
void notifyVersion(const std::string& version, uint32_t uptime_s);
- std::string encodeValuesJSON();
+ json::map_t encodeValues();
input_state_t determineState();
private:
@@ -218,15 +219,15 @@ class ManagementServer
*
* returns: a JSON encoded configuration
*/
- std::string get_input_config_json();
+ json::map_t get_input_config_json();
/* Return the values for the statistics as defined in the configuration
*
* returns: JSON encoded statistics
*/
- std::string get_input_values_json() const;
+ json::map_t get_input_values() const;
- std::string get_output_values_json() const;
+ json::map_t get_output_values() const;
// mutex for accessing the map
mutable std::mutex m_statsmutex;