This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2goclient. commit 934d0c5fc1f1296cbfffa15d398af38627e5d592 Author: Oleksandr Shneyder <o.shneyder@phoca-gmbh.de> Date: Wed Aug 22 13:23:34 2018 +0200 Send in broker event the duration of session on client. --- debian/changelog | 1 + src/httpbrokerclient.cpp | 9 ++++--- src/httpbrokerclient.h | 2 +- src/onmainwindow.cpp | 66 ++++++++++++++++++++++++++++++------------------ src/onmainwindow.h | 6 ++--- 5 files changed, 51 insertions(+), 33 deletions(-) diff --git a/debian/changelog b/debian/changelog index 6456828..d497840 100644 --- a/debian/changelog +++ b/debian/changelog @@ -9,6 +9,7 @@ x2goclient (4.1.2.2-0x2go1) UNRELEASED; urgency=medium CONNECTED, SUSPENDING, TERMINATING, FINISHED. It's not a real session state, but rather the state of X2Go Client. - Save session command in resumingSession.command. + - Send in broker event the duration of session on client. [ Mihai Moldovan ] * New upstream version (4.1.2.2): diff --git a/src/httpbrokerclient.cpp b/src/httpbrokerclient.cpp index 21cb14f..002785b 100644 --- a/src/httpbrokerclient.cpp +++ b/src/httpbrokerclient.cpp @@ -348,7 +348,9 @@ void HttpBrokerClient::selectUserSession(const QString& session) } -void HttpBrokerClient::sendEvent(const QString& ev, const QString& id, const QString& server, const QString& client, const QString& login, const QString& cmd, const QString& display, const QString& start) +void HttpBrokerClient::sendEvent(const QString& ev, const QString& id, const QString& server, const QString& client, + const QString& login, const QString& cmd, + const QString& display, const QString& start, uint connectionTime) { x2goDebug<<"Called sendEvent."; QString brokerUser=config->brokerUser; @@ -369,6 +371,7 @@ void HttpBrokerClient::sendEvent(const QString& ev, const QString& id, const QSt "cmd="<<QUrl::toPercentEncoding(cmd)<<"&"<< "display="<<QUrl::toPercentEncoding(display)<<"&"<< "start="<<QUrl::toPercentEncoding(start)<<"&"<< + "elapsed="<<QString::number(connectionTime)<<"&"<< "authid="<<nextAuthId; x2goDebug << "Sending request: "<< req.toUtf8(); QNetworkRequest request(QUrl(config->brokerurl)); @@ -381,12 +384,12 @@ void HttpBrokerClient::sendEvent(const QString& ev, const QString& id, const QSt if (nextAuthId.length() > 0) { sshConnection->executeCommand ( config->sshBrokerBin+" --user "+ brokerUser +" --authid "+nextAuthId+ " --task clientevent --sid \""+id+"\" --event "+ev+" --server \""+server+"\" --client \""+client+"\" --login "+"\""+ - login+"\" --cmd \""+cmd+"\" --display \""+display+"\" --start \""+start+"\"", + login+"\" --cmd \""+cmd+"\" --display \""+display+"\" --start \""+start+"\" --elapsed "+QString::number(connectionTime), this,SLOT ( slotEventSent(bool,QString,int))); } else { sshConnection->executeCommand ( config->sshBrokerBin+" --user "+ brokerUser + " --task clientevent --sid \""+id+"\" --event "+ev+" --server \""+server+"\" --client \""+client+"\" --login "+"\""+ - login+"\" --cmd \""+cmd+"\" --display \""+display+"\" --start \""+start+"\"", + login+"\" --cmd \""+cmd+"\" --display \""+display+"\" --start \""+start+"\" --elapsed "+QString::number(connectionTime), this,SLOT ( slotEventSent(bool,QString,int))); } } diff --git a/src/httpbrokerclient.h b/src/httpbrokerclient.h index 4e0098e..24f52f3 100644 --- a/src/httpbrokerclient.h +++ b/src/httpbrokerclient.h @@ -46,7 +46,7 @@ public: void testConnection(); void closeSSHInteractionDialog(); void sendEvent(const QString& ev, const QString& id, const QString& server, const QString& client, - const QString& login, const QString& cmd, const QString& display, const QString& start); + const QString& login, const QString& cmd, const QString& display, const QString& start, uint connectionTime); private: QNetworkAccessManager* http; QNetworkRequest* netRequest; diff --git a/src/onmainwindow.cpp b/src/onmainwindow.cpp index d530745..bf97c9e 100644 --- a/src/onmainwindow.cpp +++ b/src/onmainwindow.cpp @@ -3550,8 +3550,7 @@ void ONMainWindow::startDirectRDP() showSessionStatus(); if(brokerMode) { - sendEventToBroker(CONNECTING,resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), - resumingSession.command, resumingSession.display, resumingSession.crTime); + sendEventToBroker(CONNECTING); } // QTimer::singleShot ( 30000,this,SLOT ( slotRestartProxy() ) ); @@ -3997,28 +3996,52 @@ x2goSession ONMainWindow::getSessionFromString ( const QString& string ) } -void ONMainWindow::sendEventToBroker(ONMainWindow::client_events ev, const QString& id, const QString& server, const QString& client, const QString& login, const QString& cmd, const QString& display, const QString& start) +void ONMainWindow::sendEventToBroker(ONMainWindow::client_events ev) { if(!config.brokerEvents) { return; } - if(ev <= lastBrokerEvent && id == lastBrokerEventSession ) + if(ev <= lastBrokerEvent && resumingSession.sessionId == lastBrokerEventSession ) { return; } lastBrokerEvent=ev; - lastBrokerEventSession=id; + lastBrokerEventSession=resumingSession.sessionId; QString event; switch(ev) { - case CONNECTING: event="CONNECTING";break; - case CONNECTED: event="CONNECTED";break; - case SUSPENDING: event="SUSPENDING";break; - case TERMINATING: event="TERMINATING";break; - case FINISHED: event="FINISHED";break; + case CONNECTING: + { + event="CONNECTING"; + resumingSession.connectedSince=QDateTime::currentDateTime().toTime_t(); + break; + } + case CONNECTED: + { + event="CONNECTED"; + resumingSession.connectedSince=QDateTime::currentDateTime().toTime_t(); + break; + } + case SUSPENDING: + { + event="SUSPENDING"; + break; + } + case TERMINATING: + { + event="TERMINATING"; + break; + } + case FINISHED: + { + event="FINISHED"; + break; + } } - broker->sendEvent(event, id, server, client, login, cmd, display, start); + broker->sendEvent(event, resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), + resumingSession.command, resumingSession.display, resumingSession.crTime, + QDateTime::currentDateTime().toTime_t()-resumingSession.connectedSince); } @@ -5059,8 +5082,7 @@ void ONMainWindow::slotSuspendSessFromSt() if(brokerMode) { - sendEventToBroker(SUSPENDING,resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), - resumingSession.command, resumingSession.display, resumingSession.crTime); + sendEventToBroker(SUSPENDING); } #ifdef Q_OS_LINUX if (directRDP) @@ -5092,8 +5114,7 @@ void ONMainWindow::slotTermSessFromSt() if(brokerMode) { - sendEventToBroker(TERMINATING,resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), - resumingSession.command, resumingSession.display, resumingSession.crTime); + sendEventToBroker(TERMINATING); } x2goDebug<<"Terminating direct RDP session."; @@ -5111,8 +5132,7 @@ void ONMainWindow::slotTermSessFromSt() sbExp->setEnabled ( false ); if(brokerMode) { - sendEventToBroker(TERMINATING,resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), - resumingSession.command, resumingSession.display, resumingSession.crTime); + sendEventToBroker(TERMINATING); } setStatStatus ( tr ( "terminating" ) ); } @@ -5122,8 +5142,7 @@ void ONMainWindow::slotTermSessFromSt() sbExp->setEnabled ( false ); if(brokerMode) { - sendEventToBroker(TERMINATING,resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), - resumingSession.command, resumingSession.display, resumingSession.crTime); + sendEventToBroker(TERMINATING); } termSession ( resumingSession.sessionId,false ); } @@ -5866,8 +5885,7 @@ void ONMainWindow::slotTunnelOk(int) proxyRunning=true; if(brokerMode) { - sendEventToBroker(CONNECTING,resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), - resumingSession.command, resumingSession.display, resumingSession.crTime); + sendEventToBroker(CONNECTING); } // always search for proxy window on linux. On Windows only in window mode @@ -6147,8 +6165,7 @@ void ONMainWindow::slotProxyFinished ( int,QProcess::ExitStatus ) { if(brokerMode) { - sendEventToBroker(FINISHED,resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), - resumingSession.command, resumingSession.display, resumingSession.crTime); + sendEventToBroker(FINISHED); } #ifdef Q_OS_DARWIN if (modMapTimer) { @@ -6376,8 +6393,7 @@ void ONMainWindow::slotProxyStderr() { if(brokerMode) { - sendEventToBroker(CONNECTED,resumingSession.sessionId,resumingSession.server, resumingSession.clientIp, getCurrentUname(), - resumingSession.command, resumingSession.display, resumingSession.crTime); + sendEventToBroker(CONNECTED); } setStatStatus ( tr ( "running" ) ); if (trayEnabled) diff --git a/src/onmainwindow.h b/src/onmainwindow.h index a1fab35..0abf74a 100644 --- a/src/onmainwindow.h +++ b/src/onmainwindow.h @@ -52,7 +52,6 @@ /** @author Oleksandr Shneyder */ - class QToolButton; class QTemporaryFile; class QLineEdit; @@ -147,6 +146,7 @@ struct x2goSession QString grPort; QString sndPort; QString fsPort; + uint connectedSince; bool published; int colorDepth; bool fullscreen; @@ -910,9 +910,7 @@ private: bool trayMinCon; bool trayMaxDiscon; bool trayAutoHidden; - void sendEventToBroker(client_events ev, const QString& id, const QString& server, const QString& client, - const QString& login, const QString& cmd, - const QString& display, const QString& start); + void sendEventToBroker(client_events ev); QString findSshKeyForServer(QString user, QString server, QString port); void loadSettings(); void showPass ( UserButton* user ); -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goclient.git