SRS-control 0.1.4
 
Loading...
Searching...
No Matches
Handler.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <chrono>
5#include <span>
6
7#include <boost/asio/awaitable.hpp>
8#include <boost/asio/steady_timer.hpp>
9#include <gsl/gsl-lite.hpp>
10#include <spdlog/logger.h>
11
13
14namespace srs
15{
16 class App;
17}
18
19namespace srs::workflow
20{
21 class Handler;
22
24 {
25 public:
26 explicit DataMonitor(Handler* processor, io_context_type* io_context);
27 void show_data_speed(bool val = true) { is_shown_ = val; }
28 void set_display_period(std::chrono::milliseconds duration) { period_ = duration; }
29 void start();
30 void stop();
31 void update(const StructData& data_struct) {}
33
34 // getters:
35 [[nodiscard]] auto get_received_bytes_MBps() const -> double { return current_received_bytes_MBps_.load(); }
36 [[nodiscard]] auto get_processed_hit_rate() const -> double { return current_hits_ps_.load(); }
37
38 private:
39 bool is_shown_ = true;
40 gsl::not_null<Handler*> processor_;
41 gsl::not_null<io_context_type*> io_context_;
42 std::shared_ptr<spdlog::logger> console_;
43 asio::steady_timer clock_;
44 std::atomic<uint64_t> last_read_data_bytes_ = 0;
45 std::atomic<uint64_t> last_processed_hit_num_ = 0;
46 std::chrono::time_point<std::chrono::steady_clock> last_print_time_ = std::chrono::steady_clock::now();
47 std::chrono::milliseconds period_ = common::DEFAULT_DISPLAY_PERIOD;
48 std::atomic<double> current_received_bytes_MBps_;
49 std::atomic<double> current_hits_ps_;
50 std::string speed_string_;
51
52 void set_speed_string(double speed_MBps);
53 auto print_cycle() -> asio::awaitable<void>;
54 };
55
56 class Handler
57 {
58 public:
59 explicit Handler(App* control);
60
61 Handler(const Handler&) = delete;
62 Handler(Handler&&) = delete;
63 Handler& operator=(const Handler&) = delete;
65 ~Handler();
66
67 // From socket interface. Need to be fast return
68 void read_data_once(std::span<BufferElementType> read_data);
69
70 void abort() { data_queue_.abort(); }
71
72 void start(bool is_blocking);
73
74 // getters:
75 [[nodiscard]] auto get_read_data_bytes() const -> uint64_t { return total_read_data_bytes_.load(); }
76 [[nodiscard]] auto get_processed_hit_number() const -> uint64_t { return total_processed_hit_numer_.load(); }
77 // [[nodiscard]] auto get_export_data() -> auto& { return struct_serializer.get_output_data(); }
78 [[nodiscard]] auto get_data_monitor() const -> const auto& { return monitor_; }
79 [[nodiscard]] auto get_app() -> auto& { return *app_; }
80
81 // setters:
83 void set_show_data_speed(bool val = true) { monitor_.show_data_speed(val); }
84 void set_monitor_display_period(std::chrono::milliseconds duration) { monitor_.set_display_period(duration); }
85 void set_output_filenames(const std::vector<std::string>& filenames)
86 {
87 data_processes_.set_output_filenames(filenames);
88 }
89
90 void stop();
91
92 private:
93 using enum common::DataPrintMode;
94
95 std::atomic<bool> is_stopped_{ false };
96 std::size_t received_data_size_{};
98 std::atomic<uint64_t> total_read_data_bytes_ = 0;
99 std::atomic<uint64_t> total_processed_hit_numer_ = 0;
100 gsl::not_null<App*> app_;
102
103 // Data buffer
104 tbb::concurrent_bounded_queue<process::SerializableMsgBuffer> data_queue_;
106
107 // should run on a different task
108 void analysis_loop(bool is_blocking);
109 void update_monitor();
111 void print_data();
113 };
114
115} // namespace srs::workflow
void update(const StructData &data_struct)
Definition Handler.hpp:31
std::atomic< double > current_hits_ps_
Definition Handler.hpp:49
void set_display_period(std::chrono::milliseconds duration)
Definition Handler.hpp:28
std::chrono::milliseconds period_
Definition Handler.hpp:47
std::chrono::time_point< std::chrono::steady_clock > last_print_time_
Definition Handler.hpp:46
std::atomic< uint64_t > last_processed_hit_num_
Definition Handler.hpp:45
asio::steady_timer clock_
Definition Handler.hpp:43
auto get_processed_hit_rate() const -> double
Definition Handler.hpp:36
gsl::not_null< Handler * > processor_
Definition Handler.hpp:40
std::atomic< uint64_t > last_read_data_bytes_
Definition Handler.hpp:44
DataMonitor(Handler *processor, io_context_type *io_context)
Definition Handler.cpp:13
void show_data_speed(bool val=true)
Definition Handler.hpp:27
std::shared_ptr< spdlog::logger > console_
Definition Handler.hpp:42
auto print_cycle() -> asio::awaitable< void >
Definition Handler.cpp:20
auto get_received_bytes_MBps() const -> double
Definition Handler.hpp:35
gsl::not_null< io_context_type * > io_context_
Definition Handler.hpp:41
void set_speed_string(double speed_MBps)
Definition Handler.cpp:56
std::atomic< double > current_received_bytes_MBps_
Definition Handler.hpp:48
void read_data_once(std::span< BufferElementType > read_data)
Definition Handler.cpp:113
std::size_t received_data_size_
Definition Handler.hpp:96
tbb::concurrent_bounded_queue< process::SerializableMsgBuffer > data_queue_
Definition Handler.hpp:104
void set_monitor_display_period(std::chrono::milliseconds duration)
Definition Handler.hpp:84
auto get_app() -> auto &
Definition Handler.hpp:79
std::atomic< uint64_t > total_read_data_bytes_
Definition Handler.hpp:98
Handler(const Handler &)=delete
void start(bool is_blocking)
Definition Handler.cpp:84
auto get_processed_hit_number() const -> uint64_t
Definition Handler.hpp:76
auto get_data_monitor() const -> const auto &
Definition Handler.hpp:78
Handler & operator=(Handler &&)=delete
Handler(App *control)
Definition Handler.cpp:77
Handler & operator=(const Handler &)=delete
std::atomic< uint64_t > total_processed_hit_numer_
Definition Handler.hpp:99
gsl::not_null< App * > app_
Definition Handler.hpp:100
Handler(Handler &&)=delete
common::DataPrintMode print_mode_
Definition Handler.hpp:97
std::atomic< bool > is_stopped_
Definition Handler.hpp:95
TaskDiagram data_processes_
Definition Handler.hpp:105
auto get_read_data_bytes() const -> uint64_t
Definition Handler.hpp:75
void set_output_filenames(const std::vector< std::string > &filenames)
Definition Handler.hpp:85
void set_print_mode(common::DataPrintMode mode)
Definition Handler.hpp:82
void set_show_data_speed(bool val=true)
Definition Handler.hpp:83
void analysis_loop(bool is_blocking)
Definition Handler.cpp:123
asio::thread_pool io_context_type
constexpr auto DEFAULT_DISPLAY_PERIOD