diff --git a/resources/share/shared/bootstrap/bootstrap.json b/resources/share/shared/bootstrap/bootstrap.json index 85fe49eb4..380e02baf 100644 --- a/resources/share/shared/bootstrap/bootstrap.json +++ b/resources/share/shared/bootstrap/bootstrap.json @@ -22,7 +22,6 @@ } ] }, - "pingIntervalSecs": 180, "predefinedServers": { "containerbase": [ ] diff --git a/src/blackcore/CMakeLists.txt b/src/blackcore/CMakeLists.txt index c427a1935..b8a48f362 100644 --- a/src/blackcore/CMakeLists.txt +++ b/src/blackcore/CMakeLists.txt @@ -99,12 +99,10 @@ add_library(core SHARED db/databaseutils.h db/modeldatareader.h db/infodatareader.h - db/networkwatchdog.h db/databasereader.h db/databaseauthentication.cpp db/databasewriter.cpp db/databasereaderconfig.h - db/networkwatchdog.cpp db/backgrounddataupdater.h db/databaseutils.cpp db/modeldatareader.cpp diff --git a/src/blackcore/application.cpp b/src/blackcore/application.cpp index 7f50ea346..c9299e148 100644 --- a/src/blackcore/application.cpp +++ b/src/blackcore/application.cpp @@ -3,7 +3,6 @@ #include "blackcore/application.h" #include "blackconfig/buildconfig.h" -#include "blackcore/db/networkwatchdog.h" #include "blackcore/context/contextnetwork.h" #include "blackcore/context/contextsimulatorimpl.h" #include "blackcore/context/contextaudio.h" @@ -84,7 +83,6 @@ namespace BlackCore {} CApplication::CApplication(const QString &applicationName, CApplicationInfo::Application application, bool init) : CIdentifiable(this), - m_networkConfigManager(new QNetworkConfigurationManager(this)), m_accessManager(new QNetworkAccessManager(this)), m_applicationInfo(application), m_applicationName(applicationName), m_coreFacadeConfig(CCoreFacadeConfig::allEmpty()) @@ -613,7 +611,6 @@ namespace BlackCore QNetworkReply *CApplication::postToNetwork(const QNetworkRequest &request, int logId, QHttpMultiPart *multiPart, const CSlot &callback) { - if (!this->isNetworkAccessible()) { return nullptr; } if (multiPart->thread() != m_accessManager->thread()) { multiPart->moveToThread(m_accessManager->thread()); @@ -683,46 +680,6 @@ namespace BlackCore m_cookieManager->deleteAllCookies(); } - CNetworkWatchdog *CApplication::getNetworkWatchdog() const - { - return m_networkWatchDog; - } - - void CApplication::setSwiftDbAccessibility(bool accessible) - { - if (!m_networkWatchDog) { return; } - m_networkWatchDog->setDbAccessibility(accessible); - } - - int CApplication::triggerNetworkWatchdogChecks() - { - if (!m_networkWatchDog) { return -1; } - return m_networkWatchDog->triggerCheck(); - } - - bool CApplication::isNetworkAccessible() const - { - // skip test if there is no proper network config - if (m_networkWatchDog && m_networkWatchDog->isNetworkAccessibilityCheckDisabled()) { return true; } - - Q_ASSERT_X(m_accessManager, Q_FUNC_INFO, "no access manager"); - const QNetworkAccessManager::NetworkAccessibility a = m_accessManager->networkAccessible(); - if (a == QNetworkAccessManager::Accessible) { return true; } - - // currently I also accept unknown because of that issue with Network Manager - return a == QNetworkAccessManager::UnknownAccessibility; - } - - bool CApplication::isInternetAccessible() const - { - return m_networkWatchDog && m_networkWatchDog->isInternetAccessible(); - } - - bool CApplication::isSwiftDbAccessible() const - { - return m_networkWatchDog && m_networkWatchDog->isSwiftDbAccessible(); - } - void CApplication::exit(int retcode) { if (sApp) { instance()->gracefulShutdown(); } @@ -861,12 +818,6 @@ namespace BlackCore new CWebDataServices(m_webReadersUsed, m_dbReaderConfig, {}, this)); Q_ASSERT_X(m_webDataServices, Q_FUNC_INFO, "Missing web services"); - // watchdog - if (m_networkWatchDog) - { - connect(m_webDataServices.data(), &CWebDataServices::swiftDbDataRead, m_networkWatchDog, &CNetworkWatchdog::setDbAccessibility); - } - emit this->webDataServicesStarted(true); } else @@ -955,9 +906,6 @@ namespace BlackCore m_inputManager->releaseDevices(); } - // mark as shutdown - if (m_networkWatchDog) { m_networkWatchDog->gracefulShutdown(); } - // save settings (but only when application was really alive) if (m_parsed && m_saveSettingsOnShutdown) { @@ -997,12 +945,6 @@ namespace BlackCore m_setupReader.reset(); } - if (m_networkWatchDog) - { - m_networkWatchDog->quitAndWait(); - m_networkWatchDog = nullptr; - } - CLogMessage(this).info(u"Graceful shutdown of CApplication, shutdown of logger"); m_fileLogger->close(); @@ -1022,135 +964,18 @@ namespace BlackCore // void } - void CApplication::onChangedNetworkAccessibility(QNetworkAccessManager::NetworkAccessibility accessible) - { - switch (accessible) - { - case QNetworkAccessManager::Accessible: - m_accessManager->setNetworkAccessible(accessible); // for some reasons the queried value still is unknown - CLogMessage(this).info(u"Network is accessible"); - break; - case QNetworkAccessManager::NotAccessible: - CLogMessage(this).error(u"Network not accessible"); - break; - default: - CLogMessage(this).warning(u"Network accessibility unknown"); - break; - } - } - - void CApplication::onChangedInternetAccessibility(bool accessible) - { - if (accessible) { CLogMessage(this).info(u"Internet reported accessible"); } - else { CLogMessage(this).warning(u"Internet not accessible"); } - - emit this->changedInternetAccessibility(accessible); - } - - void CApplication::onChangedSwiftDbAccessibility(bool accessible, const CUrl &url) - { - if (accessible) - { - CLogMessage(this).info(u"swift DB reported accessible: '%1'") << url.toQString(); - } - else - { - CLogMessage(this).warning(u"swift DB not accessible: '%1'") << url.toQString(); - if (m_networkWatchDog) - { - CLogMessage(this).warning(m_networkWatchDog->getCheckInfo()); - } - this->triggerNetworkAccessibilityCheck(10 * 1000); // crosscheck after some time - } - - emit this->changedSwiftDbAccessibility(accessible, url); - } - - void CApplication::onNetworkConfigurationsUpdateCompleted() - { - Q_ASSERT_X(m_networkConfigManager, Q_FUNC_INFO, "Need network config manager"); - if (this->isShuttingDown()) { return; } - const QList allConfigurations = m_networkConfigManager->allConfigurations(); - if (allConfigurations.isEmpty()) - { - // this is an odd situation we cannot handle, network check will be disabled - if (m_networkWatchDog && m_networkWatchDog->isNetworkAccessibilityCheckEnabled()) - { - m_networkWatchDog->disableNetworkAccessibilityCheck(true); - m_accessManager->setNetworkAccessible(QNetworkAccessManager::Accessible); - CLogMessage(this).warning(u"No network configurations found, disabling network accessibility checks"); - } - } - else - { - int activeCount = 0; - int validCount = 0; - for (const QNetworkConfiguration &config : allConfigurations) - { - if (config.state() == QNetworkConfiguration::Active) - { - activeCount++; - m_noNwAccessPoint = false; - } - if (config.isValid()) { validCount++; } - } - Q_UNUSED(validCount) - - const bool canStartIAP = (m_networkConfigManager->capabilities() & QNetworkConfigurationManager::CanStartAndStopInterfaces); - const bool disable = activeCount < 1; // only inactive - if (disable && m_networkWatchDog && m_networkWatchDog->isNetworkAccessibilityCheckEnabled()) - { - CLogMessage(this).warning(u"Disabling network accessibility check in watchdog"); - m_networkWatchDog->disableNetworkAccessibilityCheck(disable); - } - - // Is there default access point, use it - const QNetworkConfiguration config = m_networkConfigManager->defaultConfiguration(); - if (!config.isValid() || (!canStartIAP && config.state() != QNetworkConfiguration::Active)) - { - if (!m_noNwAccessPoint) - { - m_noNwAccessPoint = true; - CLogMessage(this).warning(u"No network access point found for swift"); - } - } - } - } - void CApplication::initNetwork() { if (!m_accessManager) { m_accessManager = new QNetworkAccessManager(this); } - if (!m_networkConfigManager) { m_networkConfigManager = new QNetworkConfigurationManager(this); } - if (!m_networkWatchDog) - { - // CNetworkWatchdog *nwWatchdog = new CNetworkWatchdog(this->isNetworkAccessible(), this); - CNetworkWatchdog *nwWatchdog = new CNetworkWatchdog(true, this); // WLAN bug, default to true - m_networkWatchDog = nwWatchdog; // not yet started - m_cookieManager = new CCookieManager({}, this); - m_cookieManager->setParent(m_accessManager); - m_accessManager->setCookieJar(m_cookieManager); - } + m_cookieManager = new CCookieManager({}, this); + m_cookieManager->setParent(m_accessManager); + m_accessManager->setCookieJar(m_cookieManager); // Init network Q_ASSERT_X(m_accessManager, Q_FUNC_INFO, "Need QAM"); - Q_ASSERT_X(m_networkConfigManager, Q_FUNC_INFO, "Need config manager"); - - // into watchdog - connect(m_accessManager, &QNetworkAccessManager::networkAccessibleChanged, m_networkWatchDog, &CNetworkWatchdog::setNetworkAccessibility, Qt::QueuedConnection); - connect(m_networkConfigManager, &QNetworkConfigurationManager::onlineStateChanged, m_networkWatchDog, &CNetworkWatchdog::setOnline, Qt::QueuedConnection); - connect(m_networkConfigManager, &QNetworkConfigurationManager::updateCompleted, m_networkWatchDog, &CNetworkWatchdog::networkConfigurationsUpdateCompleted, Qt::QueuedConnection); - connect(m_networkConfigManager, &QNetworkConfigurationManager::updateCompleted, this, &CApplication::onNetworkConfigurationsUpdateCompleted, Qt::QueuedConnection); - m_networkConfigManager->updateConfigurations(); - - // out from watchdog to application - connect(m_networkWatchDog, &CNetworkWatchdog::changedNetworkAccessible, this, &CApplication::onChangedNetworkAccessibility, Qt::QueuedConnection); - connect(m_networkWatchDog, &CNetworkWatchdog::changedInternetAccessibility, this, &CApplication::onChangedInternetAccessibility, Qt::QueuedConnection); - connect(m_networkWatchDog, &CNetworkWatchdog::changedSwiftDbAccessibility, this, &CApplication::onChangedSwiftDbAccessibility, Qt::QueuedConnection); CLogMessage::preformatted(CNetworkUtils::createNetworkReport(m_accessManager)); - m_networkWatchDog->start(QThread::LowestPriority); - m_networkWatchDog->startUpdating(10); // enable by setting accessible // http://doc.qt.io/qt-5/qnetworkaccessmanager.html#setNetworkAccessible @@ -1159,7 +984,7 @@ namespace BlackCore // create a network report in the log QTimer::singleShot(4000, this, [=] { if (!sApp || sApp->isShuttingDown()) { return; } - const QString r = CNetworkUtils::createNetworkConfigurationReport(m_networkConfigManager, m_accessManager); + const QString r = CNetworkUtils::createNetworkAccessManagerReport(m_accessManager); CLogMessage(this).info(u"Network report:\n%1") << r; }); } @@ -1601,19 +1426,6 @@ namespace BlackCore }); } - void CApplication::triggerNetworkAccessibilityCheck(int deferredMs) - { - if (this->isShuttingDown()) { return; } - if (!m_networkWatchDog) { return; } - QTimer::singleShot(deferredMs, m_accessManager, [=] { - // should be now in QAM thread - if (!sApp || sApp->isShuttingDown()) { return; } - Q_ASSERT_X(CThreadUtils::isInThisThread(sApp->m_accessManager), Q_FUNC_INFO, "Wrong thread, must be QAM thread"); - const QNetworkAccessManager::NetworkAccessibility accessibility = m_accessManager->networkAccessible(); - m_networkWatchDog->setNetworkAccessibility(accessibility); - }); - } - QNetworkReply *CApplication::httpRequestImpl( const QNetworkRequest &request, int logId, const CApplication::CallbackSlot &callback, int maxRedirects, NetworkRequestOrPostFunction requestOrPostMethod) @@ -1627,7 +1439,6 @@ namespace BlackCore const CallbackSlot &callback, const ProgressSlot &progress, int maxRedirects, NetworkRequestOrPostFunction getPostOrDeleteRequest) { if (this->isShuttingDown()) { return nullptr; } - if (!this->isNetworkAccessible()) { return nullptr; } QWriteLocker locker(&m_accessManagerLock); Q_ASSERT_X(m_accessManager->thread() == qApp->thread(), Q_FUNC_INFO, "Network manager supposed to be in main thread"); diff --git a/src/blackcore/application.h b/src/blackcore/application.h index 064244d79..37feba6c3 100644 --- a/src/blackcore/application.h +++ b/src/blackcore/application.h @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -69,10 +68,6 @@ namespace BlackCore class IContextOwnAircraft; class IContextSimulator; } - namespace Db - { - class CNetworkWatchdog; - } /*! * Our runtime. Normally one instance is to be initialized at the beginning of main, and thereafter @@ -433,26 +428,6 @@ namespace BlackCore //! Delete all cookies from cookie manager void deleteAllCookies(); - //! Get the watchdog - //! \private mostly for UNIT tests etc, normally not meant to be used directly - Db::CNetworkWatchdog *getNetworkWatchdog() const; - - //! Allows to mark the DB as "up" or "down" - //! \see BlackCore::Db::CNetworkWatchdog::setDbAccessibility - void setSwiftDbAccessibility(bool accessible); - - //! \copydoc BlackCore::Db::CNetworkWatchdog::triggerCheck - int triggerNetworkWatchdogChecks(); - - //! Is network accessible - bool isNetworkAccessible() const; - - //! \copydoc BlackCore::Db::CNetworkWatchdog::isInternetAccessible - bool isInternetAccessible() const; - - //! \copydoc BlackCore::Db::CNetworkWatchdog::isSwiftDbAccessible - bool isSwiftDbAccessible() const; - //! Access to access manager //! \remark supposed to be used only in special cases const QNetworkAccessManager *getNetworkAccessManager() const { return m_accessManager; } @@ -461,10 +436,6 @@ namespace BlackCore //! \remark supposed to be used only in special cases QNetworkAccessManager *getNetworkAccessManager() { return m_accessManager; } - //! Access to configuration manager - //! \remark supposed to be used only in special cases - const QNetworkConfigurationManager *getNetworkConfigurationManager() const { return m_networkConfigManager; } - //! Web data services available? //! \threadsafe bool hasWebDataServices() const; @@ -545,12 +516,6 @@ namespace BlackCore //! Web data services started void webDataServicesStarted(bool success); - //! Internet accessibility changed - void changedInternetAccessibility(bool accessible); - - //! DB accessibility changed - void changedSwiftDbAccessibility(bool accessible, const BlackMisc::Network::CUrl &testedUrl); - //! About to shutdown void aboutToShutdown(); @@ -623,18 +588,6 @@ namespace BlackCore //! Display version message void cmdLineVersionMessage(); - //! Problem with network access manager - void onChangedNetworkAccessibility(QNetworkAccessManager::NetworkAccessibility accessible); - - //! Changed internet accessibility - void onChangedInternetAccessibility(bool accessible); - - //! Changed swift DB accessibility - void onChangedSwiftDbAccessibility(bool accessible, const BlackMisc::Network::CUrl &url); - - //! Network configurations update completed - void onNetworkConfigurationsUpdateCompleted(); - //! Init network void initNetwork(); @@ -669,10 +622,6 @@ namespace BlackCore int logId, const CallbackSlot &callback, const ProgressSlot &progress, int maxRedirects, NetworkRequestOrPostFunction getPostOrDeleteRequest); - //! Triggers a check of the network accessibility - //! \remark this is a check that will double check that the watchdog will receive the correct QNetworkAccessManager::NetworkAccessibility - void triggerNetworkAccessibilityCheck(int deferredMs); - //! Write meta information into the application directory so other swift versions can display them void tagApplicationDataDirectory(); @@ -691,9 +640,7 @@ namespace BlackCore bool parseCommandLineArguments(); CInputManager *m_inputManager = nullptr; //!< Input devices and hotkeys - QNetworkConfigurationManager *m_networkConfigManager = nullptr; //!< configuration QNetworkAccessManager *m_accessManager = nullptr; //!< single network access manager - Db::CNetworkWatchdog *m_networkWatchDog = nullptr; //!< checking DB/internet access BlackMisc::CApplicationInfo m_applicationInfo; //!< Application if specified QScopedPointer m_coreFacade; //!< core facade if any QScopedPointer m_setupReader; //!< setup reader @@ -706,7 +653,6 @@ namespace BlackCore CCoreFacadeConfig m_coreFacadeConfig; //!< Core facade config if any CWebReaderFlags::WebReader m_webReadersUsed; //!< Readers to be used Db::CDatabaseReaderConfigList m_dbReaderConfig; //!< Load or used caching? - bool m_noNwAccessPoint = false; //!< no network access point? bool m_useContexts = false; //!< use contexts bool m_devFlag = false; //!< dev. environment bool m_saveSettingsOnShutdown = true; //!< saving all settings on shutdown diff --git a/src/blackcore/context/contextsimulatorimpl.cpp b/src/blackcore/context/contextsimulatorimpl.cpp index 7ee52978f..49ede4041 100644 --- a/src/blackcore/context/contextsimulatorimpl.cpp +++ b/src/blackcore/context/contextsimulatorimpl.cpp @@ -271,10 +271,6 @@ namespace BlackCore::Context { if (m_debugEnabled) { CLogMessage(this, CLogCategories::contextSlot()).debug() << Q_FUNC_INFO; } CStatusMessageList msgs; - if (!sApp || !sApp->isNetworkAccessible()) - { - msgs.push_back(CStatusMessage(this).validationError(u"No network interface, simulation will not work properly")); - } const CSimulatorInfo simulators = this->simulatorsWithInitializedModelSet(); if (simulators.isNoSimulator()) { diff --git a/src/blackcore/data/globalsetup.cpp b/src/blackcore/data/globalsetup.cpp index 5dc3241fc..409dc3fa2 100644 --- a/src/blackcore/data/globalsetup.cpp +++ b/src/blackcore/data/globalsetup.cpp @@ -90,32 +90,6 @@ namespace BlackCore::Data return getDbRootDirectoryUrl().withAppendedPath("/service/jsonauthenticate.php").withSwitchedScheme("https", m_dbHttpsPort); } - CUrl CGlobalSetup::getDbClientPingServiceUrl() const - { - return getDbRootDirectoryUrl().withAppendedPath("/service/clientping.php").withSwitchedScheme("https", m_dbHttpsPort); - } - - CUrl CGlobalSetup::getDbClientPingServiceUrl(PingType type) const - { - CUrl pingUrl = this->getDbClientPingServiceUrl(); - if (pingUrl.isEmpty()) { CUrl(); } - - pingUrl.appendQuery("uuid", QSysInfo::machineUniqueId()); - if (type.testFlag(PingLogoff)) { pingUrl.appendQuery("logoff", "true"); } - if (type.testFlag(PingShutdown)) { pingUrl.appendQuery("shutdown", "true"); } - if (type.testFlag(PingStarted)) { pingUrl.appendQuery("started", "true"); } - pingUrl.appendQuery("os", CBuildConfig::getPlatformString()); - if (CBuildConfig::isLocalDeveloperDebugBuild()) { pingUrl.appendQuery("dev", "true"); } - if (sApp) - { - const CCrashInfo ci = CCrashHandler::instance()->getCrashInfo(); - pingUrl.appendQuery("application", sApp->getApplicationNameAndVersion()); - if (!ci.getSimulatorString().isEmpty()) { pingUrl.appendQuery("fs", ci.getSimulatorString()); } - if (!ci.getFlightNetworkString().isEmpty()) { pingUrl.appendQuery("network", ci.getFlightNetworkString()); } - } - return pingUrl; - } - CUrl CGlobalSetup::getAlphaXSwiftBusFilesServiceUrl() const { return getDbRootDirectoryUrl().withAppendedPath("/service/jsonalphaxswiftbusfiles.php").withSwitchedScheme("https", m_dbHttpsPort); @@ -181,7 +155,7 @@ namespace BlackCore::Data % u"Help URLs: " % m_onlineHelpUrls.toQString(i18n) % separator; s += - u"DB root directory: " % getDbRootDirectoryUrl().toQString(i18n) % separator % u"ICAO DB reader: " % getDbIcaoReaderUrl().toQString(i18n) % separator % u"Model DB reader: " % getDbModelReaderUrl().toQString(i18n) % separator % u"Airport DB reader: " % getDbAirportReaderUrl().toQString(i18n) % separator % u"DB home page: " % getDbHomePageUrl().toQString(i18n) % separator % u"DB login service: " % getDbLoginServiceUrl().toQString(i18n) % separator % u"DB client ping service: " % getDbClientPingServiceUrl().toQString(i18n); + u"DB root directory: " % getDbRootDirectoryUrl().toQString(i18n) % separator % u"ICAO DB reader: " % getDbIcaoReaderUrl().toQString(i18n) % separator % u"Model DB reader: " % getDbModelReaderUrl().toQString(i18n) % separator % u"Airport DB reader: " % getDbAirportReaderUrl().toQString(i18n) % separator % u"DB home page: " % getDbHomePageUrl().toQString(i18n) % separator % u"DB login service: " % getDbLoginServiceUrl().toQString(i18n) % separator; s += u"VATSIM METARs: " % getVatsimMetarsUrls().toQString(i18n) % separator % u"VATSIM data file: " % getVatsimDataFileUrls().toQString(i18n) % separator % u"VATSIM server file: " % getVatsimServerFileUrl().toQString(i18n) % separator @@ -207,7 +181,6 @@ namespace BlackCore::Data case IndexDbHttpPort: return QVariant::fromValue(m_dbHttpPort); case IndexDbHttpsPort: return QVariant::fromValue(m_dbHttpsPort); case IndexDbLoginService: return QVariant::fromValue(this->getDbLoginServiceUrl()); - case IndexDbClientPingService: return QVariant::fromValue(this->getDbClientPingServiceUrl()); case IndexVatsimStatus: return QVariant::fromValue(m_vatsimStatusFileUrls); case IndexVatsimData: return QVariant::fromValue(m_vatsimDataFileUrls); case IndexVatsimServer: return QVariant::fromValue(m_vatsimServerFileUrl); @@ -239,7 +212,6 @@ namespace BlackCore::Data case IndexDbHttpPort: m_dbHttpPort = variant.toInt(); break; case IndexDbHttpsPort: m_dbHttpsPort = variant.toInt(); break; case IndexDbLoginService: break; // cannot be changed - case IndexDbClientPingService: break; // cannot be changed case IndexVatsimData: m_vatsimDataFileUrls = variant.value(); break; case IndexVatsimServer: m_vatsimServerFileUrl = variant.value(); break; case IndexVatsimHttpFsd: m_vatsimFsdHttpUrl = variant.value(); break; diff --git a/src/blackcore/data/globalsetup.h b/src/blackcore/data/globalsetup.h index 0cd4d1590..202e3e90b 100644 --- a/src/blackcore/data/globalsetup.h +++ b/src/blackcore/data/globalsetup.h @@ -38,7 +38,6 @@ namespace BlackCore::Data IndexDbHttpPort, IndexDbHttpsPort, IndexDbLoginService, - IndexDbClientPingService, IndexVatsimStatus, IndexVatsimMetars, IndexVatsimData, @@ -53,17 +52,6 @@ namespace BlackCore::Data IndexAfvMapUrl }; - //! 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) - //! Default constructor CGlobalSetup(); @@ -114,16 +102,6 @@ namespace BlackCore::Data //! \remark based on getDbRootDirectoryUrl BlackMisc::Network::CUrl getDbLoginServiceUrl() const; - //! DB ping service - //! \remark based on getDbRootDirectoryUrl - BlackMisc::Network::CUrl getDbClientPingServiceUrl() const; - - //! Ping the DB server, fire and forget (no feedback etc) - BlackMisc::Network::CUrl getDbClientPingServiceUrl(PingType type) const; - - //! Seconds between pings - qint64 getDbClientPingIntervalSecs() const { return m_pingIntervalSecs; } - //! alpha XSwiftBus files available BlackMisc::Network::CUrl getAlphaXSwiftBusFilesServiceUrl() const; @@ -202,7 +180,6 @@ namespace BlackCore::Data private: int m_dbHttpPort = 80; //!< port int m_dbHttpsPort = 443; //!< SSL port - qint64 m_pingIntervalSecs = 180; //!< seconds between datastore pings QString m_mappingMinimumVersion; //!< minimum version BlackMisc::Network::CUrl m_crashReportServerUrl; //!< crash report server BlackMisc::Network::CUrl m_dbRootDirectoryUrl; //!< Root directory of DB @@ -228,7 +205,6 @@ namespace BlackCore::Data BLACK_METAMEMBER(dbRootDirectoryUrl, 0, RequiredForJson), BLACK_METAMEMBER(dbHttpPort, 0, RequiredForJson), BLACK_METAMEMBER(dbHttpsPort, 0, RequiredForJson), - BLACK_METAMEMBER(pingIntervalSecs, 0, RequiredForJson), BLACK_METAMEMBER(vatsimStatusFileUrls, 0, RequiredForJson), BLACK_METAMEMBER(vatsimDataFileUrls, 0, RequiredForJson), BLACK_METAMEMBER(vatsimServerFileUrl, 0, RequiredForJson), @@ -250,8 +226,5 @@ namespace BlackCore::Data } // ns Q_DECLARE_METATYPE(BlackCore::Data::CGlobalSetup) -Q_DECLARE_METATYPE(BlackCore::Data::CGlobalSetup::PingTypeFlag) -Q_DECLARE_METATYPE(BlackCore::Data::CGlobalSetup::PingType) -Q_DECLARE_OPERATORS_FOR_FLAGS(BlackCore::Data::CGlobalSetup::PingType) #endif // guard diff --git a/src/blackcore/db/airportdatareader.cpp b/src/blackcore/db/airportdatareader.cpp index bf629a771..f1ffe3d55 100644 --- a/src/blackcore/db/airportdatareader.cpp +++ b/src/blackcore/db/airportdatareader.cpp @@ -244,11 +244,6 @@ namespace BlackCore::Db this->threadAssertCheck(); if (!this->doWorkCheck()) { return; } entity &= CEntityFlags::AirportEntity; - if (!this->isInternetAccessible()) - { - emit this->dataRead(entity, CEntityFlags::ReadSkipped, 0, {}); - return; - } if (entity.testFlag(CEntityFlags::AirportEntity)) { diff --git a/src/blackcore/db/databasereader.cpp b/src/blackcore/db/databasereader.cpp index f21fd371f..c17064401 100644 --- a/src/blackcore/db/databasereader.cpp +++ b/src/blackcore/db/databasereader.cpp @@ -213,7 +213,6 @@ namespace BlackCore::Db // ps_read is implemented in the derived classes if (entities == CEntityFlags::NoEntity) { return; } - if (!this->isInternetAccessible(QStringLiteral("No network/internet access, will not read %1").arg(CEntityFlags::flagToString(entities)))) { return; } //! https://dev.swift-project.org/T490 QPointer myself(this); @@ -381,8 +380,6 @@ namespace BlackCore::Db int CDatabaseReader::requestHeadersOfSharedFiles(CEntityFlags::Entity entities) { - if (!this->isInternetAccessible(QStringLiteral("No network/internet access, will not read shared file headers for %1").arg(CEntityFlags::flagToString(entities)))) { return false; } - CEntityFlags::Entity allEntities = entities & CEntityFlags::AllDbEntitiesNoInfoObjects; CEntityFlags::Entity currentEntity = CEntityFlags::iterateDbEntities(allEntities); const CUrl urlSharedDbdata = CDatabaseReader::getSharedDbdataDirectoryUrl(); diff --git a/src/blackcore/db/icaodatareader.cpp b/src/blackcore/db/icaodatareader.cpp index 356d37349..a2c9cf1b1 100644 --- a/src/blackcore/db/icaodatareader.cpp +++ b/src/blackcore/db/icaodatareader.cpp @@ -171,12 +171,6 @@ namespace BlackCore::Db if (!this->doWorkCheck()) { return; } entities &= CEntityFlags::AllIcaoCountriesCategory; - if (!this->isInternetAccessible()) - { - emit this->dataRead(entities, CEntityFlags::ReadSkipped, 0, {}); - return; - } - CEntityFlags::Entity entitiesTriggered = CEntityFlags::NoEntity; CUrl url; if (entities.testFlag(CEntityFlags::AircraftIcaoEntity)) diff --git a/src/blackcore/db/modeldatareader.cpp b/src/blackcore/db/modeldatareader.cpp index bf14c9a07..de6f0cd17 100644 --- a/src/blackcore/db/modeldatareader.cpp +++ b/src/blackcore/db/modeldatareader.cpp @@ -182,11 +182,6 @@ namespace BlackCore::Db this->threadAssertCheck(); if (!this->doWorkCheck()) { return; } entities &= CEntityFlags::DistributorLiveryModel; - if (!this->isInternetAccessible()) - { - emit this->dataRead(entities, CEntityFlags::ReadSkipped, 0, {}); - return; - } CEntityFlags::Entity triggeredRead = CEntityFlags::NoEntity; CUrl url; diff --git a/src/blackcore/db/networkwatchdog.cpp b/src/blackcore/db/networkwatchdog.cpp deleted file mode 100644 index 02a8bb8c7..000000000 --- a/src/blackcore/db/networkwatchdog.cpp +++ /dev/null @@ -1,356 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors -// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 - -#include "blackcore/db/networkwatchdog.h" -#include "blackcore/application.h" -#include "blackmisc/logmessage.h" -#include "blackmisc/network/networkutils.h" - -#include -#include -#include - -using namespace BlackMisc; -using namespace BlackMisc::Network; -using namespace BlackCore::Data; - -namespace BlackCore::Db -{ - const QStringList &CNetworkWatchdog::getLogCategories() - { - static const QStringList cats = CContinuousWorker::getLogCategories() + QStringList { - CLogCategories::swiftDbWebservice(), CLogCategories::webservice(), CLogCategories::network() - }; - return cats; - } - - CNetworkWatchdog::CNetworkWatchdog(bool networkAccessible, QObject *owner) : CContinuousWorker(owner, "swift DB watchdog") - { - Q_ASSERT_X(owner, Q_FUNC_INFO, "Need owner (normally sApp)"); - - m_networkAccessible = networkAccessible; - m_internetAccessible = networkAccessible; - m_dbAccessible = networkAccessible && m_checkDbAccessibility; - - m_updateTimer.setInterval(10 * 1000); - connect(&m_updateTimer, &QTimer::timeout, this, &CNetworkWatchdog::doWork); - } - - void CNetworkWatchdog::setDbAccessibility(bool accessible) - { - m_dbAccessible = accessible; - m_internetAccessible = m_internetAccessible && this->isNetworkkAccessibleOrCheckDisabled(); - - // restart timer - QPointer myself(this); - QTimer::singleShot(0, &m_updateTimer, [=] { - if (!myself) { return; } - m_updateTimer.start(); - }); - } - - bool CNetworkWatchdog::hasWorkingSharedUrl() const - { - if (!this->isNetworkkAccessibleOrCheckDisabled()) { return false; } - return !this->getWorkingSharedUrl().isEmpty(); - } - - CUrl CNetworkWatchdog::getWorkingSharedUrl() const - { - if (!this->isNetworkkAccessibleOrCheckDisabled()) { return CUrl(); } - QReadLocker l(&m_lockUrl); - return m_workingSharedUrl; - } - - int CNetworkWatchdog::triggerCheck() - { - if (!this->doWorkCheck()) { return false; } // senseless - if (m_checkInProgress) { return -1; } - - const int n = this->getCheckCount(); - const QPointer myself(this); - QTimer::singleShot(0, this, [=] { - if (!myself) { return; } - this->doWork(); - }); - return n; // triggered - } - - QString CNetworkWatchdog::getLastPingDbUrl() const - { - QReadLocker l(&m_lockUrl); - return m_lastPingUrl; - } - - QString CNetworkWatchdog::getCheckInfo() const - { - static const QString info("Network accessibility check: %1 | Internet accessible: %2 (good: %3 / bad: %4), swift DB accessible: %5 (good: %6 / bad: %7) DB last ping URL: '%8' canConnect: %9ms"); - const QString pUrl(this->getLastPingDbUrl()); - static const QString cct = QString::number(CanConnectTimeMs); - return info.arg(boolToEnabledDisabled(!this->isNetworkAccessibilityCheckDisabled()), boolToYesNo(this->isInternetAccessible())).arg(m_totalGoodCountInternet).arg(m_totalBadCountInternet).arg(boolToYesNo(this->isSwiftDbAccessible())).arg(m_totalGoodCountDb).arg(m_totalBadCountDb).arg(pUrl, cct); // cct has to be string, otherwise the % in the URL will be replaced - } - - void CNetworkWatchdog::setWorkingSharedUrl(const CUrl &workingUrl) - { - QWriteLocker l(&m_lockUrl); - m_workingSharedUrl = workingUrl; - } - - void CNetworkWatchdog::doWork() - { - if (!this->doWorkCheck()) { return; } - if (m_checkInProgress) { return; } - m_checkInProgress = true; - - // lazy init - if (!this->hasWorkingSharedUrl()) - { - this->initWorkingSharedUrlFromSetup(); - } - - // checks - do - { - const bool wasDbAvailable = m_dbAccessible; - const bool wasInternetAvailable = m_internetAccessible; - const bool networkAccessible = this->isNetworkkAccessibleOrCheckDisabled(); - const CUrl testUrl(CNetworkWatchdog::dbTestUrl()); - bool canConnectDb = m_checkDbAccessibility && networkAccessible; - if (canConnectDb) - { - // running here in background worker check twice - canConnectDb = CNetworkUtils::canConnect(testUrl, CanConnectTimeMs); - if (!canConnectDb) - { - canConnectDb = CNetworkUtils::canConnect(testUrl, CanConnectTimeMs); - } - } - - if (m_checkDbAccessibility && m_doDetailedCheck && canConnectDb) - { - const qint64 pingIntervalSecs = sApp->getGlobalSetup().getDbClientPingIntervalSecs(); - if (QDateTime::currentSecsSinceEpoch() >= pingIntervalSecs) - { - m_nextPingSecsSinceEpoch = QDateTime::currentSecsSinceEpoch() + pingIntervalSecs; - this->pingDbClientService(CGlobalSetup::PingStarted); - canConnectDb = m_lastClientPingSuccess; - } - } - - bool canConnectInternet = canConnectDb; - bool checkInternetAccess = !canConnectDb; - - m_dbAccessible = canConnectDb; - if (canConnectDb) - { - // DB available means internet available - m_internetAccessible = canConnectDb; - } - - // check shared URL - if (!this->doWorkCheck()) { break; } - if (m_checkSharedUrl && networkAccessible) - { - if (CNetworkUtils::canConnect(this->getWorkingSharedUrl())) - { - canConnectInternet = true; - checkInternetAccess = false; - } - else - { - const CUrl sharedUrl = this->getWorkingSharedUrl(); - if (!sharedUrl.isEmpty()) - { - canConnectInternet = true; - checkInternetAccess = false; - this->setWorkingSharedUrl(sharedUrl); - } - } - } - - // check internet access - if (!this->doWorkCheck()) { break; } - if (checkInternetAccess) - { - QString message; - static const QString testHost1("www.google.com"); // what else? - canConnectInternet = CNetworkUtils::canConnect(testHost1, 443, message, CanConnectTimeMs); // running in background worker - if (!canConnectInternet) - { - static const QString testHost2("www.microsoft.com"); // secondary test - canConnectInternet = CNetworkUtils::canConnect(testHost2, 80, message, CanConnectTimeMs); // running in background worker - } - if (canConnectInternet) { m_totalGoodCountInternet++; } - else { m_totalBadCountInternet++; } - } - m_internetAccessible = networkAccessible && canConnectInternet; - - // signals - this->triggerChangedSignals(wasDbAvailable, wasInternetAvailable); - } - while (false); - - m_updateTimer.start(); // restart - m_totalCheckCount++; - m_checkInProgress = false; - } - - bool CNetworkWatchdog::doWorkCheck() const - { - if (!sApp || sApp->isShuttingDown()) { return false; } - if (!this->isEnabled()) { return false; } - return true; - } - - void CNetworkWatchdog::setNetworkAccessibility(QNetworkAccessManager::NetworkAccessibility accessibility) - { - // avoid unnecessary signals - const int accessiblityInt = static_cast(accessibility); - if (m_networkAccessibility == accessiblityInt) { return; } - if (m_disableNetworkCheck) { return; } // ignore with disabled check - - // shift to thread - if (!CThreadUtils::isInThisThread(this)) - { - QPointer myself(this); - QTimer::singleShot(0, this, [=] { - if (!sApp || sApp->isShuttingDown() || !myself) { return; } - this->setNetworkAccessibility(accessibility); - }); - return; - } - - // set values - m_networkAccessibility = accessiblityInt; - const bool db = m_dbAccessible; - const bool internet = m_internetAccessible; - - // Intentionally rating unknown as "accessible" - if (accessibility == QNetworkAccessManager::NotAccessible) - { - m_networkAccessible = false; - m_dbAccessible = false; - m_internetAccessible = false; - this->triggerChangedSignals(db, internet); - } - else - { - m_networkAccessible = true; - const QPointer myself(this); - QTimer::singleShot(0, this, [=] { - if (!myself) { return; } - this->doWork(); - }); - } - - emit this->changedNetworkAccessible(accessibility); - } - - void CNetworkWatchdog::networkConfigurationsUpdateCompleted() - { - // void - } - - void CNetworkWatchdog::setOnline(bool online) - { - m_online = online; - } - - void CNetworkWatchdog::gracefulShutdown() - { - this->pingDbClientService(CGlobalSetup::PingCompleteShutdown); - this->quit(); - } - - void CNetworkWatchdog::pingDbClientService(CGlobalSetup::PingType type, bool force) - { - if (!sApp || sApp->isShuttingDown()) { return; } - if (!force && !this->isSwiftDbAccessible()) { return; } - const CGlobalSetup gs = sApp->getGlobalSetup(); - const CUrl pingUrl = gs.getDbClientPingServiceUrl(type); - sApp->getFromNetwork(pingUrl, { this, &CNetworkWatchdog::replyPingClientService }); - } - - bool CNetworkWatchdog::disableNetworkAccessibilityCheck(bool disable) - { - if (disable == m_disableNetworkCheck) { return false; } - m_disableNetworkCheck = disable; - return true; - } - - void CNetworkWatchdog::replyPingClientService(QNetworkReply *nwReply) - { - // init and clean up - QScopedPointer nw(nwReply); // delete reply - const bool ok = (nw->error() == QNetworkReply::NoError); - const QString errorString = nw->errorString(); - const QString url = nw->url().toString(); - nw->close(); - - if (!sApp || sApp->isShuttingDown()) { return; } - Q_ASSERT_X(CThreadUtils::isInThisThread(this), Q_FUNC_INFO, "Wrong thread"); - - m_lastClientPingSuccess = ok; - { - QWriteLocker l(&m_lockUrl); - m_lastPingUrl = url; - } - - if (ok) - { - // be a little less verbose - if ((m_totalGoodCountDb % 5 == 0) || m_consecutivePingBadCount > 0) - { - CLogMessage(this).info(u"Watchdog pinged '%1'") << url; - } - m_totalGoodCountDb++; - m_consecutivePingBadCount = 0; - } - else - { - m_totalBadCountDb++; - m_consecutivePingBadCount++; - if (m_logOwnMessages) - { - CStatusMessage(this).warning(u"Watchdog ping failed, error: '%1', total good/bad DB counts: %2/%3") << errorString << m_totalGoodCountDb << m_totalBadCountDb; - } - } - this->setDbAccessibility(ok); - } - - void CNetworkWatchdog::triggerChangedSignals(bool oldDbAccessible, bool oldInternetAccessible) - { - if (!this->doWorkCheck()) { return; } - - if (oldDbAccessible != m_dbAccessible) - { - const CUrl testUrl(this->dbTestUrl()); - emit this->changedSwiftDbAccessibility(m_dbAccessible, testUrl); - } - if (oldInternetAccessible != m_internetAccessible) - { - emit this->changedInternetAccessibility(m_internetAccessible); - } - } - - void CNetworkWatchdog::initWorkingSharedUrlFromSetup() - { - const CUrl workingUrl(CNetworkWatchdog::workingSharedUrlFromSetup()); // takes long - this->setWorkingSharedUrl(workingUrl); - } - - CUrl CNetworkWatchdog::dbTestUrl() - { - // requires global setup to be read - if (!sApp || sApp->isShuttingDown()) { return CUrl(); } - const CUrl testUrl(sApp->getGlobalSetup().getDbHomePageUrl()); - return testUrl; - } - - CUrl CNetworkWatchdog::workingSharedUrlFromSetup() - { - const CUrlList urls(sApp->getGlobalSetup().getSwiftSharedUrls()); - CFailoverUrlList failoverUrls(urls); - return failoverUrls.getRandomWorkingUrl(2, CanConnectTimeMs); // uses CNetworkUtils::canConnect - } -} // ns diff --git a/src/blackcore/db/networkwatchdog.h b/src/blackcore/db/networkwatchdog.h deleted file mode 100644 index b6fe446a4..000000000 --- a/src/blackcore/db/networkwatchdog.h +++ /dev/null @@ -1,192 +0,0 @@ -// SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors -// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1 - -//! \file - -#ifndef BLACKCORE_DB_NETWORKWATCHDOG_H -#define BLACKCORE_DB_NETWORKWATCHDOG_H - -#include "blackcore/data/globalsetup.h" -#include "blackcore/blackcoreexport.h" -#include "blackmisc/network/url.h" -#include "blackmisc/worker.h" -#include "blackmisc/logcategories.h" - -#include -#include -#include - -namespace BlackCore::Db -{ - //! Monitoring the swift DB, internet access, shared URLs - class BLACKCORE_EXPORT CNetworkWatchdog : public BlackMisc::CContinuousWorker - { - Q_OBJECT - - public: - //! Log categories - static const QStringList &getLogCategories(); - - //! Ctor - explicit CNetworkWatchdog(bool networkAccessible, QObject *owner); - - //! Network status changed, use this function to inform the watchdog - //! \threadsafe - void setNetworkAccessibility(QNetworkAccessManager::NetworkAccessibility accessibility); - - //! Configuration updates completed as reported by QNetworkConfigurationManager::updateCompleted - void networkConfigurationsUpdateCompleted(); - - //! Set online as reported by QNetworkConfigurationManager::onlineStateChanged - //! \threadsafe - void setOnline(bool online); - - //! DB available? - //! \threadsafe - bool isSwiftDbAccessible() const { return m_dbAccessible; } - - //! Set DB as avialable (from external) - //! \remark if data was read from DB, this can save another check - //! \threadsafe - void setDbAccessibility(bool accessible); - - //! DB is accessible - //! \threadsafe - void setDbIsAccessible() { this->setDbAccessibility(true); } - - //! DB is NOT accessible - //! \threadsafe - void setDbIsNotAccessible() { this->setDbAccessibility(false); } - - //! Check the DB availability, can disable the check - //! \threadsafe - void setCheckDbAccessibility(bool check) { m_checkDbAccessibility = check; } - - //! Check the shared URL, can disable the check - //! \threadsafe - void setCheckSharedUrl(bool check) { m_checkSharedUrl = check; } - - //! Do a detailed check via HTTP - //! \threadsafe - void setDoDetailedCheck(bool check) { m_doDetailedCheck = check; } - - //! Internet available? - //! \threadsafe - bool isInternetAccessible() const { return m_internetAccessible; } - - //! Accesible or check disabled? - bool isNetworkkAccessibleOrCheckDisabled() const { return m_networkAccessible || m_disableNetworkCheck; } - - //! Has working shared URL? - //! \threadsafe - bool hasWorkingSharedUrl() const; - - //! A working shared URL - //! \threadsafe - BlackMisc::Network::CUrl getWorkingSharedUrl() const; - - //! Log.own status messages - //! \threadsafe - void setLogOwnMessages(bool log) { m_logOwnMessages = log; } - - //! Run a check - int triggerCheck(); - - //! Number of completed checks - //! \threadsafe - int getCheckCount() const { return m_totalCheckCount; } - - //! Last URL used for ping /DB ping service) - QString getLastPingDbUrl() const; - - //! Number of completed checks - //! \threadsafe - QString getCheckInfo() const; - - //! Set working URL from external - //! \threadsafe - void setWorkingSharedUrl(const BlackMisc::Network::CUrl &workingUrl); - - //! Graceful shutdown - void gracefulShutdown(); - - //! Ping the DB server, fire and forget (no feedback etc) - void pingDbClientService(Data::CGlobalSetup::PingType type = Data::CGlobalSetup::PingUnspecific, bool force = false); - - //! Disable the network check - //! \remark if disabled network reports always accessible - //! \threadsafe - bool disableNetworkAccessibilityCheck(bool disable); - - //! Has network check been disabled? - //! \threadsafe - bool isNetworkAccessibilityCheckDisabled() const { return m_disableNetworkCheck; } - - //! Network check enabled? - //! \threadsafe - bool isNetworkAccessibilityCheckEnabled() const { return !this->isNetworkAccessibilityCheckDisabled(); } - - //! The URL being tested - //! \remark depends on BlackCore::Application::getGlobalSetup() - //! \private primarily accessible for unit tests - static BlackMisc::Network::CUrl dbTestUrl(); - - signals: - //! DB was available, but not longer is and vice versa - void changedSwiftDbAccessibility(bool available, const BlackMisc::Network::CUrl &url); - - //! Internet was available, but not longer is and vice versa - void changedInternetAccessibility(bool available); - - //! Cleaned version of QNetworkAccessManager::networkAccessibleChanged - //! \remark does only fire if the accessibility changed - void changedNetworkAccessible(QNetworkAccessManager::NetworkAccessibility accessible); - - private: - static constexpr int CanConnectTimeMs = 5000; - - //! Do work, i.e. check connectivity - void doWork(); - - //! Do check - bool doWorkCheck() const; - - //! Trigger the changed signals and avoid unneccessary signals - void triggerChangedSignals(bool oldDbAccessible, bool oldInternetAccessible); - - //! Init a working shared URL - void initWorkingSharedUrlFromSetup(); - - //! Received reply of client service ping - void replyPingClientService(QNetworkReply *nwReply); - - //! Obtain working DB data file location URL - //! \remark depends on BlackCore::Application::getGlobalSetup() - static BlackMisc::Network::CUrl workingSharedUrlFromSetup(); - - std::atomic_bool m_logOwnMessages { true }; - std::atomic_bool m_doDetailedCheck { true }; - std::atomic_bool m_networkAccessible { true }; - std::atomic_bool m_disableNetworkCheck { false }; //!< if this is true, network accessible always reports true/accessible - std::atomic_bool m_online { true }; - std::atomic_bool m_internetAccessible { true }; - std::atomic_bool m_dbAccessible { true }; - std::atomic_bool m_lastClientPingSuccess { true }; //!< ping swift DB client service, real HTTP response - std::atomic_bool m_checkDbAccessibility { true }; - std::atomic_bool m_checkSharedUrl { true }; - std::atomic_bool m_checkInProgress { false }; //!< a check is currently in progress - std::atomic m_nextPingSecsSinceEpoch { 0 }; //!< time at which next ping will be sent - std::atomic_int m_networkAccessibility { QNetworkAccessManager::Accessible }; //!< last state - std::atomic_int m_totalCheckCount { 0 }; //!< counting number of checks - std::atomic_int m_totalBadCountDb { 0 }; //!< Total number of DB failing counts (only real responses when tried) - std::atomic_int m_totalBadCountInternet { 0 }; //!< Total number of Internet failing count (only when network is accessible) - std::atomic_int m_totalGoodCountDb { 0 }; - std::atomic_int m_totalGoodCountInternet { 0 }; - std::atomic_int m_consecutivePingBadCount { 0 }; //!< Bad count of ping until a godd state is received - QString m_lastPingUrl; - BlackMisc::Network::CUrl m_workingSharedUrl; - mutable QReadWriteLock m_lockUrl; - }; -} // ns - -#endif // guard diff --git a/src/blackcore/threadedreader.cpp b/src/blackcore/threadedreader.cpp index 01a66f42d..98535ce1d 100644 --- a/src/blackcore/threadedreader.cpp +++ b/src/blackcore/threadedreader.cpp @@ -61,16 +61,6 @@ namespace BlackCore return delta <= timeLastMs; } - bool CThreadedReader::isInternetAccessible(const QString &logWarningMessage) const - { - const bool a = sApp->isInternetAccessible(); - if (!a && !logWarningMessage.isEmpty()) - { - CLogMessage(this).warning(logWarningMessage); - } - return a; - } - void CThreadedReader::startReader() { Q_ASSERT(m_initialTime > 0); diff --git a/src/blackcore/threadedreader.h b/src/blackcore/threadedreader.h index 98d8e5148..620103d43 100644 --- a/src/blackcore/threadedreader.h +++ b/src/blackcore/threadedreader.h @@ -50,10 +50,6 @@ namespace BlackCore //! \threadsafe bool updatedWithinLastMs(qint64 timeLastMs); - //! Network accessible? - //! \param logWarningMessage optional warning if not accessible - bool isInternetAccessible(const QString &logWarningMessage = {}) const; - //! Is marked as read failed //! \threadsafe //! \deprecated likely to be removed diff --git a/src/blackcore/vatsim/vatsimdatafilereader.cpp b/src/blackcore/vatsim/vatsimdatafilereader.cpp index da6c0ec01..115662ffc 100644 --- a/src/blackcore/vatsim/vatsimdatafilereader.cpp +++ b/src/blackcore/vatsim/vatsimdatafilereader.cpp @@ -172,7 +172,6 @@ namespace BlackCore::Vatsim { this->threadAssertCheck(); if (!this->doWorkCheck()) { return; } - if (!this->isInternetAccessible("No network/internet access, cannot read VATSIM data file")) { return; } // round robin for load balancing // remark: Don't use QThread to run network operations in the background diff --git a/src/blackcore/vatsim/vatsimmetarreader.cpp b/src/blackcore/vatsim/vatsimmetarreader.cpp index 68499d955..de9f552b9 100644 --- a/src/blackcore/vatsim/vatsimmetarreader.cpp +++ b/src/blackcore/vatsim/vatsimmetarreader.cpp @@ -66,7 +66,6 @@ namespace BlackCore::Vatsim { this->threadAssertCheck(); if (!this->doWorkCheck()) { return; } - if (!this->isInternetAccessible("No network/internet access, cannot read METARs")) { return; } CFailoverUrlList urls(sApp->getVatsimMetarUrls()); const CUrl url(urls.obtainNextWorkingUrl(true)); diff --git a/src/blackcore/vatsim/vatsimserverfilereader.cpp b/src/blackcore/vatsim/vatsimserverfilereader.cpp index 45f75525f..c2a9f1243 100644 --- a/src/blackcore/vatsim/vatsimserverfilereader.cpp +++ b/src/blackcore/vatsim/vatsimserverfilereader.cpp @@ -54,7 +54,6 @@ namespace BlackCore::Vatsim { this->threadAssertCheck(); if (!this->doWorkCheck()) { return; } - if (!this->isInternetAccessible("No network/internet access, cannot read VATSIM server file")) { return; } Q_ASSERT_X(sApp, Q_FUNC_INFO, "Missing application"); const QUrl url = sApp->getVatsimServerFileUrl(); diff --git a/src/blackcore/vatsim/vatsimstatusfilereader.cpp b/src/blackcore/vatsim/vatsimstatusfilereader.cpp index ee6010124..f81a8f116 100644 --- a/src/blackcore/vatsim/vatsimstatusfilereader.cpp +++ b/src/blackcore/vatsim/vatsimstatusfilereader.cpp @@ -59,7 +59,6 @@ namespace BlackCore::Vatsim { this->threadAssertCheck(); if (!this->doWorkCheck()) { return; } - if (!this->isInternetAccessible("No network/internet access, cannot read VATSIM status file")) { return; } Q_ASSERT_X(sApp, Q_FUNC_INFO, "Missing application"); const CUrlList urls(sApp->getGlobalSetup().getVatsimStatusFileUrls()); diff --git a/src/blackcore/webdataservices.cpp b/src/blackcore/webdataservices.cpp index 6836c286f..8dff0fa47 100644 --- a/src/blackcore/webdataservices.cpp +++ b/src/blackcore/webdataservices.cpp @@ -282,11 +282,6 @@ namespace BlackCore { if (m_shuttingDown) { return CEntityFlags::NoEntity; } if (!sApp || sApp->isShuttingDown()) { return CEntityFlags::NoEntity; } - if (!sApp->isSwiftDbAccessible()) - { - CLogMessage(this).warning(u"Not triggering load of '%1' because swift DB is not accessible") << CEntityFlags::flagToString(whatToRead); - return CEntityFlags::NoEntity; - } CEntityFlags::Entity triggeredRead = CEntityFlags::NoEntity; if (m_dbInfoDataReader) @@ -1013,20 +1008,10 @@ namespace BlackCore // 1a. If any DB data, read the info objects upfront if (needsDbInfoObjects) { - const bool databaseUp = sApp->isSwiftDbAccessible(); - if (!databaseUp) { dbReaderConfig.markAsDbDown(); } - if (anyDbEntities && readersNeeded.testFlag(CWebReaderFlags::WebReaderFlag::DbInfoDataReader)) { // info data reader has a special role, it will not be triggered in triggerRead() - if (databaseUp) - { - this->initDbInfoObjectReaderAndTriggerRead(); - } - else - { - CLogMessage(this).warning(u"DB unreachable, skipping read from DB info data reader"); - } + this->initDbInfoObjectReaderAndTriggerRead(); } } diff --git a/src/blackgui/components/dbloadoverviewcomponent.cpp b/src/blackgui/components/dbloadoverviewcomponent.cpp index 5871f5fb6..233968b52 100644 --- a/src/blackgui/components/dbloadoverviewcomponent.cpp +++ b/src/blackgui/components/dbloadoverviewcomponent.cpp @@ -205,10 +205,9 @@ namespace BlackGui::Components ui->le_CategoriesSharedFileTs->setText(sharedFileTimestampForEntity(CEntityFlags::AircraftCategoryEntity)); // DB URL - const QString dbUrlHtml("  %3"); + const QString dbUrlHtml("%3"); const QString url = sGui->getGlobalSetup().getDbHomePageUrl().getFullUrl(); - bool canConnect = sGui->isSwiftDbAccessible(); - ui->lbl_DatabaseUrl->setText(dbUrlHtml.arg(canConnect ? m_imgOk : m_imgFailed, url, url)); + ui->lbl_DatabaseUrl->setText(dbUrlHtml.arg(url, url)); ui->lbl_DatabaseUrl->setToolTip(url); // Shared URLs @@ -378,9 +377,8 @@ namespace BlackGui::Components { direct = true; } - else if (sGui->isSwiftDbAccessible()) + else { - // do not trigger if cannot be connected sGui->getWebDataServices()->triggerReadOfDbInfoObjects(); } diff --git a/src/blackgui/components/infobarstatuscomponent.cpp b/src/blackgui/components/infobarstatuscomponent.cpp index f3bb1cfdb..cb29735ad 100644 --- a/src/blackgui/components/infobarstatuscomponent.cpp +++ b/src/blackgui/components/infobarstatuscomponent.cpp @@ -53,7 +53,6 @@ namespace BlackGui::Components { connect(sGui->getIContextSimulator(), &IContextSimulator::simulatorStatusChanged, this, &CInfoBarStatusComponent::onSimulatorStatusChanged, Qt::QueuedConnection); connect(sGui->getIContextSimulator(), &IContextSimulator::modelSetChanged, this, &CInfoBarStatusComponent::onMapperReady); - connect(sGui, &CGuiApplication::changedInternetAccessibility, this, &CInfoBarStatusComponent::onInternetAccessibleChanged); // initial values this->onMapperReady(); @@ -104,7 +103,6 @@ namespace BlackGui::Components shape = CLedWidget::Rounded; ui->led_Ptt->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "Ptt", "Silence", 18); ui->led_Audio->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "On", "Muted", 18); - this->onInternetAccessibleChanged(sGui->isInternetAccessible()); } void CInfoBarStatusComponent::adjustTextSize() @@ -289,20 +287,6 @@ namespace BlackGui::Components */ } - void CInfoBarStatusComponent::onInternetAccessibleChanged(bool access) - { - if (access) - { - ui->led_Network->setOffColor(CLedWidget::Black); - ui->led_Network->setOffToolTip("Network disconnected"); - } - else - { - ui->led_Network->setOffColor(CLedWidget::Red); - ui->led_Network->setOffToolTip("No network/internet access"); - } - } - void CInfoBarStatusComponent::updateValues() { if (!sGui || sGui->isShuttingDown()) { return; } diff --git a/src/blackgui/components/infobarstatuscomponent.h b/src/blackgui/components/infobarstatuscomponent.h index b611cbbee..712a032dc 100644 --- a/src/blackgui/components/infobarstatuscomponent.h +++ b/src/blackgui/components/infobarstatuscomponent.h @@ -98,9 +98,6 @@ namespace BlackGui::Components //! PTT, as received in in audio void onAudioPtt(bool active, BlackMisc::Audio::PTTCOM pttcom, const BlackMisc::CIdentifier &identifier); - //! Internet accessible? - void onInternetAccessibleChanged(bool access); - //! Update values void updateValues(); diff --git a/src/blackgui/components/infobarwebreadersstatuscomponent.cpp b/src/blackgui/components/infobarwebreadersstatuscomponent.cpp index 3b900b311..cc4752608 100644 --- a/src/blackgui/components/infobarwebreadersstatuscomponent.cpp +++ b/src/blackgui/components/infobarwebreadersstatuscomponent.cpp @@ -28,11 +28,7 @@ namespace BlackGui::Components m_timer.setInterval(30 * 1000); m_timer.start(); m_timer.setObjectName("CInfoBarWebReadersStatusBase::CheckSwiftDbTimer"); - bool c = connect(&m_timer, &QTimer::timeout, this, &CInfoBarWebReadersStatusBase::checkServerAndData); - Q_ASSERT_X(c, Q_FUNC_INFO, "Failed connect"); - c = connect(sGui, &CGuiApplication::changedInternetAccessibility, this, &CInfoBarWebReadersStatusBase::networkAccessibilityChanged); - Q_ASSERT_X(c, Q_FUNC_INFO, "Failed connect"); - c = connect(sGui, &CGuiApplication::changedSwiftDbAccessibility, this, &CInfoBarWebReadersStatusBase::dbAccessibilityChanged); + bool c = connect(&m_timer, &QTimer::timeout, this, &CInfoBarWebReadersStatusBase::checkData); Q_ASSERT_X(c, Q_FUNC_INFO, "Failed connect"); if (sGui->hasWebDataServices()) @@ -58,7 +54,6 @@ namespace BlackGui::Components void CInfoBarWebReadersStatusBase::initLeds() { CLedWidget::LedShape shape = CLedWidget::Rounded; - m_ledSwiftDb->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "DB online", "DB offline", 14); m_ledDataReady->setValues(CLedWidget::Yellow, CLedWidget::Black, shape, "all data ready", "data missing", 14); if (m_ledConsolidation) { m_ledConsolidation->setValues(CLedWidget::Blue, CLedWidget::Black, shape, "consolidation running", "idle", 14); } @@ -77,24 +72,8 @@ namespace BlackGui::Components if (!leds.isEmpty()) { this->setLedReadStates(leds, readState); } } - void CInfoBarWebReadersStatusBase::networkAccessibilityChanged(bool accessible) + void CInfoBarWebReadersStatusBase::checkData() { - Q_UNUSED(accessible); - this->checkServerAndData(); - } - - void CInfoBarWebReadersStatusBase::dbAccessibilityChanged(bool accessible, const CUrl &testedUrl) - { - Q_UNUSED(accessible); - Q_UNUSED(testedUrl); - this->checkServerAndData(); - } - - void CInfoBarWebReadersStatusBase::checkServerAndData() - { - const bool swift = sGui && sGui->isSwiftDbAccessible(); - m_ledSwiftDb->setOn(swift); - const bool allData = hasAllData(); m_ledDataReady->setOn(allData); } @@ -165,10 +144,9 @@ namespace BlackGui::Components } void CInfoBarWebReadersStatusBase::setLeds( - CLedWidget *ledDb, CLedWidget *ledDataReady, CLedWidget *ledConsolidation, CLedWidget *ledIcaoAircraft, + CLedWidget *ledDataReady, CLedWidget *ledConsolidation, CLedWidget *ledIcaoAircraft, CLedWidget *ledIcaoAirline, CLedWidget *ledCountries, CLedWidget *ledDistributors, CLedWidget *ledLiveries, CLedWidget *ledModels) { - m_ledSwiftDb = ledDb; m_ledDataReady = ledDataReady; m_ledConsolidation = ledConsolidation; m_ledIcaoAircraft = ledIcaoAircraft; @@ -182,7 +160,7 @@ namespace BlackGui::Components CInfoBarWebReadersStatusComponent::CInfoBarWebReadersStatusComponent(QWidget *parent) : CInfoBarWebReadersStatusBase(parent), ui(new Ui::CInfoBarWebReadersStatusComponent) { ui->setupUi(this); - this->setLeds(ui->led_SwiftDb, ui->led_DataReady, ui->led_Consolidation, ui->led_IcaoAircraft, ui->led_IcaoAirline, ui->led_Countries, ui->led_Distributors, ui->led_Liveries, ui->led_Models); + this->setLeds(ui->led_DataReady, ui->led_Consolidation, ui->led_IcaoAircraft, ui->led_IcaoAirline, ui->led_Countries, ui->led_Distributors, ui->led_Liveries, ui->led_Models); this->init(); } diff --git a/src/blackgui/components/infobarwebreadersstatuscomponent.h b/src/blackgui/components/infobarwebreadersstatuscomponent.h index 2add769bf..ab8ba0f43 100644 --- a/src/blackgui/components/infobarwebreadersstatuscomponent.h +++ b/src/blackgui/components/infobarwebreadersstatuscomponent.h @@ -61,28 +61,21 @@ namespace BlackGui bool hasAllData() const; //! Initial setup of leds - void setLeds(BlackGui::CLedWidget *ledDb, BlackGui::CLedWidget *ledDataReady, CLedWidget *ledConsolidation, + void setLeds(BlackGui::CLedWidget *ledDataReady, CLedWidget *ledConsolidation, BlackGui::CLedWidget *ledIcaoAircraft, BlackGui::CLedWidget *ledIcaoAirline, BlackGui::CLedWidget *ledCountries, BlackGui::CLedWidget *ledDistributors, BlackGui::CLedWidget *ledLiveries, BlackGui::CLedWidget *ledModels); //! Data have been read void dataRead(BlackMisc::Network::CEntityFlags::Entity entities, BlackMisc::Network::CEntityFlags::ReadState readState, int count); - //! Network accessibility changed - void networkAccessibilityChanged(bool accessible); - - //! DB accessibility changed - void dbAccessibilityChanged(bool accessible, const BlackMisc::Network::CUrl &testedUrl); - - //! Check server status - void checkServerAndData(); + //! Check data status + void checkData(); //! Show the consolidation status virtual void showConsolidationStatus(bool show); private: QTimer m_timer; //!< check timer - BlackGui::CLedWidget *m_ledSwiftDb = nullptr; BlackGui::CLedWidget *m_ledDataReady = nullptr; BlackGui::CLedWidget *m_ledConsolidation = nullptr; BlackGui::CLedWidget *m_ledIcaoAircraft = nullptr; diff --git a/src/blackgui/components/infobarwebreadersstatuscomponent.ui b/src/blackgui/components/infobarwebreadersstatuscomponent.ui index 623983285..1a46f1743 100644 --- a/src/blackgui/components/infobarwebreadersstatuscomponent.ui +++ b/src/blackgui/components/infobarwebreadersstatuscomponent.ui @@ -26,16 +26,6 @@ 0 - - - - swift DB - - - - - - diff --git a/src/blackgui/components/infobarwebreadersstatussmallcomponent.cpp b/src/blackgui/components/infobarwebreadersstatussmallcomponent.cpp index 25b026250..5032292c2 100644 --- a/src/blackgui/components/infobarwebreadersstatussmallcomponent.cpp +++ b/src/blackgui/components/infobarwebreadersstatussmallcomponent.cpp @@ -10,7 +10,7 @@ namespace BlackGui::Components ui(new Ui::CInfoBarWebReadersStatusSmallComponent) { ui->setupUi(this); - this->setLeds(ui->led_SwiftDb, ui->led_DataReady, nullptr, ui->led_IcaoAircraft, ui->led_IcaoAirline, ui->led_Countries, ui->led_Distributors, ui->led_Liveries, ui->led_Models); + this->setLeds(ui->led_DataReady, nullptr, ui->led_IcaoAircraft, ui->led_IcaoAirline, ui->led_Countries, ui->led_Distributors, ui->led_Liveries, ui->led_Models); this->init(); } diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index aa21434d0..279cbccfe 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -11,7 +11,6 @@ #include "blackgui/registermetadata.h" #include "blackcore/context/contextnetwork.h" #include "blackcore/data/globalsetup.h" -#include "blackcore/db/networkwatchdog.h" #include "blackcore/db/infodatareader.h" #include "blackcore/webdataservices.h" #include "blackcore/setupreader.h" @@ -659,14 +658,8 @@ namespace BlackGui a = menu.addAction(CIcons::monitorError16(), "Network config. (console)"); c = connect(a, &QAction::triggered, this, [=]() { if (!sGui || sGui->isShuttingDown()) { return; } - const QString r = CNetworkUtils::createNetworkConfigurationReport(this->getNetworkConfigurationManager(), this->getNetworkAccessManager()); + const QString r = CNetworkUtils::createNetworkAccessManagerReport(this->getNetworkAccessManager()); this->displayTextInConsole(r); - - if (this->getNetworkWatchdog()) - { - const QString w = this->getNetworkWatchdog()->getCheckInfo(); - this->displayTextInConsole(w); - } }); Q_ASSERT_X(c, Q_FUNC_INFO, "Connect failed"); Q_UNUSED(c) diff --git a/src/blackmisc/network/networkutils.cpp b/src/blackmisc/network/networkutils.cpp index 8d50ed7ba..16b777ea4 100644 --- a/src/blackmisc/network/networkutils.cpp +++ b/src/blackmisc/network/networkutils.cpp @@ -321,52 +321,6 @@ namespace BlackMisc::Network return msgs; } - QString CNetworkUtils::createNetworkConfigurationReport(const QNetworkConfigurationManager *qcm, const QNetworkAccessManager *qam, const QString &separator) - { - if (!qcm) { return QStringLiteral("No configuration manager"); } - - static const QString empty; - QString report; - int c = 0; - - int active = 0; - int inActive = 0; - int valid = 0; - for (const QNetworkConfiguration &config : qcm->allConfigurations()) - { - if (config.state() == QNetworkConfiguration::Active) { active++; } - else { inActive++; } - if (config.isValid()) { valid++; } - - report += - (report.isEmpty() ? empty : separator) % - QString::number(++c) % u": " % - CNetworkUtils::networkConfigurationToString(config); - } - - if (c < 1) - { - report = QStringLiteral("No network configurations!"); - } - else - { - static const QString count("Network configurations: active %1 / inactive %2 / valid %3"); - report += - (report.isEmpty() ? empty : separator) % - count.arg(active).arg(inActive).arg(valid); - } - - if (qam) - { - report += - (report.isEmpty() ? empty : separator) % - u"QAM: " % - CNetworkUtils::createNetworkAccessManagerReport(qam); - } - - return report; - } - QString CNetworkUtils::createNetworkAccessManagerReport(const QNetworkAccessManager *qam) { static const QMetaEnum enumAccessible = QMetaEnum::fromType(); diff --git a/src/blackmisc/network/networkutils.h b/src/blackmisc/network/networkutils.h index 53b89caba..26035ede9 100644 --- a/src/blackmisc/network/networkutils.h +++ b/src/blackmisc/network/networkutils.h @@ -12,7 +12,6 @@ #include #include -#include #include #include #include @@ -132,9 +131,6 @@ namespace BlackMisc::Network //! \remark that can take a moment to complete, as it checks network static BlackMisc::CStatusMessageList createNetworkReport(const QUrl &url, const QNetworkAccessManager *qam = nullptr); - //! Info about network configurations - static QString createNetworkConfigurationReport(const QNetworkConfigurationManager *qcm, const QNetworkAccessManager *qam, const QString &separator = "\n"); - //! Report for QAM static QString createNetworkAccessManagerReport(const QNetworkAccessManager *qam); diff --git a/src/plugins/weatherdata/gfs/weatherdatagfs.cpp b/src/plugins/weatherdata/gfs/weatherdatagfs.cpp index 3b8e3d96d..f7c3ff657 100644 --- a/src/plugins/weatherdata/gfs/weatherdatagfs.cpp +++ b/src/plugins/weatherdata/gfs/weatherdatagfs.cpp @@ -148,12 +148,6 @@ namespace BlackWxPlugin::Gfs m_maxRange = range; if (m_gribData.isEmpty()) { - if (!sApp || !sApp->isInternetAccessible()) - { - CLogMessage(this).error(u"No weather download since network/internet not accessible"); - return; - } - const QUrl url = getDownloadUrl().toQUrl(); CLogMessage(this).debug() << "Started to download GFS data from" << url.toString(); QNetworkRequest request(url); diff --git a/tests/blackcore/testconnectivity/testconnectivity.cpp b/tests/blackcore/testconnectivity/testconnectivity.cpp index e9ded53e6..22e52d5c2 100644 --- a/tests/blackcore/testconnectivity/testconnectivity.cpp +++ b/tests/blackcore/testconnectivity/testconnectivity.cpp @@ -6,7 +6,6 @@ //! \ingroup testblackcore #include "blackcore/application.h" -#include "blackcore/db/networkwatchdog.h" #include "blackcore/setupreader.h" #include "blackmisc/applicationinfo.h" #include "blackmisc/network/networkutils.h" @@ -43,23 +42,11 @@ namespace BlackCoreTest //! Ping test server void pingServer(); - - //! Test the watchdog BlackCore::Db::CNetworkWatchdog - void testNetworkWatchdog(); - - private: - int m_networkCheckCount = -1; }; void CTestConnectivity::initTestCase() { QVERIFY2(sApp, "sApp not available"); - QVERIFY2(sApp->getNetworkWatchdog(), "No network watchdog"); - - const int n = sApp->triggerNetworkWatchdogChecks(); - QVERIFY2(n >= 0, "Cannot trigger setup reader"); - m_networkCheckCount = n; - qDebug() << "Initial network check count:" << n; } void CTestConnectivity::checkSetupReader() @@ -101,20 +88,6 @@ namespace BlackCoreTest qDebug() << "Completed" << max << "ping tests in" << elapsedMs << "ms to" << url.getFullUrl(); QVERIFY2(true, "pingServer"); } - - void CTestConnectivity::testNetworkWatchdog() - { - QVERIFY2(sApp->getNetworkWatchdog(), "No network watchdog"); - const CUrl dbUrl = CNetworkWatchdog::dbTestUrl(); - qDebug() << "Using DB test URL: " << dbUrl.toQString(); - const bool ok = canPing(dbUrl); - if (!ok) { QSKIP(qPrintable("Cannot ping " + dbUrl.getFullUrl())); } - - // only if URL is reachable - QTRY_VERIFY2_WITH_TIMEOUT(sApp->isSwiftDbAccessible(), "Watchdog cannot connect db", 20000); - QTRY_VERIFY2_WITH_TIMEOUT(sApp->getNetworkWatchdog()->getCheckCount() >= m_networkCheckCount + 1, "Timeout of network check", 30000); - qDebug() << "Current network check count:" << sApp->getNetworkWatchdog()->getCheckCount(); - } } // ns //! main