Let airspace monitor store the aircraft parts history

This commit adds a feature in airspace monitor to store the history
of received aircraft parts. If needed the history can be retrieved
via context methods.

refs #835
This commit is contained in:
Roland Winklmeier
2016-12-16 20:51:13 +01:00
committed by Mathew Sutcliffe
parent a210b029f1
commit 4994bf12b2
11 changed files with 182 additions and 1 deletions

View File

@@ -416,6 +416,24 @@ namespace BlackCore
return this->m_reverseLookupMessages.value(callsign);
}
CStatusMessageList CAirspaceMonitor::getAircraftPartsHistory(const CCallsign &callsign) const
{
QReadLocker l(&m_lockPartsHistory);
return this->m_aircraftPartsHistory.value(callsign);
}
bool CAirspaceMonitor::isAircraftPartsHistoryEnabled() const
{
QReadLocker l(&m_lockPartsHistory);
return this->m_enableAircraftPartsHistory;
}
void CAirspaceMonitor::enableAircraftPartsHistory(bool enabled)
{
QWriteLocker l(&m_lockPartsHistory);
m_enableAircraftPartsHistory = enabled;
}
void CAirspaceMonitor::requestDataUpdates()
{
if (!this->isConnected()) { return; }
@@ -1074,7 +1092,8 @@ namespace BlackCore
{ QWriteLocker l1(&m_lockParts); m_partsByCallsign.remove(callsign); m_aircraftSupportingParts.remove(callsign); }
{ QWriteLocker l2(&m_lockSituations); m_situationsByCallsign.remove(callsign); }
{ QWriteLocker l(&m_lockClient); m_otherClients.removeByCallsign(callsign); }
{ QWriteLocker l3(&m_lockClient); m_otherClients.removeByCallsign(callsign); }
{ QWriteLocker l4(&m_lockPartsHistory); m_aircraftPartsHistory.remove(callsign); }
bool removedCallsign = false;
{
@@ -1123,6 +1142,22 @@ namespace BlackCore
this->storeAircraftParts(callsign, parts);
emit this->addedAircraftParts(callsign, parts);
if (m_enableAircraftPartsHistory)
{
QJsonDocument doc(jsonObject);
QString partsAsString = doc.toJson(QJsonDocument::Compact);
CStatusMessage message(getLogCategories(), BlackMisc::CStatusMessage::SeverityInfo, callsign.isEmpty() ? callsign.toQString() + ": " + partsAsString.trimmed() : partsAsString.trimmed());
if (this->m_aircraftPartsHistory.contains(callsign))
{
CStatusMessageList &msgs = this->m_aircraftPartsHistory[callsign];
msgs.push_back(message);
}
else
{
this->m_aircraftPartsHistory.insert(callsign, message);
}
}
// here I expect always a changed value
QWriteLocker l(&m_lockAircraft);
this->m_aircraftInRange.setAircraftParts(callsign, parts);

View File

@@ -104,6 +104,9 @@ namespace BlackCore
virtual void enableReverseLookupMessages(bool enabled) override;
virtual bool isReverseLookupMessagesEnabled() const override;
virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual bool isAircraftPartsHistoryEnabled() const override;
virtual void enableAircraftPartsHistory(bool enabled) override;
//! @}
//! Returns the list of users we know about
@@ -230,6 +233,7 @@ namespace BlackCore
BlackMisc::Network::CClientList m_otherClients; //!< client informatiom, thread safe access required
BlackMisc::Simulation::CSimulatedAircraftList m_aircraftInRange; //!< aircraft, thread safe access required
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::CStatusMessageList> m_reverseLookupMessages;
QMap<BlackMisc::Aviation::CCallsign, BlackMisc::CStatusMessageList> m_aircraftPartsHistory;
QMap<BlackMisc::Aviation::CCallsign, FsInnPacket> m_tempFsInnPackets;
// hashs, because not sorted by key but keeping order
@@ -242,6 +246,7 @@ namespace BlackCore
INetwork *m_network = nullptr; //!< corresponding network interface
CAirspaceAnalyzer *m_analyzer = nullptr; //!< owned analyzer
bool m_enableReverseLookupMsgs = false; //!< shall we log. information about the matching process
bool m_enableAircraftPartsHistory = true; //!< shall we keep a history of aircraft parts
// locks
mutable QReadWriteLock m_lockSituations; //!< lock for situations: m_situationsByCallsign
@@ -249,6 +254,7 @@ namespace BlackCore
mutable QReadWriteLock m_lockAircraft; //!< lock aircraft: m_aircraftInRange
mutable QReadWriteLock m_lockClient; //!< lock clients: m_otherClients
mutable QReadWriteLock m_lockMessages; //!< lock for messages
mutable QReadWriteLock m_lockPartsHistory; //!< lock for aircraft parts
//! Remove ATC online stations
void removeAllOnlineAtcStations();

View File

@@ -21,6 +21,7 @@
#include "blackcore/corefacadeconfig.h"
#include "blackcore/network.h"
#include "blackmisc/audio/voiceroomlist.h"
#include "blackmisc/aviation/aircraftpartslist.h"
#include "blackmisc/aviation/airporticaocode.h"
#include "blackmisc/aviation/atcstation.h"
#include "blackmisc/aviation/atcstationlist.h"
@@ -275,6 +276,18 @@ namespace BlackCore
//! Enable reverse lookup logging
virtual void enableReverseLookupMessages(bool enabled) = 0;
//! Get aircraft parts history
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
//! Get remote aircraft parts
virtual BlackMisc::Aviation::CAircraftPartsList getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const = 0;
//! Is storing the aircraft parts history enabled?
virtual bool isAircraftPartsHistoryEnabled() const = 0;
//! Enable storing of aircraft parts
virtual void enableAircraftPartsHistory(bool enabled) = 0;
// ------------------------ testing ------------------------
//! Create dummy ATC stations for performance tests etc.

View File

@@ -332,6 +332,37 @@ namespace BlackCore
logEmptyContextWarning(Q_FUNC_INFO);
Q_UNUSED(enabled);
}
//! \copydoc IContextNetwork::getAircraftPartsHistory
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override
{
logEmptyContextWarning(Q_FUNC_INFO);
Q_UNUSED(callsign);
return BlackMisc::CStatusMessageList();
}
//! \copydoc IContextNetwork::getRemoteAircraftParts
virtual BlackMisc::Aviation::CAircraftPartsList getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const override
{
logEmptyContextWarning(Q_FUNC_INFO);
Q_UNUSED(callsign);
Q_UNUSED(cutoffTimeValuesBefore);
return BlackMisc::Aviation::CAircraftPartsList();
}
//! \copydoc IContextNetwork::isAircraftPartsHistoryEnabled
virtual bool isAircraftPartsHistoryEnabled() const override
{
logEmptyContextWarning(Q_FUNC_INFO);
return false;
}
//! \copydoc IContextNetwork::enableAircraftPartsHistory
virtual void enableAircraftPartsHistory(bool enabled) override
{
logEmptyContextWarning(Q_FUNC_INFO);
Q_UNUSED(enabled);
}
};
} // namespace
} // namespace

