From 998f0344fa3fe88d4d095ddb4c06f84efa602ff0 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 25 Jan 2019 12:31:55 +0100 Subject: [PATCH] Ref T515, retrieve last validation results in distributed swift setup --- .../aircraftmodelvalidationcomponent.cpp | 30 +++++++++++-- .../aircraftmodelvalidationcomponent.h | 3 ++ .../simulation/backgroundvalidation.cpp | 42 +++++++++++++++++-- .../simulation/backgroundvalidation.h | 17 +++++++- 4 files changed, 83 insertions(+), 9 deletions(-) diff --git a/src/blackgui/components/aircraftmodelvalidationcomponent.cpp b/src/blackgui/components/aircraftmodelvalidationcomponent.cpp index c0ddceadb..8ac9b55f5 100644 --- a/src/blackgui/components/aircraftmodelvalidationcomponent.cpp +++ b/src/blackgui/components/aircraftmodelvalidationcomponent.cpp @@ -12,6 +12,8 @@ #include "blackgui/guiapplication.h" #include "blackcore/context/contextsimulator.h" +#include + using namespace BlackMisc; using namespace BlackMisc::Simulation; using namespace BlackCore::Context; @@ -34,6 +36,14 @@ namespace BlackGui connect(ui->pb_TempDisableInvalid, &QPushButton::released, this, &CAircraftModelValidationComponent::onButtonClicked); connect(ui->pb_TempDisableSelected, &QPushButton::released, this, &CAircraftModelValidationComponent::onButtonClicked); connect(ui->pb_TriggerValidation, &QPushButton::released, this, &CAircraftModelValidationComponent::triggerValidation); + + // 1st init when running in distributed environment + QPointer myself(this); + QTimer::singleShot(2500, this, [ = ] + { + if (!myself || !sGui || sGui->isShuttingDown()) { return; } + myself->requestLastResults(); + }); } CAircraftModelValidationComponent::~CAircraftModelValidationComponent() @@ -87,17 +97,29 @@ namespace BlackGui return; } - const CSimulatorInfo sim = ui->comp_Simulator->getValue(); - if (sGui->getIContextSimulator()->triggerModelSetValidation(sim)) + const CSimulatorInfo simulator = ui->comp_Simulator->getValue(); + if (sGui->getIContextSimulator()->triggerModelSetValidation(simulator)) { - this->showOverlayHTMLMessage(QStringLiteral("Triggered validation for '%1'").arg(sim.toQString(true)), 5000); + this->showOverlayHTMLMessage(QStringLiteral("Triggered validation for '%1'").arg(simulator.toQString(true)), 5000); } else { - this->showOverlayHTMLMessage(QStringLiteral("Cannot trigger validation for '%1'").arg(sim.toQString(true)), 5000); + this->showOverlayHTMLMessage(QStringLiteral("Cannot trigger validation for '%1'").arg(simulator.toQString(true)), 5000); } } + void CAircraftModelValidationComponent::requestLastResults() + { + if (!sGui || sGui->isShuttingDown() || !sGui->supportsContexts()) { return; } + if (!sGui->getIContextSimulator()) { return; } + if (sGui->getIContextSimulator()->isValidationInProgress()) + { + this->showOverlayHTMLMessage("Validation in progress", 5000); + return; + } + sGui->getIContextSimulator()->triggerModelSetValidation(CSimulatorInfo()); + } + void CAircraftModelValidationComponent::onButtonClicked() { const QObject *sender = QObject::sender(); diff --git a/src/blackgui/components/aircraftmodelvalidationcomponent.h b/src/blackgui/components/aircraftmodelvalidationcomponent.h index ebfac2949..867ec68ae 100644 --- a/src/blackgui/components/aircraftmodelvalidationcomponent.h +++ b/src/blackgui/components/aircraftmodelvalidationcomponent.h @@ -65,6 +65,9 @@ namespace BlackGui //! Trigger new validation void triggerValidation(); + //! Last results if any + void requestLastResults(); + //! Button has been clicked void onButtonClicked(); }; diff --git a/src/blackmisc/simulation/backgroundvalidation.cpp b/src/blackmisc/simulation/backgroundvalidation.cpp index 904233a49..d5a5c0b3d 100644 --- a/src/blackmisc/simulation/backgroundvalidation.cpp +++ b/src/blackmisc/simulation/backgroundvalidation.cpp @@ -62,13 +62,45 @@ namespace BlackMisc bool CBackgroundValidation::triggerValidation(const CSimulatorInfo &simulator) { + const QPointer myself(this); + if (simulator.isNoSimulator()) + { + return this->requestLastResults(); + } + { QWriteLocker l(&m_lock); if (m_inWork) { return false; } m_simulator = simulator; m_checkedSimulatorMsgs.remove(simulator); } - QTimer::singleShot(0, this, &CBackgroundValidation::doWork); + QTimer::singleShot(0, this, [ = ] + { + if (!myself) { return; } + myself->doWork(); + }); + return true; + } + + bool CBackgroundValidation::requestLastResults() + { + + CAircraftModelList valid; + CAircraftModelList invalid; + CAircraftModelList models; + CStatusMessageList msgs; + CSimulatorInfo simulator; + bool wasStopped = false; + { + QReadLocker l(&m_lock); + simulator = m_lastResultSimulator; + valid = m_lastResultValid; + invalid = m_lastResultInvalid; + msgs = m_lastResultMsgs; + wasStopped = m_lastResultWasStopped; + } + if (m_lastResultSimulator.isUnspecified()) { return false; } + emit this->validated(simulator, valid, invalid, wasStopped, msgs); return true; } @@ -80,7 +112,6 @@ namespace BlackMisc CAircraftModelList valid; CAircraftModelList invalid; - CAircraftModelList models; CStatusMessageList msgs; bool wasStopped = false; bool validated = false; @@ -95,7 +126,7 @@ namespace BlackMisc const CAircraftMatcherSetup setup = m_matchingSettings.get(); if (!setup.doVerificationAtStartup()) { break; } - models = m_modelSets.getCachedModels(simulator); + const CAircraftModelList models = m_modelSets.getCachedModels(simulator); msgs = CAircraftModelUtilities::validateModelFiles(models, valid, invalid, false, 25, wasStopped); const qint64 deltaTimeMs = QDateTime::currentMSecsSinceEpoch() - started; @@ -104,6 +135,11 @@ namespace BlackMisc validated = true; QWriteLocker l(&m_lock); + m_lastResultValid = valid; + m_lastResultInvalid = invalid; + m_lastResultWasStopped = wasStopped; + m_lastResultSimulator = simulator; + m_lastResultMsgs = msgs; m_checkedSimulatorMsgs.insert(simulator, msgs); } while (false); diff --git a/src/blackmisc/simulation/backgroundvalidation.h b/src/blackmisc/simulation/backgroundvalidation.h index 0f896929e..b17dabbaa 100644 --- a/src/blackmisc/simulation/backgroundvalidation.h +++ b/src/blackmisc/simulation/backgroundvalidation.h @@ -64,6 +64,11 @@ namespace BlackMisc //! \threadsafe bool triggerValidation(const CSimulatorInfo &simulator); + //! Request last results (again), if there are any + //! \remark emits CBackgroundValidation::validated signal + //! \threadsafe + bool requestLastResults(); + signals: //! Validating void validating(bool running); @@ -75,8 +80,16 @@ namespace BlackMisc mutable QReadWriteLock m_lock; //!< lock snapshot std::atomic_bool m_inWork { false }; //!< indicates a running update CSimulatorInfo m_simulator; - QMap m_checkedSimulatorMsgs; - CSetting m_matchingSettings { this }; //!< settings + + // last result values, mostly needed when running in the distributed swift system and we want to get the values + CAircraftModelList m_lastResultValid; + CAircraftModelList m_lastResultInvalid; + CSimulatorInfo m_lastResultSimulator; + CStatusMessageList m_lastResultMsgs; + bool m_lastResultWasStopped = false; + + QMap m_checkedSimulatorMsgs; //!< all simulators ever checked + CSetting m_matchingSettings { this }; //!< settings // Set/caches as member as we are in own thread, central instance will not work Data::CModelSetCaches m_modelSets { false, this };