1 /*
2 SPDX-FileCopyrightText: 2007 Krzysztof Kundzicz <athantor@gmail.com>
3 SPDX-License-Identifier: GPL-2.0-or-later
4 */
5
6 #include <ConnsTabPage.h>
7
8 namespace kt
9 {
10
ConnsTabPage(QWidget * p)11 ConnsTabPage::ConnsTabPage(QWidget* p) : PluginPage(p), pmConnsUi(new Ui::ConnsWgt), pmLhrSwnUuid(QUuid::createUuid()),
12 pmSesSwnUuid(QUuid::createUuid())
13 {
14
15 if (StatsPluginSettings::widgetType() == 0) {
16 pmConnsChtWgt = new PlainChartDrawer(this);
17 pmDhtChtWgt = new PlainChartDrawer(this);
18 } else if (StatsPluginSettings::widgetType() == 1) {
19 pmConnsChtWgt = new KPlotWgtDrawer(this);
20 pmDhtChtWgt = new KPlotWgtDrawer(this);
21 }
22
23 setupUi();
24 }
25
~ConnsTabPage()26 ConnsTabPage::~ConnsTabPage()
27 {
28 }
29
30
setupUi()31 void ConnsTabPage::setupUi()
32 {
33 pmConnsUi->setupUi(this);
34
35 pmConnsChtWgt->setUnitName(i18n("Connections"));
36 pmDhtChtWgt->setUnitName(i18n("Nodes"));
37
38 pmConnsUi->ConnsGbw->layout()->addWidget(dynamic_cast<QWidget*>(pmConnsChtWgt));
39 pmConnsUi->DhtGbw->layout()->addWidget(dynamic_cast<QWidget*>(pmDhtChtWgt));
40
41 //------------------
42 pmConnsChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Leechers connected"), QPen(StatsPluginSettings::cnLConnColor()), true));
43 //
44
45 if (StatsPluginSettings::showLeechersInSwarms()) {
46 pmConnsChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Leechers in swarms"), QPen(StatsPluginSettings::cnLSwarmsColor()), true, pmLhrSwnUuid));
47 }
48
49 //
50 pmConnsChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Seeds connected"), QPen(StatsPluginSettings::cnSConnColor()), true));
51
52 //
53 if (StatsPluginSettings::showSeedsInSwarms()) {
54 pmConnsChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Seeds in swarms"), QPen(StatsPluginSettings::cnSSwarmsColor()), true, pmSesSwnUuid));
55 }
56
57 //
58 pmConnsChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Average leechers connected per torrent"), QPen(StatsPluginSettings::cnAvgLConnPerTorrColor()), true));
59
60 //
61 pmConnsChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Average seeds connected per torrent"), QPen(StatsPluginSettings::cnAvgSConnPerTorrColor()), true));
62
63 //
64 pmConnsChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Average leechers connected per running torrent"), QPen(StatsPluginSettings::cnAvgLConnPerRunTorrColor()), true));
65
66 //
67 pmConnsChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Average seeds connected per running torrent"), QPen(StatsPluginSettings::cnAvgSConnPerRunTorrColor()), true));
68
69 //--------------------------
70
71 if (bt::Globals::instance().getDHT().isRunning()) {
72 pmDhtChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Nodes"), QPen(StatsPluginSettings::dhtNodesColor()), true));
73 pmDhtChtWgt->addDataSet(ChartDrawerData(i18nc("Name of a line on chart", "Tasks"), QPen(StatsPluginSettings::dhtTasksColor()), true));
74 } else {
75 pmConnsUi->DhtGbw->setEnabled(false);
76 }
77
78 applySettings();
79 }
80
applySettings()81 void ConnsTabPage::applySettings()
82 {
83
84 pmConnsChtWgt->enableAntiAlias(StatsPluginSettings::antiAliasing());
85 pmDhtChtWgt->enableAntiAlias(StatsPluginSettings::antiAliasing());
86
87 pmConnsChtWgt->enableBackgroundGrid(StatsPluginSettings::drawBgdGrid());
88 pmDhtChtWgt->enableBackgroundGrid(StatsPluginSettings::drawBgdGrid());
89
90
91 //-------
92
93 if (StatsPluginSettings::showLeechersInSwarms() && (pmConnsChtWgt->findUuidInSet(pmLhrSwnUuid) == -1)) {
94 pmConnsChtWgt->insertDataSet(1, ChartDrawerData(i18nc("Name of a line on chart", "Leechers in swarms"), QPen(StatsPluginSettings::cnLSwarmsColor()), true, pmLhrSwnUuid));
95 }
96
97 if ((!StatsPluginSettings::showLeechersInSwarms()) && (pmConnsChtWgt->findUuidInSet(pmLhrSwnUuid) != -1)) {
98 pmConnsChtWgt->removeDataSet(1);
99 }
100
101 //~
102
103 if (StatsPluginSettings::showSeedsInSwarms() && (pmConnsChtWgt->findUuidInSet(pmSesSwnUuid) == -1)) {
104 if ((pmConnsChtWgt->findUuidInSet(pmLhrSwnUuid) == -1)) {
105 pmConnsChtWgt->insertDataSet(2, ChartDrawerData(i18nc("Name of a line on chart", "Seeds in swarms"), QPen(StatsPluginSettings::cnSSwarmsColor()), true, pmSesSwnUuid));
106 } else {
107 pmConnsChtWgt->insertDataSet(3, ChartDrawerData(i18nc("Name of a line on chart", "Seeds in swarms"), QPen(StatsPluginSettings::cnSSwarmsColor()), true, pmSesSwnUuid));
108 }
109 }
110
111 if ((!StatsPluginSettings::showSeedsInSwarms()) && (pmConnsChtWgt->findUuidInSet(pmSesSwnUuid) != -1)) {
112 if ((pmConnsChtWgt->findUuidInSet(pmLhrSwnUuid) == -1)) {
113 pmConnsChtWgt->removeDataSet(2);
114 } else {
115 pmConnsChtWgt->removeDataSet(3);
116 }
117 }
118
119 //-------------
120
121 uint8_t s1, s2;
122
123 s1 = s2 = 1;
124
125 pmConnsChtWgt->setPen(0, QPen(StatsPluginSettings::cnLConnColor()));
126
127 if (StatsPluginSettings::showLeechersInSwarms()) {
128 pmConnsChtWgt->setPen(1, QPen(StatsPluginSettings::cnLSwarmsColor()));
129 s1 = 0;
130 }
131
132 pmConnsChtWgt->setPen(2 - s1, QPen(StatsPluginSettings::cnSConnColor()));
133
134 if (StatsPluginSettings::showSeedsInSwarms()) {
135 pmConnsChtWgt->setPen(3 - s1, QPen(StatsPluginSettings::cnSSwarmsColor()));
136 s2 = 0;
137 }
138
139 pmConnsChtWgt->setPen(4 - (s1 + s2), QPen(StatsPluginSettings::cnAvgLConnPerTorrColor()));
140
141 pmConnsChtWgt->setPen(5 - (s1 + s2), QPen(StatsPluginSettings::cnAvgSConnPerTorrColor()));
142 pmConnsChtWgt->setPen(6 - (s1 + s2), QPen(StatsPluginSettings::cnAvgLConnPerRunTorrColor()));
143 pmConnsChtWgt->setPen(7 - (s1 + s2), QPen(StatsPluginSettings::cnAvgSConnPerRunTorrColor()));
144
145 pmDhtChtWgt->setPen(0, QPen(StatsPluginSettings::dhtNodesColor()));
146 pmDhtChtWgt->setPen(1, QPen(StatsPluginSettings::dhtTasksColor()));
147
148 //--------------------------------------------------------------------------------------------------------------------
149
150 pmConnsChtWgt->setXMax(StatsPluginSettings::connsSamples());
151
152 if (bt::Globals::instance().getDHT().isRunning()) {
153 if (! dynamic_cast<QWidget*>(pmDhtChtWgt)->isEnabled()) {
154 pmConnsUi->DhtGbw->setEnabled(true);
155 }
156
157 pmDhtChtWgt->setXMax(StatsPluginSettings::dhtSpdSamples());
158
159 } else {
160 pmConnsUi->DhtGbw->setEnabled(false);
161 }
162
163 pmConnsChtWgt->setXMax(StatsPluginSettings::connsSamples());
164
165 pmDhtChtWgt->setXMax(StatsPluginSettings::dhtSpdSamples());
166
167 pmConnsChtWgt->setMaxMode(static_cast<PlainChartDrawer::MaxMode>(StatsPluginSettings::maxMode()));
168 pmDhtChtWgt->setMaxMode(static_cast<PlainChartDrawer::MaxMode>(StatsPluginSettings::maxMode()));
169 }
170
updateAllCharts()171 void ConnsTabPage::updateAllCharts()
172 {
173 pmConnsChtWgt->update();
174
175 if (dynamic_cast<QWidget*>(pmDhtChtWgt)->isEnabled()) {
176 pmDhtChtWgt->update();
177 }
178 }
179
gatherData(Plugin * pPlug)180 void ConnsTabPage::gatherData(Plugin* pPlug)
181 {
182
183 GatherConnStats(pPlug);
184
185 if (pmConnsUi->DhtGbw->isEnabled()) {
186 GatherDhtStats();
187 }
188 }
189
resetAvg(ChartDrawer *)190 void ConnsTabPage::resetAvg(ChartDrawer*)
191 {
192 }
193
GatherDhtStats()194 void ConnsTabPage::GatherDhtStats()
195 {
196 const dht::Stats st = bt::Globals::instance().getDHT().getStats();
197
198 pmDhtChtWgt->addValue(0, st.num_peers);
199 pmDhtChtWgt->addValue(1, st.num_tasks);
200 }
201
GatherConnStats(Plugin * pPlug)202 void ConnsTabPage::GatherConnStats(Plugin* pPlug)
203 {
204 QueueManager* qm_iface = pPlug->getCore()->getQueueManager();
205
206 if (qm_iface == nullptr) {
207 return;
208 }
209
210 uint_least32_t lc, ls, sc, ss, tc, rtc;
211
212 lc = ls = sc = ss = tc = rtc = 0;
213
214 for (QList< bt::TorrentInterface*>::iterator it = qm_iface->begin(); it != qm_iface->end(); it++) {
215 const bt::TorrentStats& tstat = (*it)->getStats();
216
217 lc += tstat.leechers_connected_to;
218 ls += tstat.leechers_total;
219 sc += tstat.seeders_connected_to;
220 ss += tstat.seeders_total;
221
222 tc++;
223
224 if (tstat.running) {
225 rtc++;
226 }
227 }
228
229 uint8_t s1, s2;
230
231 s1 = s2 = 1;
232
233 pmConnsChtWgt->addValue(0, lc);
234
235 if (StatsPluginSettings::showLeechersInSwarms()) {
236 pmConnsChtWgt->addValue(1, ls);
237 s1 = 0;
238 }
239
240 pmConnsChtWgt->addValue(2 - s1, sc);
241
242 if (StatsPluginSettings::showSeedsInSwarms()) {
243 pmConnsChtWgt->addValue(3 - s1, ss);
244 s2 = 0;
245 }
246
247 if (tc == 0) {
248 pmConnsChtWgt->addValue(4 - (s1 + s2), 0);
249 pmConnsChtWgt->addValue(5 - (s1 + s2), 0);
250 } else {
251 pmConnsChtWgt->addValue(4 - (s1 + s2), static_cast<double>(lc) / static_cast<double>(tc));
252 pmConnsChtWgt->addValue(5 - (s1 + s2), static_cast<double>(sc) / static_cast<double>(tc));
253 }
254
255 if (rtc == 0) {
256 pmConnsChtWgt->addValue(6 - (s1 + s2), 0);
257 pmConnsChtWgt->addValue(7 - (s1 + s2), 0);
258 } else {
259 pmConnsChtWgt->addValue(6 - (s1 + s2), static_cast<double>(lc) / static_cast<double>(rtc));
260 pmConnsChtWgt->addValue(7 - (s1 + s2), static_cast<double>(sc) / static_cast<double>(rtc));
261 }
262 }
263
264 } //ns end
265