View File

@@ -527,6 +527,31 @@ namespace BlackCore
emit CContext::changedLogOrDebugSettings();
}
CStatusMessageList CContextNetwork::getAircraftPartsHistory(const CCallsign &callsign) const
{
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; }
return this->m_airspace->getAircraftPartsHistory(callsign);
}
CAircraftPartsList CContextNetwork::getRemoteAircraftParts(const CCallsign &callsign, qint64 cutoffTimeValuesBefore) const
{
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; }
return this->m_airspace->remoteAircraftParts(callsign, cutoffTimeValuesBefore);
}
bool CContextNetwork::isAircraftPartsHistoryEnabled() const
{
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO; }
return this->m_airspace->isAircraftPartsHistoryEnabled();
}
void CContextNetwork::enableAircraftPartsHistory(bool enabled)
{
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << enabled; }
this->m_airspace->enableAircraftPartsHistory(enabled);
emit CContext::changedLogOrDebugSettings();
}
CAtcStation CContextNetwork::getOnlineStationForCallsign(const CCallsign &callsign) const
{
if (this->isDebugEnabled()) { BlackMisc::CLogMessage(this, BlackMisc::CLogCategory::contextSlot()).debug() << Q_FUNC_INFO << callsign; }

View File

@@ -181,6 +181,22 @@ namespace BlackCore
//! \ingroup remoteaircraftprovider
virtual void enableReverseLookupMessages(bool enabled) override;
//! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::getAircraftPartsHistory
//! \ingroup remoteaircraftprovider
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override;
//! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::remoteAircraftParts
//! \ingroup remoteaircraftprovider
virtual BlackMisc::Aviation::CAircraftPartsList getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const override;
//! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::isAircraftPartsHistoryEnabled
//! \ingroup remoteaircraftprovider
virtual bool isAircraftPartsHistoryEnabled() const override;
//! \copydoc BlackMisc::Simulation::IRemoteAircraftProvider::enableAircraftPartsHistory
//! \ingroup remoteaircraftprovider
virtual void enableAircraftPartsHistory(bool enabled) override;
//! In transition state, e.g. connecting, disconnecting.
//! \details In such a state it is advisable to wait until an end state (connected/disconnected) is reached
//! \remarks Intentionally only running locally, not in interface

View File

@@ -231,6 +231,26 @@ namespace BlackCore
this->m_dBusInterface->callDBus(QLatin1Literal("enableReverseLookupLogging"), enabled);
}
CStatusMessageList CContextNetworkProxy::getAircraftPartsHistory(const CCallsign &callsign) const
{
return this->m_dBusInterface->callDBusRet<CStatusMessageList>(QLatin1Literal("getAircraftPartsHistory"), callsign);
}
CAircraftPartsList CContextNetworkProxy::getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const
{
return this->m_dBusInterface->callDBusRet<CAircraftPartsList>(QLatin1Literal("getRemoteAircraftParts"), callsign, cutoffTimeValuesBefore);
}
bool CContextNetworkProxy::isAircraftPartsHistoryEnabled() const
{
return this->m_dBusInterface->callDBusRet<bool>(QLatin1Literal("isAircraftPartsHistoryEnabled"));
}
void CContextNetworkProxy::enableAircraftPartsHistory(bool enabled)
{
this->m_dBusInterface->callDBus(QLatin1Literal("enableAircraftPartsHistory"), enabled);
}
void CContextNetworkProxy::testCreateDummyOnlineAtcStations(int number)
{
this->m_dBusInterface->callDBus(QLatin1Literal("testCreateDummyOnlineAtcStations"), number);

View File

@@ -109,6 +109,10 @@ namespace BlackCore
virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual bool isReverseLookupMessagesEnabled() const override;
virtual void enableReverseLookupMessages(bool enabled) override;
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual BlackMisc::Aviation::CAircraftPartsList getRemoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, qint64 cutoffTimeValuesBefore) const override;
virtual bool isAircraftPartsHistoryEnabled() const override;
virtual void enableAircraftPartsHistory(bool enabled) override;
virtual void testCreateDummyOnlineAtcStations(int number) override;
virtual void testAddAircraftParts(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftParts &parts, bool incremental) override;
virtual void testReceivedTextMessages(const BlackMisc::Network::CTextMessageList &textMessages) override;

