From ea8e27cc9b062bb5ae9030f42d98472f0da7e5a0 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 3 Oct 2019 23:03:27 +0200 Subject: [PATCH] Ref T730, obtain duration from "swift modified" QNetworkReply --- src/blackmisc/network/networkutils.cpp | 50 ++++++++++++++++++++++---- src/blackmisc/network/networkutils.h | 12 +++++-- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/blackmisc/network/networkutils.cpp b/src/blackmisc/network/networkutils.cpp index f1aa8e5dc..9747ab2be 100644 --- a/src/blackmisc/network/networkutils.cpp +++ b/src/blackmisc/network/networkutils.cpp @@ -314,14 +314,14 @@ namespace BlackMisc return req; } - qint64 CNetworkUtils::lastModifiedMsSinceEpoch(QNetworkReply *nwReply) + qint64 CNetworkUtils::lastModifiedMsSinceEpoch(const QNetworkReply *nwReply) { Q_ASSERT(nwReply); const QDateTime lm = CNetworkUtils::lastModifiedDateTime(nwReply); return lm.isValid() ? lm.toMSecsSinceEpoch() : -1; } - QDateTime CNetworkUtils::lastModifiedDateTime(QNetworkReply *nwReply) + QDateTime CNetworkUtils::lastModifiedDateTime(const QNetworkReply *nwReply) { Q_ASSERT(nwReply); const QVariant lastModifiedQv = nwReply->header(QNetworkRequest::LastModifiedHeader); @@ -332,12 +332,25 @@ namespace BlackMisc return QDateTime(); } - qint64 CNetworkUtils::lastModifiedSinceNow(QNetworkReply *nwReply) + qint64 CNetworkUtils::lastModifiedSinceNow(const QNetworkReply *nwReply) { const qint64 sinceEpoch = CNetworkUtils::lastModifiedMsSinceEpoch(nwReply); return sinceEpoch > 0 ? std::max(0LL, QDateTime::currentMSecsSinceEpoch() - sinceEpoch) : QDateTime::currentMSecsSinceEpoch(); } + qint64 CNetworkUtils::requestDuration(const QNetworkReply *nwReply) + { + if (!nwReply) { return -1; } + const QVariant started = nwReply->property("started"); + if (started.isValid() && started.canConvert()) + { + const qint64 now = QDateTime::currentMSecsSinceEpoch(); + const qint64 start = started.value(); + return (now - start); + } + return -1; + } + int CNetworkUtils::getHttpStatusCode(QNetworkReply *nwReply) { if (!nwReply) { return -1; } @@ -524,11 +537,36 @@ namespace BlackMisc QString CNetworkUtils::networkStatesToString(QNetworkConfiguration::StateFlags states) { QStringList statesSl; - if (states.testFlag(QNetworkConfiguration::Active)) { statesSl << networkStateToString(QNetworkConfiguration::Active); } + if (states.testFlag(QNetworkConfiguration::Active)) { statesSl << networkStateToString(QNetworkConfiguration::Active); } if (states.testFlag(QNetworkConfiguration::Discovered)) { statesSl << networkStateToString(QNetworkConfiguration::Discovered); } - if (states.testFlag(QNetworkConfiguration::Defined)) { statesSl << networkStateToString(QNetworkConfiguration::Defined); } - if (states.testFlag(QNetworkConfiguration::Undefined)) { statesSl << networkStateToString(QNetworkConfiguration::Undefined); } + if (states.testFlag(QNetworkConfiguration::Defined)) { statesSl << networkStateToString(QNetworkConfiguration::Defined); } + if (states.testFlag(QNetworkConfiguration::Undefined)) { statesSl << networkStateToString(QNetworkConfiguration::Undefined); } return statesSl.join(", "); } + + const QString &CNetworkUtils::networkOperationToString(QNetworkAccessManager::Operation operation) + { + static const QString h("HEAD"); + static const QString g("GET"); + static const QString put("PUT"); + static const QString d("POST"); + static const QString post("DELETE"); + static const QString c("custom"); + static const QString u("unknown"); + + switch (operation) + { + case QNetworkAccessManager::HeadOperation: return h; + case QNetworkAccessManager::GetOperation: return g; + case QNetworkAccessManager::PutOperation: return put; + case QNetworkAccessManager::PostOperation: return post; + case QNetworkAccessManager::DeleteOperation: return d; + case QNetworkAccessManager::CustomOperation: return c; + case QNetworkAccessManager::UnknownOperation: + default: + break; + } + return u; + } } // namespace } // namespace diff --git a/src/blackmisc/network/networkutils.h b/src/blackmisc/network/networkutils.h index 965960cb0..25dfe543a 100644 --- a/src/blackmisc/network/networkutils.h +++ b/src/blackmisc/network/networkutils.h @@ -125,13 +125,16 @@ namespace BlackMisc static QNetworkRequest getSwiftNetworkRequest(const QNetworkRequest &request, const QString &userAgentDetails = {}); //! Last modified from reply - static qint64 lastModifiedMsSinceEpoch(QNetworkReply *nwReply); + static qint64 lastModifiedMsSinceEpoch(const QNetworkReply *nwReply); //! Last modified from reply - static QDateTime lastModifiedDateTime(QNetworkReply *nwReply); + static QDateTime lastModifiedDateTime(const QNetworkReply *nwReply); //! Last modified from reply compared with now (in ms) - static qint64 lastModifiedSinceNow(QNetworkReply *nwReply); + static qint64 lastModifiedSinceNow(const QNetworkReply *nwReply); + + //! Request duration (only works if requested by swift functions) + static qint64 requestDuration(const QNetworkReply *nwReply); //! Get the http status code static int getHttpStatusCode(QNetworkReply *nwReply); @@ -178,6 +181,9 @@ namespace BlackMisc //! States to string static QString networkStatesToString(QNetworkConfiguration::StateFlags states); + //! Operation to string + static const QString &networkOperationToString(QNetworkAccessManager::Operation operation); + private: //! Hidden constructor CNetworkUtils() {}