From 53a2925a2c6a0c1a813325bac1233401578fb4ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 5 Sep 2018 18:58:19 +0200 Subject: [PATCH] Update server statistics and add total count --- libnymea-remoteproxy/engine.cpp | 2 +- libnymea-remoteproxy/proxyserver.cpp | 39 ++++++++++++++++++++++++++++ libnymea-remoteproxy/proxyserver.h | 13 +++++++++- monitor/monitor.cpp | 4 ++- monitor/monitorclient.cpp | 1 - monitor/terminalwindow.cpp | 5 +++- 6 files changed, 59 insertions(+), 5 deletions(-) diff --git a/libnymea-remoteproxy/engine.cpp b/libnymea-remoteproxy/engine.cpp index e369371..a5cec58 100644 --- a/libnymea-remoteproxy/engine.cpp +++ b/libnymea-remoteproxy/engine.cpp @@ -83,7 +83,7 @@ void Engine::start(ProxyConfiguration *configuration) m_monitorServer = new MonitorServer(configuration->monitorSocketFileName(), this); m_monitorServer->startServer(); - // Set tunning true in the next event loop + // Set running true in the next event loop QMetaObject::invokeMethod(this, QString("setRunning").toLatin1().data(), Qt::QueuedConnection, Q_ARG(bool, true)); } diff --git a/libnymea-remoteproxy/proxyserver.cpp b/libnymea-remoteproxy/proxyserver.cpp index 9feae99..5730383 100644 --- a/libnymea-remoteproxy/proxyserver.cpp +++ b/libnymea-remoteproxy/proxyserver.cpp @@ -22,6 +22,7 @@ #include "proxyserver.h" #include "loggingcategories.h" +#include #include #include #include @@ -32,6 +33,8 @@ ProxyServer::ProxyServer(QObject *parent) : QObject(parent) { qRegisterMetaType("ProxyClient *"); m_jsonRpcServer = new JsonRpcServer(this); + + loadStatistics(); } ProxyServer::~ProxyServer() @@ -67,6 +70,12 @@ QVariantMap ProxyServer::currentStatistics() statisticsMap.insert("tunnelCount", m_tunnels.count()); statisticsMap.insert("troughput", m_troughput); + QVariantMap totalStatisticsMap; + totalStatisticsMap.insert("totalClientCount", m_totalClientCount); + totalStatisticsMap.insert("totalTunnelCount", m_totalTunnelCount); + totalStatisticsMap.insert("totalTraffic", m_totalTraffic); + statisticsMap.insert("total", totalStatisticsMap); + // Create client list QVariantList clientList; foreach (ProxyClient *client, m_proxyClients) { @@ -109,6 +118,26 @@ void ProxyServer::setRunning(bool running) emit runningChanged(); } +void ProxyServer::loadStatistics() +{ + QSettings settings; + settings.beginGroup("Statistics"); + m_totalClientCount = settings.value("totalClientCount", 0).toInt(); + m_totalTunnelCount = settings.value("totalTunnelCount", 0).toInt(); + m_totalTraffic = settings.value("totalTraffic", 0).toInt(); + settings.endGroup(); +} + +void ProxyServer::saveStatistics() +{ + QSettings settings; + settings.beginGroup("Statistics"); + settings.setValue("totalClientCount", m_totalClientCount); + settings.value("totalTunnelCount", m_totalTunnelCount); + settings.value("totalTraffic", m_totalTraffic); + settings.endGroup(); +} + ProxyClient *ProxyServer::getRemoteClient(ProxyClient *proxyClient) { if (!m_tunnels.contains(proxyClient->token())) @@ -150,6 +179,10 @@ void ProxyServer::establishTunnel(ProxyClient *firstClient, ProxyClient *secondC qCDebug(dcProxyServer()) << tunnel; + + m_totalTunnelCount += 1; + saveStatistics(); + // Notify the clients in the next event loop QMetaObject::invokeMethod(m_jsonRpcServer, QString("sendNotification").toLatin1().data(), Qt::QueuedConnection, Q_ARG(QString, m_jsonRpcServer->name()), @@ -176,6 +209,9 @@ void ProxyServer::onClientConnected(const QUuid &clientId, const QHostAddress &a connect(proxyClient, &ProxyClient::authenticated, this, &ProxyServer::onProxyClientAuthenticated); connect(proxyClient, &ProxyClient::timeoutOccured, this, &ProxyServer::onProxyClientTimeoutOccured); + m_totalClientCount += 1; + saveStatistics(); + m_proxyClients.insert(clientId, proxyClient); m_jsonRpcServer->registerClient(proxyClient); } @@ -251,6 +287,9 @@ void ProxyServer::onClientDataAvailable(const QUuid &clientId, const QByteArray proxyClient->addRxDataCount(data.count()); remoteClient->addTxDataCount(data.count()); + m_totalTraffic += data.count(); + saveStatistics(); + qCDebug(dcProxyServerTraffic()) << "Pipe tunnel data:"; qCDebug(dcProxyServerTraffic()) << " --> from" << proxyClient; qCDebug(dcProxyServerTraffic()) << " --> to" << remoteClient; diff --git a/libnymea-remoteproxy/proxyserver.h b/libnymea-remoteproxy/proxyserver.h index 416b793..388c576 100644 --- a/libnymea-remoteproxy/proxyserver.h +++ b/libnymea-remoteproxy/proxyserver.h @@ -67,10 +67,21 @@ private: int m_troughput = 0; int m_troughputCounter = 0; + // Persistent statistics + int m_totalClientCount = 0; + int m_totalTunnelCount = 0; + int m_totalTraffic = 0; + + + // Set private properties void setRunning(bool running); - ProxyClient *getRemoteClient(ProxyClient *proxyClient); + void loadStatistics(); + void saveStatistics(); + + // Helper methods + ProxyClient *getRemoteClient(ProxyClient *proxyClient); void establishTunnel(ProxyClient *firstClient, ProxyClient *secondClient); signals: diff --git a/monitor/monitor.cpp b/monitor/monitor.cpp index 3e3b825..3a9ef65 100644 --- a/monitor/monitor.cpp +++ b/monitor/monitor.cpp @@ -41,6 +41,8 @@ void Monitor::onDisconnected() if (!m_terminal) return; - m_terminal->deleteLater(); + delete m_terminal; m_terminal = nullptr; + qDebug() << "Monitor disconnected."; + exit(0); } diff --git a/monitor/monitorclient.cpp b/monitor/monitorclient.cpp index f9034f3..5c9f7a7 100644 --- a/monitor/monitorclient.cpp +++ b/monitor/monitorclient.cpp @@ -69,7 +69,6 @@ void MonitorClient::onErrorOccured(QLocalSocket::LocalSocketError socketError) { Q_UNUSED(socketError) qWarning() << "Local socket error occured" << m_socket->errorString(); - exit(1); } void MonitorClient::connectMonitor() diff --git a/monitor/terminalwindow.cpp b/monitor/terminalwindow.cpp index 1f4205f..e5a7f3c 100644 --- a/monitor/terminalwindow.cpp +++ b/monitor/terminalwindow.cpp @@ -162,13 +162,16 @@ void TerminalWindow::drawWindowBorder(WINDOW *window) void TerminalWindow::paintHeader() { - QString headerString = QString(" Server: %1 %2 | API version %3 | Clients: %4 | Tunnels %5 | %6 | %7 ") + QString headerString = QString(" Server: %1 (%2) | API: %3 | Clients: %4, %5 | Tunnels: %6, %7 | %8 | %9 | %10") .arg(m_dataMap.value("serverName", "-").toString()) .arg(m_dataMap.value("serverVersion", "-").toString()) .arg(m_dataMap.value("apiVersion", "-").toString()) .arg(m_dataMap.value("proxyStatistic").toMap().value("clientCount", 0).toInt()) + .arg(m_dataMap.value("proxyStatistic").toMap().value("total").toMap().value("totalClientCount").toInt()) .arg(m_dataMap.value("proxyStatistic").toMap().value("tunnelCount", 0).toInt()) + .arg(m_dataMap.value("proxyStatistic").toMap().value("total").toMap().value("totalTunnelCount").toInt()) .arg(humanReadableTraffic(m_dataMap.value("proxyStatistic").toMap().value("troughput", 0).toInt()) + " / s", - 13) + .arg(humanReadableTraffic(m_dataMap.value("proxyStatistic").toMap().value("total").toMap().value("totalTraffic").toInt()), - 10) .arg((m_view == ViewClients ? "-- Clients --" : "-- Tunnels --")); int delta = m_terminalSizeX - headerString.count();