View File

@@ -136,6 +136,18 @@ namespace BlackMisc
//! \threadsafe
virtual void enableReverseLookupMessages(bool enabled) = 0;
//! Get aircraft parts history
//! \threadsafe
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const = 0;
//! Is storing aircraft parts history enabled?
//! \threadsafe
virtual bool isAircraftPartsHistoryEnabled() const = 0;
//! Enable storing of aircraft parts history
//! \threadsafe
virtual void enableAircraftPartsHistory(bool enabled) = 0;
//! Destructor
virtual ~IRemoteAircraftProvider() {}

View File

@@ -160,6 +160,22 @@ namespace BlackMisc
Q_UNUSED(enabled);
}
CStatusMessageList CRemoteAircraftProviderDummy::getAircraftPartsHistory(const CCallsign &callsign) const
{
Q_UNUSED(callsign);
return CStatusMessageList();
}
bool CRemoteAircraftProviderDummy::isAircraftPartsHistoryEnabled() const
{
return false;
}
void CRemoteAircraftProviderDummy::enableAircraftPartsHistory(bool enabled)
{
Q_UNUSED(enabled);
}
void CRemoteAircraftProviderDummy::insertNewSituation(const CAircraftSituation &situation)
{
this->m_situations.push_front(situation);

View File

@@ -91,6 +91,9 @@ namespace BlackMisc
virtual BlackMisc::CStatusMessageList getReverseLookupMessages(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual bool isReverseLookupMessagesEnabled() const override;
virtual void enableReverseLookupMessages(bool enabled) override;
virtual BlackMisc::CStatusMessageList getAircraftPartsHistory(const BlackMisc::Aviation::CCallsign &callsign) const override;
virtual bool isAircraftPartsHistoryEnabled() const override;
virtual void enableAircraftPartsHistory(bool enabled) override;
//! @}
signals: