Ref T161, network watchdog calls ping service

This commit is contained in:
Klaus Basan
2017-09-25 03:44:44 +02:00
parent ad91cecf00
commit e932f08547
4 changed files with 77 additions and 0 deletions

View File

@@ -9,10 +9,13 @@
#include "networkwatchdog.h"
#include "application.h"
#include "blackcore/data/globalsetup.h"
#include "blackmisc/network/networkutils.h"
#include <QNetworkReply>
using namespace BlackMisc;
using namespace BlackMisc::Network;
using namespace BlackCore::Data;
namespace BlackCore
{
@@ -168,6 +171,37 @@ namespace BlackCore
}
}
void CNetworkWatchdog::gracefulShutdown()
{
this->pingDbClientService(PingCompleteShutdown);
}
void CNetworkWatchdog::pingDbClientService(CNetworkWatchdog::PingType type)
{
if (!this->isSwiftDbAccessible()) { return; }
if (!sApp) { return; }
const CGlobalSetup gs = sApp->getGlobalSetup();
if (!gs.wasLoaded()) { return; }
CUrl pingUrl = gs.getDbClientPingServiceUrl();
if (pingUrl.isEmpty()) { return; }
pingUrl.appendQuery("uuid", this->identifier().toUuidString());
pingUrl.appendQuery("application", sApp->getApplicationNameAndVersion());
if (type.testFlag(PingLogoff)) { pingUrl.appendQuery("logoff", "true"); }
if (type.testFlag(PingShutdown)) { pingUrl.appendQuery("shutdown", "true"); }
if (type.testFlag(PingStarted)) { pingUrl.appendQuery("started", "true"); }
sApp->getFromNetwork(pingUrl, { this, &CNetworkWatchdog::replyPingClientService });
}
void CNetworkWatchdog::replyPingClientService(QNetworkReply *nwReply)
{
QScopedPointer<QNetworkReply> nw(nwReply); // delete reply
if (!sApp || sApp->isShuttingDown()) { return; }
const bool ok = nw->error() == QNetworkReply::NoError;
this->setDbAccessibility(ok);
}
void CNetworkWatchdog::triggerChangedSignals(bool oldDbAccessible, bool oldInternetAccessible)
{
if (!this->doWorkCheck()) { return; }

View File

@@ -79,6 +79,23 @@ namespace BlackCore
//! Network status changed, use this function to inform the watchdog
void onChangedNetworkAccessibility(QNetworkAccessManager::NetworkAccessibility accessible);
//! Graceful shutdown
void gracefulShutdown();
//! Add info when pinging
enum PingTypeFlag
{
PingUnspecific = 0,
PingLogoff = 1 << 0,
PingStarted = 1 << 1,
PingShutdown = 1 << 2,
PingCompleteShutdown = PingLogoff | PingShutdown
};
Q_DECLARE_FLAGS(PingType, PingTypeFlag)
//! Ping the DB server, fire and forget (no feedback etc)
void pingDbClientService(PingType type = PingUnspecific);
//! URL referring to the DB
//! \remark depends on BlackCore::Application::getGlobalSetup()
static bool isDbUrl(const BlackMisc::Network::CUrl &url);
@@ -103,6 +120,9 @@ namespace BlackCore
//! Init a working shared URL
void initWorkingSharedUrlFromSetup();
//! Received reply of client service ping
void replyPingClientService(QNetworkReply *nwReply);
//! The URL being tested
//! \remark depends on BlackCore::Application::getGlobalSetup()
static BlackMisc::Network::CUrl dbTestUrl();
@@ -127,4 +147,9 @@ namespace BlackCore
};
} // ns
} // ns
Q_DECLARE_METATYPE(BlackCore::Db::CNetworkWatchdog::PingTypeFlag)
Q_DECLARE_METATYPE(BlackCore::Db::CNetworkWatchdog::PingType)
Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::Db::CNetworkWatchdog::PingType)
#endif // guard