From 6a89427aa84291bfadf4e79eb5b0098572bd447a Mon Sep 17 00:00:00 2001 From: m_thread Date: Mon, 16 Mar 2015 20:38:56 +0100 Subject: [PATCH] OP-1777 Added handling of network issues. Changed local time to timezone. Re-factored some functions. --- .../usagetracker/usagetrackerplugin.cpp | 30 +++++++++++++------ .../plugins/usagetracker/usagetrackerplugin.h | 5 ++++ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.cpp b/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.cpp index 8ef609296..ec670480d 100644 --- a/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.cpp +++ b/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.cpp @@ -29,13 +29,13 @@ #include #include #include +#include #include #include #include #include #include #include -#include #include "version_info/version_info.h" #include "coreplugin/icore.h" #include @@ -72,8 +72,7 @@ void UsageTrackerPlugin::shutdown() void UsageTrackerPlugin::onAutopilotConnect() { - ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); - Core::Internal::GeneralSettings *settings = pm->getObject(); + Core::Internal::GeneralSettings *settings = getGeneralSettings(); if (settings->collectUsageData()) { if (settings->showUsageDataDisclaimer()) { @@ -139,14 +138,12 @@ void UsageTrackerPlugin::trackUsage() if (shouldSend(hash)) { query.addQueryItem("hash", hash); - // Add local timestamp - query.addQueryItem("localtime", QDateTime::currentDateTime().toString(Qt::ISODate)); - QUrl url("https://www.openpilot.org/opver?" + query.toString(QUrl::FullyEncoded)); QNetworkAccessManager *networkAccessManager = new QNetworkAccessManager(); // This will delete the network access manager instance when we're done + connect(networkAccessManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(onFinished(QNetworkReply *))); connect(networkAccessManager, SIGNAL(finished(QNetworkReply *)), networkAccessManager, SLOT(deleteLater())); qDebug() << "Sending usage tracking as:" << url.toEncoded(QUrl::FullyEncoded); @@ -171,6 +168,7 @@ void UsageTrackerPlugin::collectUsageParameters(QMap ¶mete parameters["fw_hash"] = devDesc.gitHash; parameters["os_version"] = QSysInfo::prettyProductName() + " " + QSysInfo::currentCpuArchitecture(); parameters["os_threads"] = QString::number(QThread::idealThreadCount()); + parameters["os_timezone"] = QTimeZone::systemTimeZoneId(); parameters["gcs_version"] = VersionInfo::revision(); // Configuration parameters @@ -203,6 +201,16 @@ void UsageTrackerPlugin::collectUsageParameters(QMap ¶mete } } +void UsageTrackerPlugin::onFinished(QNetworkReply *reply) +{ + if (reply->error() == QNetworkReply::NoError) { + getGeneralSettings()->setLastUsageHash(m_lastHash); + qDebug() << "Updated last usage hash to:" << m_lastHash; + } else { + qDebug() << "Usage tracking failed with:" << reply->errorString(); + } +} + QString UsageTrackerPlugin::getUAVFieldValue(UAVObjectManager *objManager, QString objectName, QString fieldName, int index) const { UAVObject *object = objManager->getObject(objectName); @@ -222,15 +230,19 @@ QString UsageTrackerPlugin::getQueryHash(QString source) const return QString(QCryptographicHash::hash(QByteArray(source.toStdString().c_str()), QCryptographicHash::Md5).toHex()); } -bool UsageTrackerPlugin::shouldSend(const QString &hash) +Core::Internal::GeneralSettings * UsageTrackerPlugin::getGeneralSettings() const { ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance(); Core::Internal::GeneralSettings *settings = pm->getObject(); + return settings; +} - if (settings->lastUsageHash() == hash) { +bool UsageTrackerPlugin::shouldSend(const QString &hash) +{ + if (getGeneralSettings()->lastUsageHash() == hash) { return false; } else { - settings->setLastUsageHash(hash); + m_lastHash = hash; return true; } } diff --git a/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.h b/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.h index 8cd8504ff..5a3394b47 100644 --- a/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.h +++ b/ground/openpilotgcs/src/plugins/usagetracker/usagetrackerplugin.h @@ -28,9 +28,11 @@ #define USAGETRACKERPLUGIN_H #include +#include class TelemetryManager; class UAVObjectManager; +class QNetworkReply; class UsageTrackerPlugin : public ExtensionSystem::IPlugin { Q_OBJECT @@ -47,11 +49,14 @@ private slots: void onAutopilotConnect(); void trackUsage(); void collectUsageParameters(QMap ¶meters); + void onFinished(QNetworkReply *reply); private: TelemetryManager *m_telemetryManager; + QString m_lastHash; QString getUAVFieldValue(UAVObjectManager *objManager, QString objectName, QString fieldName, int index = 0) const; QString getQueryHash(QString source) const; + Core::Internal::GeneralSettings * getGeneralSettings() const; bool shouldSend(const QString &hash); };