Add transports and counts for the monitor
This commit is contained in:
parent
f43dc9f78e
commit
150f1fef3f
@ -294,6 +294,11 @@ void Engine::onTimerTick()
|
||||
serverStatistics.value("proxyStatistic").toMap().value("troughput").toInt());
|
||||
|
||||
m_currentTimeCounter = 0;
|
||||
|
||||
|
||||
if (m_tunnelProxyServer) {
|
||||
m_tunnelProxyServer->tick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -70,6 +70,16 @@ void TcpSocketServer::killClientConnection(const QUuid &clientId, const QString
|
||||
client->close();
|
||||
}
|
||||
|
||||
QString TcpSocketServer::name() const
|
||||
{
|
||||
return "TcpSocketServer";
|
||||
}
|
||||
|
||||
uint TcpSocketServer::connectionsCount() const
|
||||
{
|
||||
return m_clientList.count();
|
||||
}
|
||||
|
||||
bool TcpSocketServer::running() const
|
||||
{
|
||||
if (!m_server)
|
||||
|
||||
@ -75,6 +75,9 @@ public:
|
||||
void sendData(const QUuid &clientId, const QByteArray &data) override;
|
||||
void killClientConnection(const QUuid &clientId, const QString &killReason) override;
|
||||
|
||||
QString name() const override;
|
||||
uint connectionsCount() const override;
|
||||
|
||||
bool running() const override;
|
||||
|
||||
private:
|
||||
|
||||
@ -46,6 +46,9 @@ public:
|
||||
virtual void sendData(const QUuid &clientId, const QByteArray &data) = 0;
|
||||
virtual void killClientConnection(const QUuid &clientId, const QString &killReason) = 0;
|
||||
|
||||
virtual QString name() const = 0;
|
||||
virtual uint connectionsCount() const = 0;
|
||||
|
||||
QUrl serverUrl() const;
|
||||
void setServerUrl(const QUrl &serverUrl);
|
||||
|
||||
|
||||
@ -73,6 +73,16 @@ void UnixSocketServer::killClientConnection(const QUuid &clientId, const QString
|
||||
}
|
||||
}
|
||||
|
||||
QString UnixSocketServer::name() const
|
||||
{
|
||||
return "UnixSocketServer";
|
||||
}
|
||||
|
||||
uint UnixSocketServer::connectionsCount() const
|
||||
{
|
||||
return m_clientList.count();
|
||||
}
|
||||
|
||||
bool UnixSocketServer::running() const
|
||||
{
|
||||
if (!m_server)
|
||||
|
||||
@ -47,6 +47,9 @@ public:
|
||||
void sendData(const QUuid &clientId, const QByteArray &data) override;
|
||||
void killClientConnection(const QUuid &clientId, const QString &killReason) override;
|
||||
|
||||
QString name() const override;
|
||||
uint connectionsCount() const override;
|
||||
|
||||
bool running() const override;
|
||||
|
||||
public slots:
|
||||
|
||||
@ -81,6 +81,16 @@ void WebSocketServer::killClientConnection(const QUuid &clientId, const QString
|
||||
client->close(QWebSocketProtocol::CloseCodeBadOperation, killReason);
|
||||
}
|
||||
|
||||
QString WebSocketServer::name() const
|
||||
{
|
||||
return "WebSocketServer";
|
||||
}
|
||||
|
||||
uint WebSocketServer::connectionsCount() const
|
||||
{
|
||||
return m_clientList.count();
|
||||
}
|
||||
|
||||
void WebSocketServer::onClientConnected()
|
||||
{
|
||||
// Got a new client connected
|
||||
|
||||
@ -53,6 +53,9 @@ public:
|
||||
void sendData(const QUuid &clientId, const QByteArray &data) override;
|
||||
void killClientConnection(const QUuid &clientId, const QString &killReason) override;
|
||||
|
||||
QString name() const override;
|
||||
uint connectionsCount() const override;
|
||||
|
||||
private:
|
||||
QWebSocketServer *m_server = nullptr;
|
||||
bool m_sslEnabled;
|
||||
|
||||
@ -201,6 +201,11 @@ QVariantMap TunnelProxyServer::currentStatistics()
|
||||
statisticsMap.insert("totalClientCount", m_proxyClients.count());
|
||||
statisticsMap.insert("serverConnectionsCount", m_tunnelProxyServerConnections.count());
|
||||
statisticsMap.insert("clientConnectionsCount", m_tunnelProxyClientConnections.count());
|
||||
QVariantMap transports;
|
||||
foreach (TransportInterface *transportInterface, m_transportInterfaces) {
|
||||
transports.insert(transportInterface->name(), transportInterface->connectionsCount());
|
||||
}
|
||||
statisticsMap.insert("transports", transports);
|
||||
statisticsMap.insert("troughput", m_troughput);
|
||||
|
||||
QVariantList tunnelConnections;
|
||||
@ -267,8 +272,8 @@ void TunnelProxyServer::tick()
|
||||
void TunnelProxyServer::onClientConnected(const QUuid &clientId, const QHostAddress &address)
|
||||
{
|
||||
TransportInterface *interface = static_cast<TransportInterface *>(sender());
|
||||
|
||||
qCDebug(dcTunnelProxyServer()) << "New client connected" << interface->serverName() << clientId.toString() << address.toString();
|
||||
|
||||
TunnelProxyClient *tunnelProxyClient = new TunnelProxyClient(interface, clientId, address, this);
|
||||
m_proxyClients.insert(clientId, tunnelProxyClient);
|
||||
m_jsonRpcServer->registerClient(tunnelProxyClient);
|
||||
|
||||
@ -64,6 +64,9 @@ int main(int argc, char *argv[])
|
||||
QCommandLineOption noninteractiveOption(QStringList() << "n" << "non-interactive", "Connect to the server, list all data and close the connection. This works only for the tunnelproxy.");
|
||||
parser.addOption(noninteractiveOption);
|
||||
|
||||
QCommandLineOption jsonOption(QStringList() << "j" << "json", "Connect to the server and print the raw json data.");
|
||||
parser.addOption(jsonOption);
|
||||
|
||||
parser.process(application);
|
||||
|
||||
// Check socket file
|
||||
@ -82,7 +85,7 @@ int main(int argc, char *argv[])
|
||||
NonInteractiveMonitor *monitor = new NonInteractiveMonitor(parser.value(socketOption));
|
||||
Q_UNUSED(monitor);
|
||||
} else {
|
||||
Monitor *monitor = new Monitor(parser.value(socketOption));
|
||||
Monitor *monitor = new Monitor(parser.value(socketOption), parser.isSet(jsonOption));
|
||||
Q_UNUSED(monitor);
|
||||
}
|
||||
|
||||
|
||||
@ -26,10 +26,13 @@
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "monitor.h"
|
||||
#include <QJsonDocument>
|
||||
|
||||
Monitor::Monitor(const QString &serverName, QObject *parent) : QObject(parent)
|
||||
Monitor::Monitor(const QString &serverName, bool jsonMode, QObject *parent) :
|
||||
QObject(parent),
|
||||
m_jsonMode(jsonMode)
|
||||
{
|
||||
m_monitorClient = new MonitorClient(serverName, this);
|
||||
m_monitorClient = new MonitorClient(serverName, jsonMode, this);
|
||||
connect(m_monitorClient, &MonitorClient::connected, this, &Monitor::onConnected);
|
||||
connect(m_monitorClient, &MonitorClient::disconnected, this, &Monitor::onDisconnected);
|
||||
|
||||
@ -38,8 +41,10 @@ Monitor::Monitor(const QString &serverName, QObject *parent) : QObject(parent)
|
||||
|
||||
void Monitor::onConnected()
|
||||
{
|
||||
m_terminal = new TerminalWindow(this);
|
||||
connect(m_monitorClient, &MonitorClient::dataReady, m_terminal, &TerminalWindow::refreshWindow);
|
||||
if (!m_jsonMode) {
|
||||
m_terminal = new TerminalWindow(this);
|
||||
connect(m_monitorClient, &MonitorClient::dataReady, m_terminal, &TerminalWindow::refreshWindow);
|
||||
}
|
||||
}
|
||||
|
||||
void Monitor::onDisconnected()
|
||||
|
||||
@ -37,11 +37,12 @@ class Monitor : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit Monitor(const QString &serverName, QObject *parent = nullptr);
|
||||
explicit Monitor(const QString &serverName, bool jsonMode, QObject *parent = nullptr);
|
||||
|
||||
private:
|
||||
TerminalWindow *m_terminal = nullptr;
|
||||
MonitorClient *m_monitorClient = nullptr;
|
||||
bool m_jsonMode = false;
|
||||
|
||||
private slots:
|
||||
void onConnected();
|
||||
|
||||
@ -29,9 +29,10 @@
|
||||
|
||||
#include <QJsonDocument>
|
||||
|
||||
MonitorClient::MonitorClient(const QString &serverName, QObject *parent) :
|
||||
MonitorClient::MonitorClient(const QString &serverName, bool jsonMode, QObject *parent) :
|
||||
QObject(parent),
|
||||
m_serverName(serverName)
|
||||
m_serverName(serverName),
|
||||
m_jsonMode(jsonMode)
|
||||
{
|
||||
m_socket = new QLocalSocket(this);
|
||||
|
||||
@ -65,7 +66,10 @@ void MonitorClient::onReadyRead()
|
||||
return;
|
||||
}
|
||||
|
||||
//qDebug() << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented));
|
||||
if (m_jsonMode) {
|
||||
qDebug() << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented));
|
||||
return;
|
||||
}
|
||||
|
||||
QVariantMap dataMap = jsonDoc.toVariant().toMap();
|
||||
emit dataReady(dataMap);
|
||||
|
||||
@ -37,11 +37,12 @@ class MonitorClient : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MonitorClient(const QString &serverName, QObject *parent = nullptr);
|
||||
explicit MonitorClient(const QString &serverName, bool jsonMode, QObject *parent = nullptr);
|
||||
|
||||
private:
|
||||
QString m_serverName;
|
||||
QLocalSocket *m_socket = nullptr;
|
||||
bool m_jsonMode = false;
|
||||
|
||||
signals:
|
||||
void connected();
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
NonInteractiveMonitor::NonInteractiveMonitor(const QString &serverName, QObject *parent)
|
||||
: QObject{parent}
|
||||
{
|
||||
m_monitorClient = new MonitorClient(serverName, this);
|
||||
m_monitorClient = new MonitorClient(serverName, false, this);
|
||||
connect(m_monitorClient, &MonitorClient::connected, this, &NonInteractiveMonitor::onConnected);
|
||||
|
||||
m_monitorClient->connectMonitor();
|
||||
@ -42,17 +42,24 @@ NonInteractiveMonitor::NonInteractiveMonitor(const QString &serverName, QObject
|
||||
void NonInteractiveMonitor::onConnected()
|
||||
{
|
||||
connect(m_monitorClient, &MonitorClient::dataReady, this, [](const QVariantMap &dataMap){
|
||||
|
||||
QVariantMap tunnelProxyMap = dataMap.value("tunnelProxyStatistic").toMap();
|
||||
|
||||
qInfo().noquote() << "---------------------------------------------------------------------";
|
||||
qInfo().noquote() << "Server name:" << dataMap.value("serverName", "-").toString();
|
||||
qInfo().noquote() << "Server version:" << dataMap.value("serverVersion", "-").toString();
|
||||
qInfo().noquote() << "API version:" << dataMap.value("apiVersion", "-").toString();
|
||||
qInfo().noquote() << "Total client count:" << dataMap.value("tunnelProxyStatistic").toMap().value("totalClientCount", 0).toInt();
|
||||
qInfo().noquote() << "Server connections:" << dataMap.value("tunnelProxyStatistic").toMap().value("serverConnectionsCount", 0).toInt();
|
||||
qInfo().noquote() << "Client connections:" << dataMap.value("tunnelProxyStatistic").toMap().value("clientConnectionsCount", 0).toInt();
|
||||
qInfo().noquote() << "Data troughput:" << Utils::humanReadableTraffic(dataMap.value("tunnelProxyStatistic").toMap().value("troughput", 0).toInt()) + " / s";
|
||||
qInfo().noquote() << "Total client count:" << tunnelProxyMap.value("totalClientCount", 0).toInt();
|
||||
qInfo().noquote() << "Server connections:" << tunnelProxyMap.value("serverConnectionsCount", 0).toInt();
|
||||
qInfo().noquote() << "Client connections:" << tunnelProxyMap.value("clientConnectionsCount", 0).toInt();
|
||||
qInfo().noquote() << "Data troughput:" << Utils::humanReadableTraffic(tunnelProxyMap.value("troughput", 0).toInt()) + " / s";
|
||||
qInfo().noquote() << "---------------------------------------------------------------------";
|
||||
QVariantMap transportsMap = tunnelProxyMap.value("transports").toMap();
|
||||
foreach(const QString &transportInterface, transportsMap.keys()) {
|
||||
qInfo().noquote().nospace() << "Connections on " << transportInterface << ": " << transportsMap.value(transportInterface).toInt();
|
||||
}
|
||||
qInfo().noquote() << "---------------------------------------------------------------------";
|
||||
|
||||
QVariantMap tunnelProxyMap = dataMap.value("tunnelProxyStatistic").toMap();
|
||||
foreach (const QVariant &serverVariant, tunnelProxyMap.value("tunnelConnections").toList()) {
|
||||
QVariantMap serverMap = serverVariant.toMap();
|
||||
QVariantList clientList = serverMap.value("clientConnections").toList();
|
||||
|
||||
Reference in New Issue
Block a user