Ref T42, util function to create network report

This commit is contained in:
Klaus Basan
2017-04-28 02:24:29 +02:00
committed by Mathew Sutcliffe
parent 297ef8ea16
commit d46257f670
2 changed files with 67 additions and 2 deletions

View File

@@ -7,12 +7,14 @@
* contained in the LICENSE file.
*/
#include "blackmisc/eventloop.h"
#include "blackmisc/network/networkutils.h"
#include "blackmisc/network/server.h"
#include "blackmisc/eventloop.h"
#include "blackmisc/stringutils.h"
#include "blackconfig/buildconfig.h"
#include <QAbstractSocket>
#include <QDateTime>
#include <QMetaEnum>
#include <QDebug>
#include <QHostAddress>
#include <QJsonDocument>
@@ -21,6 +23,7 @@
#include <QNetworkAddressEntry>
#include <QNetworkInterface>
#include <QNetworkReply>
#include <QNetworkConfiguration>
#include <QObject>
#include <QSignalMapper>
#include <QSslCertificate>
@@ -50,6 +53,11 @@ namespace BlackMisc
return 3000;
}
int CNetworkUtils::getLongTimeoutMs()
{
return 3 * getTimeoutMs();
}
bool CNetworkUtils::canPing(const QString &hostAddress)
{
if (hostAddress.isEmpty()) { return false; }
@@ -341,5 +349,50 @@ namespace BlackMisc
static const QRegularExpression regEx("<[^>]*>");
return phpError.remove(regEx);
}
CStatusMessageList CNetworkUtils::createNetworkReport(const QNetworkAccessManager *am)
{
return CNetworkUtils::createNetworkReport(CUrl(), am);
}
CStatusMessageList CNetworkUtils::createNetworkReport(const CUrl &url, const QNetworkAccessManager *am)
{
static const CLogCategoryList cats({CLogCategory::network()});
CStatusMessageList msgs;
if (!url.isEmpty())
{
const QString host = url.getHost();
const bool canPing = CNetworkUtils::canPing(host);
const CStatusMessage ping(cats, canPing ? CStatusMessage::SeverityInfo : CStatusMessage::SeverityError, "Host: " + host + " ping: " + boolToYesNo(canPing));
msgs.push_back(ping);
QString msg;
const bool canConnect = CNetworkUtils::canConnect(url, msg, getTimeoutMs() * 2);
if (canConnect)
{
msgs.push_back(CStatusMessage(cats, CStatusMessage::SeverityInfo, "Can connect to " + url.getFullUrl()));
}
else
{
msgs.push_back(CStatusMessage(cats, CStatusMessage::SeverityError, "Cannot connect to " + url.getFullUrl() + " msg: " + msg));
}
}
if (am)
{
const bool accessible = am->networkAccessible() == QNetworkAccessManager::Accessible;
const QNetworkConfiguration c = am->configuration();
static const QMetaEnum enumAccessible = QMetaEnum::fromType<QNetworkAccessManager::NetworkAccessibility>();
const QString msg = QString("Accessible: %1 (%2) bearer: %3 %4").arg(
boolToYesNo(accessible),
enumAccessible.valueToKey(am->networkAccessible()),
c.bearerTypeName(), c.identifier());
msgs.push_back(CStatusMessage(cats, accessible ? CStatusMessage::SeverityInfo : CStatusMessage::SeverityError, msg));
}
return msgs;
}
} // namespace
} // namespace

View File

@@ -12,10 +12,12 @@
#ifndef BLACKMISC_NETWORKUTILS_H
#define BLACKMISC_NETWORKUTILS_H
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/network/urllist.h"
#include "blackmisc/blackmiscexport.h"
#include "blackmisc/statusmessagelist.h"
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QString>
#include <QStringList>
#include <QtGlobal>
@@ -46,6 +48,9 @@ namespace BlackMisc
//! Default for timeout
static int getTimeoutMs();
//! Default for timeout (long)
static int getLongTimeoutMs();
//! Can ping the address?
//! \note uses OS ping
static bool canPing(const QString &hostAddress);
@@ -137,6 +142,13 @@ namespace BlackMisc
//! Remove the HTML formatting from a PHP error message
static QString removeHtmlPartsFromPhpErrorMessage(const QString &errorMessage);
//! Status about network
static BlackMisc::CStatusMessageList createNetworkReport(const QNetworkAccessManager *am);
//! Status about network, can be used when an URL fails to resolve issues
//! \remark that can take a moment to complete, as it checks network
static BlackMisc::CStatusMessageList createNetworkReport(const CUrl &url, const QNetworkAccessManager *am = nullptr);
private:
//! Hidden constructor
CNetworkUtils() {}