ddt 1.2.1
Loading...
Searching...
No Matches
ddtMonitorSamplesDialog.hpp
Go to the documentation of this file.
1
20#ifndef DDT_DATAVISUALISATION_DDTDIALOGS_MONITORSAMPLES_HPP
21#define DDT_DATAVISUALISATION_DDTDIALOGS_MONITORSAMPLES_HPP
22
23#include <iomanip>
24#include <iostream>
25#include <optional>
26#include <QtWidgets>
27
28#include <boost/accumulators/accumulators.hpp>
29#include <boost/accumulators/statistics/rolling_mean.hpp>
30#include <boost/accumulators/statistics/stats.hpp>
31
34#include "qpushbutton.h"
35
36
43public:
48 m_accumulator(boost::accumulators::tag::rolling_window::window_size = 10), m_last() {
49 };
50
54 void Reset() {
55 m_accumulator = boost::accumulators::accumulator_set<double, boost::accumulators::stats<boost::accumulators::tag::rolling_mean>>(
56 boost::accumulators::tag::rolling_window::window_size = 10);
57 m_last.reset();
58 };
59
66 std::optional<float> UpdateSamples(unsigned int counter, std::chrono::system_clock::time_point ts) {
67 std::optional<float> res;
68
69 if (m_last.has_value()) {
70 if (m_last->first != counter) {
71 using Duration = std::chrono::duration<double>;
72 auto duration_sec = std::chrono::duration_cast<Duration>(ts - m_last->second);
73 auto samples_per_sec = static_cast<double>(counter - m_last->first) / duration_sec.count();
74
75 m_accumulator(samples_per_sec);
76 m_last.emplace(counter, ts);
77 }
78
79 res = boost::accumulators::rolling_mean(m_accumulator);
80 } else {
81 m_last.emplace(counter, ts);
82 }
83
84 return res;
85 };
86
92 std::pair<float, char const*> ReadableByteSize(std::optional<float> num_bytes) {
93 float ret = num_bytes.value_or(0.0);
94 size_t num = 0;
95
96 while (ret > 1024.0) {
97 ret /= 1024.0;
98 num++;
99 }
100
101 switch (num) {
102 case 1:
103 return {ret, " kib"};
104 case 2:
105 return {ret, " Mib"};
106 case 3:
107 return {ret, " Gib"};
108 case 4:
109 return {ret, " Tib"};
110 case 5:
111 return {ret, " Pib"};
112 case 6:
113 return {ret, " Eib"};
114 case 0:
115 [[fallthrough]];
116 default:
117 return {ret, " b"};
118 }
119 };
120
121private:
122 boost::accumulators::accumulator_set<double, boost::accumulators::stats<boost::accumulators::tag::rolling_mean>> m_accumulator;
123 std::optional<std::pair<unsigned int, std::chrono::system_clock::time_point>> m_last;
124};
125
126
132 Q_OBJECT
133
134public:
139 explicit ddtMonitorSamplesDialog(QWidget* parent = nullptr);
140
144 virtual ~ddtMonitorSamplesDialog() = default;
145
152 void SetInitialParameter(const QString parameter_id,
153 const QVariant parameter) override;
154
160 void SetChangedParameter(const QString param_id,
161 const QVariant parameter) override;
162
167 QString GetDialogName() override;
168
169protected:
173 virtual void CreateDialog() override;
174
175 void closeEvent(QCloseEvent *event) override;
176
177private:
178 QLineEdit* linedit_queue_capacity;
179 QLineEdit* linedit_originating_broker;
180 QLineEdit* linedit_frequency;
181 QLineEdit* linedit_throughput;
182 QLineEdit* linedit_latency;
183 QLineEdit* linedit_samples_count;
184 QLineEdit* linedit_number_subscribers;
185 QLineEdit* linedit_last_sample;
186
187 QPushButton* pushbutton_toggle_on;
188 QPushButton* pushbutton_toggle_off;
189
190 SamplesAccumulator samples_stat;
191 SamplesAccumulator bytes_stat;
192 SamplesAccumulator latency_stat;
193
194 bool monitor_on_off_flag;
195
196 /*
197 * Add connections ot respective widgets from current dialog
198 */
199 void ConnectWidgets();
200};
201
202#endif // DDT_DATAVISUALISATION_DDTDIALOGS_MONITORSAMPLES_HPP
Definition ddtDialog.hpp:27
Definition ddtMonitorSamplesDialog.hpp:42
void Reset()
Definition ddtMonitorSamplesDialog.hpp:54
std::pair< float, char const * > ReadableByteSize(std::optional< float > num_bytes)
Definition ddtMonitorSamplesDialog.hpp:92
SamplesAccumulator()
Definition ddtMonitorSamplesDialog.hpp:47
std::optional< float > UpdateSamples(unsigned int counter, std::chrono::system_clock::time_point ts)
Definition ddtMonitorSamplesDialog.hpp:66
Definition ddtMonitorSamplesDialog.hpp:131
virtual ~ddtMonitorSamplesDialog()=default
void SetChangedParameter(const QString param_id, const QVariant parameter) override
Definition ddtMonitorSamplesDialog.cpp:174
QString GetDialogName() override
Definition ddtMonitorSamplesDialog.cpp:137
virtual void CreateDialog() override
Definition ddtMonitorSamplesDialog.cpp:47
void SetInitialParameter(const QString parameter_id, const QVariant parameter) override
Definition ddtMonitorSamplesDialog.cpp:141
ddtMonitorSamplesDialog(QWidget *parent=nullptr)
Definition ddtMonitorSamplesDialog.cpp:31
void closeEvent(QCloseEvent *event) override
Definition ddtMonitorSamplesDialog.cpp:37
DDT Dialog IDs. ID values for all used dialogs. IDs for the used dialogs.
DDT Dialogs. Base class for the DDT dialogs. Base class for the DDT dialogs.