/****************************************************************************** * File: metrics_hub.h * Description: Centralizes metrics interfaces to allow different metrics clients * to get metrics *****************************************************************************/ #ifndef METRICS_HUB_H #define METRICS_HUB_H #include #include "srslte/common/threads.h" namespace srslte { template class metrics_interface { public: virtual bool get_metrics(metrics_t &m) = 0; }; template class metrics_listener { public: virtual void set_metrics(metrics_t &m, float report_period_secs=1.0) = 0; }; template class metrics_hub : public periodic_thread { public: bool init(metrics_interface *m_, float report_period_secs=1.0) { m = m_; start_periodic(report_period_secs*1e6); return true; } void stop() { thread_cancel(); wait_thread_finish(); } void add_listener(metrics_listener *listener) { listeners.push_back(listener); } private: void run_period() { metrics_t metric; bzero(&metric, sizeof(metrics_t)); m->get_metrics(metric); for (uint32_t i=0;iset_metrics(metric); } } metrics_interface *m; std::vector*> listeners; }; } // namespace srslte #endif // METRICS_HUB_H