1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-18 08:54:15 +01:00

OP-1777 Added handling of network issues.

Changed local time to timezone.
Re-factored some functions.
This commit is contained in:
m_thread 2015-03-16 20:38:56 +01:00
parent 14f2bb6ce9
commit 6a89427aa8
2 changed files with 26 additions and 9 deletions

View File

@ -29,13 +29,13 @@
#include <QStringList>
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
#include <extensionsystem/pluginmanager.h>
#include <QCheckBox>
#include <QDebug>
#include <QMessageBox>
#include <uavobjectutil/devicedescriptorstruct.h>
#include <uavobjectutil/uavobjectutilmanager.h>
#include <coreplugin/generalsettings.h>
#include "version_info/version_info.h"
#include "coreplugin/icore.h"
#include <uavtalk/telemetrymanager.h>
@ -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>();
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<QString, QString> &paramete
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<QString, QString> &paramete
}
}
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<Core::Internal::GeneralSettings>();
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;
}
}

View File

@ -28,9 +28,11 @@
#define USAGETRACKERPLUGIN_H
#include <extensionsystem/iplugin.h>
#include <coreplugin/generalsettings.h>
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<QString, QString> &parameters);
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);
};