2
3
6
7
8
9
10
11
13#include <so_5/stats/impl/std_controller.hpp>
15#include <so_5/stats/messages.hpp>
17#include <so_5/send_functions.hpp>
38std_controller_t::
mbox()
const
46 std::lock_guard< std::mutex > lock{ m_start_stop_lock };
48 if( !m_distribution_thread )
52 m_distribution_thread.reset(
53 new std::thread( [
this] { body(); } ) );
60 std::lock_guard< std::mutex > lock{ m_start_stop_lock };
62 if( m_distribution_thread )
66 std::lock_guard< std::mutex > cond_lock{ m_data_lock };
69 m_wake_up_cond.notify_one();
73 m_distribution_thread->join();
77 m_distribution_thread.reset();
85 std::lock_guard< std::mutex > lock{ m_data_lock };
87 auto ret_value = m_distribution_period;
89 m_distribution_period = period;
97 std::lock_guard< std::mutex > lock{ m_data_lock };
105 std::lock_guard< std::mutex > lock{ m_data_lock };
115 std::unique_lock< std::mutex > lock{ m_data_lock };
120 const auto actual_duration = distribute_current_data();
122 if( actual_duration < m_distribution_period )
124 m_wake_up_cond.wait_for(
126 m_distribution_period - actual_duration );
133 auto started_at = std::chrono::steady_clock::now();
135 send< so_5::stats::messages::distribution_started >( m_mbox );
140 s->distribute( m_mbox );
145 send< so_5::stats::messages::distribution_finished >( m_mbox );
147 return std::chrono::steady_clock::now() - started_at;
void body()
Main body of data distribution thread.
std_controller_t(mbox_t mbox)
source_t * m_tail
Tail of data sources list.
std::chrono::steady_clock::duration distribute_current_data()
Initiates distribution of current values for all data sources.
virtual void add(source_t &what) override
Registration of new data source.
virtual const mbox_t & mbox() const override
Get the mbox for receiving monitoring information.
virtual void remove(source_t &what) noexcept override
Deregistration of previously registered data source.
bool m_shutdown_initiated
Shutdown signal.
virtual void turn_on() override
Turn the monitoring on.
virtual void turn_off() override
Turn the monitoring off.
source_t * m_head
Head of data sources list.
virtual std::chrono::steady_clock::duration set_distribution_period(std::chrono::steady_clock::duration period) override
Set distribution period.
static source_t * source_list_next(const source_t &what) noexcept
Helper method for accessing next data source in the list.
static void source_list_add(source_t &what, source_t *&head, source_t *&tail) noexcept
Helper method for adding data source to existing list.
static void source_list_remove(source_t &what, source_t *&head, source_t *&tail) noexcept
Helper method for removing data source from existing list.
An interface of data source.
Internal implementation of run-time monitoring and statistics related stuff.
All stuff related to run-time monitoring and statistics.
Private part of message limit implementation.