diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2015-03-07 17:19:31 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2015-03-07 17:27:12 +0100 |
commit | 3f4214227e993305bb320b299245f466b9b22233 (patch) | |
tree | 0863975f29692d0939e3acc53b76a00e97f2aadc | |
parent | 0414d5788090bb6df728d370079e44e95b4ffd20 (diff) | |
download | dabmux-3f4214227e993305bb320b299245f466b9b22233.tar.gz dabmux-3f4214227e993305bb320b299245f466b9b22233.tar.bz2 dabmux-3f4214227e993305bb320b299245f466b9b22233.zip |
Merge Stats and Config server, config is also JSON
-rw-r--r-- | doc/example.mux | 4 | ||||
-rw-r--r-- | src/ConfigParser.cpp | 7 | ||||
-rw-r--r-- | src/ConfigParser.h | 2 | ||||
-rw-r--r-- | src/ConfigServer.cpp | 177 | ||||
-rw-r--r-- | src/ConfigServer.h | 120 | ||||
-rw-r--r-- | src/DabMux.cpp | 41 | ||||
-rw-r--r-- | src/Makefile.am | 5 | ||||
-rw-r--r-- | src/ManagementServer.cpp (renamed from src/StatsServer.cpp) | 67 | ||||
-rw-r--r-- | src/ManagementServer.h (renamed from src/StatsServer.h) | 71 | ||||
-rw-r--r-- | src/dabInputZmq.cpp | 3 | ||||
-rw-r--r-- | src/dabInputZmq.h | 2 |
11 files changed, 121 insertions, 378 deletions
diff --git a/doc/example.mux b/doc/example.mux index 09151e9..abf01bc 100644 --- a/doc/example.mux +++ b/doc/example.mux @@ -33,14 +33,14 @@ general { ; This also enables time encoding using the MNSC. tist false - ; The statsserver is a simple TCP server that can present + ; The management server is a simple TCP server that can present ; statistics data (buffers, overruns, underruns, etc) ; which can then be graphed a tool like Munin ; The doc/stats_dabmux_multi.py tool is a suitable ; plugin for that. ; If the port is zero, or the line commented, the server ; is not started. - statsserverport 12720 + managementport 12720 } remotecontrol { diff --git a/src/ConfigParser.cpp b/src/ConfigParser.cpp index 2c4ab63..8c5cbaa 100644 --- a/src/ConfigParser.cpp +++ b/src/ConfigParser.cpp @@ -67,7 +67,7 @@ #include "dabInputDmbUdp.h" #include "dabInputZmq.h" #include "DabMux.h" -#include "StatsServer.h" +#include "ManagementServer.h" #ifdef _WIN32 @@ -132,7 +132,7 @@ void parse_ptree(boost::property_tree::ptree& pt, bool* factumAnalyzer, unsigned long* limit, BaseRemoteController** rc, - int* statsServerPort, + int* mgmtserverport, edi_configuration_t* edi ) { @@ -169,7 +169,8 @@ void parse_ptree(boost::property_tree::ptree& pt, *enableTist = pt_general.get("tist", false); - *statsServerPort = pt_general.get<int>("statsserverport", 0); + *mgmtserverport = pt_general.get<int>("managementport", + pt_general.get<int>("statsserverport", 0) ); /************** READ REMOTE CONTROL PARAMETERS *************/ ptree pt_rc = pt.get_child("remotecontrol"); diff --git a/src/ConfigParser.h b/src/ConfigParser.h index 16d2146..4af010a 100644 --- a/src/ConfigParser.h +++ b/src/ConfigParser.h @@ -45,7 +45,7 @@ void parse_ptree(boost::property_tree::ptree& pt, bool* factumAnalyzer, unsigned long* limit, BaseRemoteController** rc, - int* statsServerPort, + int* mgmtserverport, edi_configuration_t* edi); void setup_subchannel_from_ptree(dabSubchannel* subchan, diff --git a/src/ConfigServer.cpp b/src/ConfigServer.cpp deleted file mode 100644 index e2eefd4..0000000 --- a/src/ConfigServer.cpp +++ /dev/null @@ -1,177 +0,0 @@ -/* - Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, - 2011, 2012 Her Majesty the Queen in Right of Canada (Communications - Research Center Canada) - - Copyright (C) 2014 - Matthias P. Braendli, matthias.braendli@mpb.li - */ -/* - This file is part of ODR-DabMux. - - ODR-DabMux is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - ODR-DabMux is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. -*/ - -#include "ConfigServer.h" - -#include <errno.h> -#include <string.h> -#include <math.h> -#include <stdint.h> -#include <limits> -#include <sstream> -#include <ctime> -#include <boost/thread.hpp> -#include "Log.h" - -void ConfigServer::serverThread() -{ - m_fault = false; - - try { - int accepted_sock; - char buffer[256]; - char welcome_msg[256]; - struct sockaddr_in serv_addr, cli_addr; - int n; - - int welcome_msg_len = snprintf(welcome_msg, 256, - "%s %s Config Server\n", - PACKAGE_NAME, -#if defined(GITVERSION) - GITVERSION -#else - PACKAGE_VERSION -#endif - ); - - - m_sock = socket(AF_INET, SOCK_STREAM, 0); - if (m_sock < 0) { - etiLog.level(error) << "Error opening Config Server socket: " << - strerror(errno); - m_fault = true; - return; - } - - memset(&serv_addr, 0, sizeof(serv_addr)); - serv_addr.sin_family = AF_INET; - serv_addr.sin_addr.s_addr = INADDR_ANY; // TODO listen only on 127.0.0.1 - serv_addr.sin_port = htons(m_listenport); - - if (bind(m_sock, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) { - etiLog.level(error) << "Error binding Config Server socket: " << - strerror(errno); - goto end_serverthread; - } - - if (listen(m_sock, 5) < 0) { - etiLog.level(error) << "Error listening on Config Server socket: " << - strerror(errno); - goto end_serverthread; - } - - m_running = true; - - while (m_running) { - socklen_t cli_addr_len = sizeof(cli_addr); - - /* Accept actual connection from the client */ - accepted_sock = accept(m_sock, - (struct sockaddr *)&cli_addr, - &cli_addr_len); - - if (accepted_sock < 0) { - etiLog.level(warn) << "Config Server cound not accept connection: " << - strerror(errno); - continue; - } - /* Send welcome message with version */ - n = write(accepted_sock, welcome_msg, welcome_msg_len); - if (n < 0) { - etiLog.level(warn) << "Error writing to Config Server socket " << - strerror(errno); - close(accepted_sock); - continue; - } - - /* receive command */ - memset(buffer, 0, 256); - int n = read(accepted_sock, buffer, 255); - if (n < 0) { - etiLog.level(warn) << "Error reading from Config Server socket " << - strerror(errno); - close(accepted_sock); - continue; - } - - if (strcmp(buffer, "getconfig\n") == 0) { - boost::unique_lock<boost::mutex> lock(m_mutex); - m_pending_request = "getconfig"; - m_pending = true; - - while (m_pending) { - m_condition.wait(lock); - } - std::stringstream ss; - boost::property_tree::info_parser::write_info(ss, m_pt); - - std::string response = ss.str(); - - n = write(accepted_sock, response.c_str(), response.size()); - } - else { - int len = snprintf(buffer, 256, "Invalid command\n"); - n = write(accepted_sock, buffer, len); - } - - if (n < 0) { - etiLog.level(warn) << "Error writing to Config Server socket " << - strerror(errno); - } - close(accepted_sock); - } - -end_serverthread: - m_fault = true; - close(m_sock); - - } - catch (std::exception& e) { - etiLog.level(error) << "Config server caught exception: " << e.what(); - m_fault = true; - } -} - -void ConfigServer::restart() -{ - m_restarter_thread = boost::thread(&ConfigServer::restart_thread, - this, 0); -} - -// This runs in a separate thread, because -// it would take too long to be done in the main loop -// thread. -void ConfigServer::restart_thread(long) -{ - m_running = false; - - if (m_listenport) { - m_thread.interrupt(); - m_thread.join(); - } - - m_thread = boost::thread(&ConfigServer::serverThread, this); -} - diff --git a/src/ConfigServer.h b/src/ConfigServer.h deleted file mode 100644 index b51ef32..0000000 --- a/src/ConfigServer.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, - 2011, 2012 Her Majesty the Queen in Right of Canada (Communications - Research Center Canada) - - Copyright (C) 2014 - Matthias P. Braendli, matthias.braendli@mpb.li - */ -/* - This file is part of ODR-DabMux. - - ODR-DabMux is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - ODR-DabMux is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. -*/ - -#ifndef __CONFIG_SERVER_H_ -#define __CONFIG_SERVER_H_ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include <boost/property_tree/ptree.hpp> -#include <boost/property_tree/info_parser.hpp> -#include <boost/thread.hpp> -#include <cstdio> -#include <stdlib.h> -#include <iostream> -#include <fstream> -#include <iomanip> -#include <cstring> -#include <sys/socket.h> -#include <netinet/in.h> -#include <unistd.h> -#include <netdb.h> -#include <arpa/inet.h> - -class ConfigServer -{ - public: - ConfigServer() : - m_listenport(0), - m_running(false), - m_fault(false) - { } - - ConfigServer(int listen_port) : - m_listenport(listen_port), - m_running(false), - m_fault(false), - m_thread(&ConfigServer::serverThread, this) - { - m_sock = 0; - } - - ~ConfigServer() - { - m_running = false; - m_fault = false; - if (m_sock) { - close(m_sock); - } - m_thread.join(); - } - - bool request_pending() { - return m_pending; - } - - void update_ptree(const boost::property_tree::ptree& pt) { - boost::unique_lock<boost::mutex> lock(m_mutex); - m_pt = pt; - m_pending = false; - - m_condition.notify_one(); - } - - bool fault_detected() { return m_fault; } - void restart(void); - - private: - void restart_thread(long); - - /******* TCP Socket Server ******/ - // no copying (because of the thread) - ConfigServer(const ConfigServer& other); - - void serverThread(void); - - int m_listenport; - - // serverThread runs in a separate thread - bool m_running; - bool m_fault; - boost::thread m_thread; - boost::thread m_restarter_thread; - - int m_sock; - - bool m_pending; - std::string m_pending_request; - boost::condition_variable m_condition; - boost::mutex m_mutex; - - boost::property_tree::ptree m_pt; -}; - - -#endif - diff --git a/src/DabMux.cpp b/src/DabMux.cpp index 950eefe..cbbd612 100644 --- a/src/DabMux.cpp +++ b/src/DabMux.cpp @@ -3,8 +3,10 @@ 2011, 2012 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) - Copyright (C) 2014 + Copyright (C) 2014, 2015 Matthias P. Braendli, matthias.braendli@mpb.li + + http://www.opendigitalradio.org */ /* This file is part of ODR-DabMux. @@ -127,8 +129,7 @@ typedef DWORD32 uint32_t; #include "utils.h" #include "ParserCmdline.h" #include "ConfigParser.h" -#include "StatsServer.h" -#include "ConfigServer.h" +#include "ManagementServer.h" #include "Log.h" #include "RemoteControl.h" @@ -137,10 +138,8 @@ using boost::property_tree::ptree; using boost::property_tree::ptree_error; -/* Global stats server */ -StatsServer* global_stats; - -ConfigServer config_server(8001); +/* Global stats and config server */ +ManagementServer* mgmt_server; class MuxInitException : public exception { @@ -333,7 +332,7 @@ int main(int argc, char *argv[]) bool enableTist = false; unsigned timestamp = 0; - int statsserverport = 0; + int mgmtserverport = 0; edi_configuration_t edi_conf; @@ -373,7 +372,7 @@ int main(int argc, char *argv[]) read_info(conf_file, pt); parse_ptree(pt, outputs, ensemble, &enableTist, &FICL, - &factumAnalyzer, &limit, &rc, &statsserverport, &edi_conf); + &factumAnalyzer, &limit, &rc, &mgmtserverport, &edi_conf); } catch (runtime_error &e) { etiLog.log(error, "Configuration file parsing error: %s\n", @@ -393,7 +392,7 @@ int main(int argc, char *argv[]) string conf_file = argv[2]; parse_configfile(conf_file, outputs, ensemble, &enableTist, &FICL, - &factumAnalyzer, &limit, &rc, &statsserverport, &edi_conf); + &factumAnalyzer, &limit, &rc, &mgmtserverport, &edi_conf); } catch (runtime_error &e) { @@ -415,11 +414,11 @@ int main(int argc, char *argv[]) } #endif - if (statsserverport != 0) { - global_stats = new StatsServer(statsserverport); + if (mgmtserverport != 0) { + mgmt_server = new ManagementServer(mgmtserverport); } else { - global_stats = new StatsServer(); + mgmt_server = new ManagementServer(); } if (rc) { @@ -2174,21 +2173,15 @@ int main(int argc, char *argv[]) } /* Same for statistics server */ - if (global_stats && fc->FCT == 249 && global_stats->fault_detected()) { + if (mgmt_server && fc->FCT % 10 == 0) { + if (mgmt_server->fault_detected()) { etiLog.level(warn) << "Detected Statistics Server fault, restarting it"; - global_stats->restart(); - } - - if (fc->FCT % 10 == 0) { - if (config_server.fault_detected()) { - config_server.restart(); + mgmt_server->restart(); } - - if (config_server.request_pending()) { - config_server.update_ptree(pt); + else if (mgmt_server->request_pending()) { + mgmt_server->update_ptree(pt); } - } } diff --git a/src/Makefile.am b/src/Makefile.am index aa1f86a..f3bce5e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -79,7 +79,7 @@ odr_dabmux_SOURCES =DabMux.cpp DabMux.h \ MuxElements.cpp MuxElements.h \ RemoteControl.cpp RemoteControl.h \ ParserCmdline.cpp ParserCmdline.h \ - ParserConfig.cpp ParserConfig.h \ + ConfigParser.cpp ConfigParser.h \ Eti.h Eti.cpp \ Log.h Log.cpp \ UdpSocket.h UdpSocket.cpp \ @@ -92,8 +92,7 @@ odr_dabmux_SOURCES =DabMux.cpp DabMux.h \ Interleaver.h Interleaver.cpp \ ReedSolomon.h ReedSolomon.cpp \ mpeg.h mpeg.c \ - StatsServer.h StatsServer.cpp \ - ConfigServer.h ConfigServer.cpp \ + ManagementServer.h ManagementServer.cpp \ TcpServer.h TcpServer.cpp \ TcpSocket.h TcpSocket.cpp \ zmq.hpp diff --git a/src/StatsServer.cpp b/src/ManagementServer.cpp index 558a479..9ebdfeb 100644 --- a/src/StatsServer.cpp +++ b/src/ManagementServer.cpp @@ -2,13 +2,14 @@ Copyright (C) 2009 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) - Copyright (C) 2014 Matthias P. Braendli - http://mpb.li + Copyright (C) 2014, 2015 + Matthias P. Braendli, matthias.braendli@mpb.li - A TCP Socket server that serves state information and statistics for - monitoring purposes. + http://www.opendigitalradio.org - This server is very easy to integrate with munin http://munin-monitoring.org/ + A TCP Socket server that serves state information and statistics for + monitoring purposes, and also serves the internal configuration + property tree. */ /* This file is part of ODR-DabMux. @@ -35,12 +36,12 @@ #include <sstream> #include <ctime> #include <boost/thread.hpp> -#include "StatsServer.h" +#include "ManagementServer.h" #include "Log.h" -void StatsServer::registerInput(InputStat* is) +void ManagementServer::registerInput(InputStat* is) { - boost::mutex::scoped_lock lock(m_mutex); + boost::mutex::scoped_lock lock(m_statsmutex); std::string id(is->get_name()); @@ -54,9 +55,9 @@ void StatsServer::registerInput(InputStat* is) m_inputStats[id] = is; } -void StatsServer::unregisterInput(std::string id) +void ManagementServer::unregisterInput(std::string id) { - boost::mutex::scoped_lock lock(m_mutex); + boost::mutex::scoped_lock lock(m_statsmutex); if (m_inputStats.count(id) == 1) { m_inputStats.erase(id); @@ -64,9 +65,9 @@ void StatsServer::unregisterInput(std::string id) } -bool StatsServer::isInputRegistered(std::string& id) +bool ManagementServer::isInputRegistered(std::string& id) { - boost::mutex::scoped_lock lock(m_mutex); + boost::mutex::scoped_lock lock(m_statsmutex); if (m_inputStats.count(id) == 0) { etiLog.level(error) << @@ -77,9 +78,9 @@ bool StatsServer::isInputRegistered(std::string& id) return true; } -std::string StatsServer::getConfigJSON() +std::string ManagementServer::getStatConfigJSON() { - boost::mutex::scoped_lock lock(m_mutex); + boost::mutex::scoped_lock lock(m_statsmutex); std::ostringstream ss; ss << "{ \"config\" : [\n"; @@ -103,9 +104,9 @@ std::string StatsServer::getConfigJSON() return ss.str(); } -std::string StatsServer::getValuesJSON() +std::string ManagementServer::getValuesJSON() { - boost::mutex::scoped_lock lock(m_mutex); + boost::mutex::scoped_lock lock(m_statsmutex); std::ostringstream ss; ss << "{ \"values\" : {\n"; @@ -132,9 +133,9 @@ std::string StatsServer::getValuesJSON() return ss.str(); } -std::string StatsServer::getStateJSON() +std::string ManagementServer::getStateJSON() { - boost::mutex::scoped_lock lock(m_mutex); + boost::mutex::scoped_lock lock(m_statsmutex); std::ostringstream ss; ss << "{\n"; @@ -161,16 +162,16 @@ std::string StatsServer::getStateJSON() return ss.str(); } -void StatsServer::restart() +void ManagementServer::restart() { - m_restarter_thread = boost::thread(&StatsServer::restart_thread, + m_restarter_thread = boost::thread(&ManagementServer::restart_thread, this, 0); } // This runs in a separate thread, because // it would take too long to be done in the main loop // thread. -void StatsServer::restart_thread(long) +void ManagementServer::restart_thread(long) { m_running = false; @@ -179,10 +180,10 @@ void StatsServer::restart_thread(long) m_thread.join(); } - m_thread = boost::thread(&StatsServer::serverThread, this); + m_thread = boost::thread(&ManagementServer::serverThread, this); } -void StatsServer::serverThread() +void ManagementServer::serverThread() { m_fault = false; @@ -265,7 +266,7 @@ void StatsServer::serverThread() } if (strcmp(buffer, "config\n") == 0) { - std::string json = getConfigJSON(); + std::string json = getStatConfigJSON(); n = write(accepted_sock, json.c_str(), json.size()); } else if (strcmp(buffer, "values\n") == 0) { @@ -276,6 +277,20 @@ void StatsServer::serverThread() std::string json = getStateJSON(); n = write(accepted_sock, json.c_str(), json.size()); } + if (strcmp(buffer, "getptree\n") == 0) { + boost::unique_lock<boost::mutex> lock(m_configmutex); + m_pending = true; + + while (m_pending) { + m_condition.wait(lock); + } + std::stringstream ss; + boost::property_tree::json_parser::write_json(ss, m_pt); + + std::string response = ss.str(); + + n = write(accepted_sock, response.c_str(), response.size()); + } else { int len = snprintf(buffer, 256, "Invalid command\n"); n = write(accepted_sock, buffer, len); @@ -303,12 +318,12 @@ end_serverthread: void InputStat::registerAtServer() { - global_stats->registerInput(this); + mgmt_server->registerInput(this); } InputStat::~InputStat() { - global_stats->unregisterInput(m_name); + mgmt_server->unregisterInput(m_name); } std::string InputStat::encodeValuesJSON() diff --git a/src/StatsServer.h b/src/ManagementServer.h index 26f90d4..fa3f170 100644 --- a/src/StatsServer.h +++ b/src/ManagementServer.h @@ -2,17 +2,20 @@ Copyright (C) 2009 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) - Copyright (C) 2014 Matthias P. Braendli - http://mpb.li + Copyright (C) 2014, 2015 + Matthias P. Braendli, matthias.braendli@mpb.li + + http://www.opendigitalradio.org A TCP Socket server that serves state information and statistics for - monitoring purposes. + monitoring purposes, and also serves the internal configuration + property tree. - This server is very easy to integrate with munin + This statistics server is very easy to integrate with munin http://munin-monitoring.org/ but is not specific to it. - The TCP Server responds in JSON, and accepts two commands: + The TCP Server responds in JSON, and accepts the commands: - config - values Inspired by the munin equivalent @@ -20,6 +23,10 @@ - state Returns the state of each input + - getptree + Returns the internal boost property_tree that contains the + multiplexer configuration DB. + */ /* This file is part of ODR-DabMux. @@ -38,8 +45,8 @@ along with ODR-DabMux. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef __STATS_SERVER_H -#define __STATS_SERVER_H +#ifndef __MANAGEMENT_SERVER_H +#define __MANAGEMENT_SERVER_H #ifdef HAVE_CONFIG_H # include "config.h" @@ -54,6 +61,8 @@ #include <string> #include <map> #include <boost/thread.hpp> +#include <boost/property_tree/ptree.hpp> +#include <boost/property_tree/json_parser.hpp> #include <ctime> #include <math.h> @@ -304,37 +313,57 @@ class InputStat }; -class StatsServer +class ManagementServer { public: - StatsServer() : + ManagementServer() : m_listenport(0), m_running(false), - m_fault(false) + m_fault(false), + m_pending(false) { } - StatsServer(int listen_port) : + ManagementServer(int listen_port) : m_listenport(listen_port), m_running(false), m_fault(false), - m_thread(&StatsServer::serverThread, this) + m_thread(&ManagementServer::serverThread, this), + m_pending(false) { m_sock = 0; } - ~StatsServer() + ~ManagementServer() { m_running = false; m_fault = false; + m_pending = false; if (m_sock) { close(m_sock); } m_thread.join(); } + /* Un-/Register a statistics data source */ void registerInput(InputStat* is); void unregisterInput(std::string id); + /* Ask if there is a configuration request pending */ + bool request_pending() { return m_pending; } + + /* Update the copy of the configuration property tree and notify the + * update to the internal server thread. + */ + void update_ptree(const boost::property_tree::ptree& pt) { + if (m_running) { + boost::unique_lock<boost::mutex> lock(m_configmutex); + m_pt = pt; + m_pending = false; + + m_condition.notify_one(); + } + } + bool fault_detected() { return m_fault; } void restart(void); @@ -343,7 +372,7 @@ class StatsServer /******* TCP Socket Server ******/ // no copying (because of the thread) - StatsServer(const StatsServer& other); + ManagementServer(const ManagementServer& other); void serverThread(void); @@ -367,7 +396,7 @@ class StatsServer * * returns: a JSON encoded configuration */ - std::string getConfigJSON(); + std::string getStatConfigJSON(); /* Return the values for the statistics as defined in the configuration * @@ -382,11 +411,17 @@ class StatsServer std::string getStateJSON(); // mutex for accessing the map - mutable boost::mutex m_mutex; -}; + mutable boost::mutex m_statsmutex; + + /******** Configuration Data *******/ + bool m_pending; + boost::condition_variable m_condition; + mutable boost::mutex m_configmutex; + boost::property_tree::ptree m_pt; +}; -extern StatsServer* global_stats; +extern ManagementServer* mgmt_server; #endif diff --git a/src/dabInputZmq.cpp b/src/dabInputZmq.cpp index 9dab6c9..9d39945 100644 --- a/src/dabInputZmq.cpp +++ b/src/dabInputZmq.cpp @@ -41,7 +41,6 @@ #include "dabInput.h" #include "dabInputZmq.h" -#include "StatsServer.h" #include "PcDebug.h" #ifdef HAVE_CONFIG_H @@ -66,8 +65,6 @@ using namespace std; -extern StatsServer* global_stats; - int readkey(string& keyfile, char* key) { int fd = open(keyfile.c_str(), O_RDONLY); diff --git a/src/dabInputZmq.h b/src/dabInputZmq.h index fd6c599..d13029d 100644 --- a/src/dabInputZmq.h +++ b/src/dabInputZmq.h @@ -55,7 +55,7 @@ #include <stdint.h> #include "zmq.hpp" #include "dabInput.h" -#include "StatsServer.h" +#include "ManagementServer.h" /* The frame_buffer contains DAB logical frames as defined in * TS 102 563, section 6. |