ddt 1.4.0
 
Loading...
Searching...
No Matches
ddtMonitorSamplesDialog.hpp
Go to the documentation of this file.
1
10
11#ifndef DDT_DATAVISUALISATION_DDTDIALOGS_MONITORSAMPLES_HPP
12#define DDT_DATAVISUALISATION_DDTDIALOGS_MONITORSAMPLES_HPP
13
14#include <iomanip>
15#include <iostream>
16#include <optional>
17#include <QtWidgets>
18
19#include <boost/accumulators/accumulators.hpp>
20#include <boost/accumulators/statistics/rolling_mean.hpp>
21#include <boost/accumulators/statistics/stats.hpp>
22
25#include "qpushbutton.h"
26
27
34public:
39 m_accumulator(boost::accumulators::tag::rolling_window::window_size = 10), m_last() {
40 };
41
45 void Reset() {
46 m_accumulator = boost::accumulators::accumulator_set<double, boost::accumulators::stats<boost::accumulators::tag::rolling_mean>>(
47 boost::accumulators::tag::rolling_window::window_size = 10);
48 m_last.reset();
49 };
50
57 std::optional<float> UpdateSamples(unsigned int counter, std::chrono::system_clock::time_point ts) {
58 std::optional<float> res;
59
60 if (m_last.has_value()) {
61 if (m_last->first != counter) {
62 using Duration = std::chrono::duration<double>;
63 auto duration_sec = std::chrono::duration_cast<Duration>(ts - m_last->second);
64 auto samples_per_sec = static_cast<double>(counter - m_last->first) / duration_sec.count();
65
66 m_accumulator(samples_per_sec);
67 m_last.emplace(counter, ts);
68 }
69
70 res = boost::accumulators::rolling_mean(m_accumulator);
71 } else {
72 m_last.emplace(counter, ts);
73 }
74
75 return res;
76 };
77
83 std::pair<float, char const*> ReadableByteSize(std::optional<float> num_bytes) {
84 float ret = num_bytes.value_or(0.0);
85 size_t num = 0;
86
87 while (ret > 1024.0) {
88 ret /= 1024.0;
89 num++;
90 }
91
92 switch (num) {
93 case 1:
94 return {ret, " kib"};
95 case 2:
96 return {ret, " Mib"};
97 case 3:
98 return {ret, " Gib"};
99 case 4:
100 return {ret, " Tib"};
101 case 5:
102 return {ret, " Pib"};
103 case 6:
104 return {ret, " Eib"};
105 case 0:
106 [[fallthrough]];
107 default:
108 return {ret, " b"};
109 }
110 };
111
112private:
113 boost::accumulators::accumulator_set<double, boost::accumulators::stats<boost::accumulators::tag::rolling_mean>> m_accumulator;
114 std::optional<std::pair<unsigned int, std::chrono::system_clock::time_point>> m_last;
115};
116
117
123 Q_OBJECT
124
125public:
130 explicit ddtMonitorSamplesDialog(QWidget* parent = nullptr);
131
135 virtual ~ddtMonitorSamplesDialog() = default;
136
143 void SetInitialParameter(const QString parameter_id,
144 const QVariant parameter) override;
145
151 void SetChangedParameter(const QString param_id,
152 const QVariant parameter) override;
153
158 QString GetDialogName() override;
159
160protected:
164 virtual void CreateDialog() override;
165
166 void closeEvent(QCloseEvent *event) override;
167
168private:
169 QLineEdit* linedit_queue_capacity;
170 QLineEdit* linedit_originating_broker;
171 QLineEdit* linedit_frequency;
172 QLineEdit* linedit_throughput;
173 QLineEdit* linedit_latency;
174 QLineEdit* linedit_samples_count;
175 QLineEdit* linedit_number_subscribers;
176 QLineEdit* linedit_last_sample;
177
178 QPushButton* pushbutton_toggle_on;
179 QPushButton* pushbutton_toggle_off;
180
181 SamplesAccumulator samples_stat;
182 SamplesAccumulator bytes_stat;
183 SamplesAccumulator latency_stat;
184
185 bool monitor_on_off_flag;
186
187 /*
188 * Add connections ot respective widgets from current dialog
189 */
190 void ConnectWidgets();
191};
192
193#endif // DDT_DATAVISUALISATION_DDTDIALOGS_MONITORSAMPLES_HPP
DdtDialog(QWidget *parent=nullptr)
Definition ddtDialog.cpp:16
Definition ddtMonitorSamplesDialog.hpp:33
void Reset()
Definition ddtMonitorSamplesDialog.hpp:45
std::pair< float, char const * > ReadableByteSize(std::optional< float > num_bytes)
Definition ddtMonitorSamplesDialog.hpp:83
SamplesAccumulator()
Definition ddtMonitorSamplesDialog.hpp:38
std::optional< float > UpdateSamples(unsigned int counter, std::chrono::system_clock::time_point ts)
Definition ddtMonitorSamplesDialog.hpp:57
virtual ~ddtMonitorSamplesDialog()=default
void SetChangedParameter(const QString param_id, const QVariant parameter) override
Definition ddtMonitorSamplesDialog.cpp:165
QString GetDialogName() override
Definition ddtMonitorSamplesDialog.cpp:128
virtual void CreateDialog() override
Definition ddtMonitorSamplesDialog.cpp:38
void SetInitialParameter(const QString parameter_id, const QVariant parameter) override
Definition ddtMonitorSamplesDialog.cpp:132
ddtMonitorSamplesDialog(QWidget *parent=nullptr)
Definition ddtMonitorSamplesDialog.cpp:22
void closeEvent(QCloseEvent *event) override
Definition ddtMonitorSamplesDialog.cpp:28
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.