Ref T104, return inconsistent aircraft/airline ICAOs codes

- use audit
- and log inconsistent DB entries
This commit is contained in:
Klaus Basan
2017-07-08 20:33:48 +02:00
committed by Mathew Sutcliffe
parent 922e39f61d
commit 297c2f0539
6 changed files with 56 additions and 22 deletions

View File

@@ -15,6 +15,7 @@
#include "blackmisc/json.h" #include "blackmisc/json.h"
#include "blackmisc/logmessage.h" #include "blackmisc/logmessage.h"
#include "blackmisc/statusmessage.h" #include "blackmisc/statusmessage.h"
#include "blackmisc/verify.h"
#include <QDateTime> #include <QDateTime>
#include <QDir> #include <QDir>
@@ -40,8 +41,8 @@ namespace BlackCore
{ {
namespace Db namespace Db
{ {
CIcaoDataReader::CIcaoDataReader(QObject *owner, const CDatabaseReaderConfigList &confg) : CIcaoDataReader::CIcaoDataReader(QObject *owner, const CDatabaseReaderConfigList &config) :
CDatabaseReader(owner, confg, "CIcaoDataReader") CDatabaseReader(owner, config, "CIcaoDataReader")
{ {
// init to avoid threading issues // init to avoid threading issues
getBaseUrl(CDbFlags::DbReading); getBaseUrl(CDbFlags::DbReading);
@@ -105,7 +106,7 @@ namespace BlackCore
CAirlineIcaoCode CIcaoDataReader::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const CAirlineIcaoCode CIcaoDataReader::smartAirlineIcaoSelector(const CAirlineIcaoCode &icaoPattern, const CCallsign &callsign) const
{ {
CAirlineIcaoCodeList codes(this->getAirlineIcaoCodes()); // thread safe copy const CAirlineIcaoCodeList codes(this->getAirlineIcaoCodes()); // thread safe copy
return codes.smartAirlineIcaoSelector(icaoPattern, callsign); return codes.smartAirlineIcaoSelector(icaoPattern, callsign);
} }
@@ -239,18 +240,25 @@ namespace BlackCore
} }
CAircraftIcaoCodeList codes; CAircraftIcaoCodeList codes;
CAircraftIcaoCodeList inconsistent;
if (res.isRestricted()) if (res.isRestricted())
{ {
// create full list if it was just incremental // create full list if it was just incremental
const CAircraftIcaoCodeList incIcao(CAircraftIcaoCodeList::fromDatabaseJson(res, true)); const CAircraftIcaoCodeList incrementalCodes(CAircraftIcaoCodeList::fromDatabaseJson(res, true, &inconsistent));
if (incIcao.isEmpty()) { return; } // currently ignored if (incrementalCodes.isEmpty()) { return; } // currently ignored
codes = this->getAircraftIcaoCodes(); codes = this->getAircraftIcaoCodes();
codes.replaceOrAddObjectsByKey(incIcao); codes.replaceOrAddObjectsByKey(incrementalCodes);
} }
else else
{ {
// normally read from special view which already filters incomplete // normally read from special view which already filters incomplete
codes = CAircraftIcaoCodeList::fromDatabaseJson(res, true); codes = CAircraftIcaoCodeList::fromDatabaseJson(res, true, &inconsistent);
}
if (!inconsistent.isEmpty())
{
BLACK_AUDIT_X(false, Q_FUNC_INFO, "Inconsistent aircraft codes");
CLogMessage(this).warning("Inconsistent aircraft codes: %1") << inconsistent.dbKeysAsStrings(", ");
} }
const int n = codes.size(); const int n = codes.size();
@@ -281,18 +289,25 @@ namespace BlackCore
} }
CAirlineIcaoCodeList codes; CAirlineIcaoCodeList codes;
CAirlineIcaoCodeList inconsistent;
if (res.isRestricted()) if (res.isRestricted())
{ {
// create full list if it was just incremental // create full list if it was just incremental
const CAirlineIcaoCodeList incIcao(CAirlineIcaoCodeList::fromDatabaseJson(res, true)); const CAirlineIcaoCodeList incrementalCodes(CAirlineIcaoCodeList::fromDatabaseJson(res, true, &inconsistent));
if (incIcao.isEmpty()) { return; } // currently ignored if (incrementalCodes.isEmpty()) { return; } // currently ignored
codes = this->getAirlineIcaoCodes(); codes = this->getAirlineIcaoCodes();
codes.replaceOrAddObjectsByKey(incIcao); codes.replaceOrAddObjectsByKey(incrementalCodes);
} }
else else
{ {
// normally read from special view which already filters incomplete // normally read from special view which already filters incomplete
codes = CAirlineIcaoCodeList::fromDatabaseJson(res, true); codes = CAirlineIcaoCodeList::fromDatabaseJson(res, true, &inconsistent);
}
if (!inconsistent.isEmpty())
{
BLACK_AUDIT_X(false, Q_FUNC_INFO, "Inconsistent airline codes");
CLogMessage(this).warning("Inconsistent airline codes: %1") << inconsistent.dbKeysAsStrings(", ");
} }
const int n = codes.size(); const int n = codes.size();

View File

@@ -43,7 +43,7 @@ namespace BlackCore
public: public:
//! Constructor //! Constructor
explicit CIcaoDataReader(QObject *owner, const CDatabaseReaderConfigList &confg); explicit CIcaoDataReader(QObject *owner, const CDatabaseReaderConfigList &config);
//! Get aircraft ICAO information //! Get aircraft ICAO information
//! \threadsafe //! \threadsafe

View File

@@ -87,7 +87,7 @@ namespace BlackMisc
CAircraftIcaoCodeList CAircraftIcaoCodeList::findEndingWith(const QString &icaoEnding) const CAircraftIcaoCodeList CAircraftIcaoCodeList::findEndingWith(const QString &icaoEnding) const
{ {
QString ends = icaoEnding.trimmed().toUpper(); const QString ends = icaoEnding.trimmed().toUpper();
if (ends.isEmpty()) { return CAircraftIcaoCodeList(); } if (ends.isEmpty()) { return CAircraftIcaoCodeList(); }
CAircraftIcaoCodeList icaosDesignator; CAircraftIcaoCodeList icaosDesignator;
CAircraftIcaoCodeList icaosFamily; CAircraftIcaoCodeList icaosFamily;
@@ -317,16 +317,29 @@ namespace BlackMisc
return max; return max;
} }
CAircraftIcaoCodeList CAircraftIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates) CAircraftIcaoCodeList CAircraftIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates, CAircraftIcaoCodeList *inconsistent)
{ {
CAircraftIcaoCodeList codes; CAircraftIcaoCodeList codes;
for (const QJsonValue &value : array) for (const QJsonValue &value : array)
{ {
const CAircraftIcaoCode icao(CAircraftIcaoCode::fromDatabaseJson(value.toObject())); const CAircraftIcaoCode icao(CAircraftIcaoCode::fromDatabaseJson(value.toObject()));
if (ignoreIncompleteAndDuplicates) if (!icao.hasSpecialDesignator() && !icao.hasCompleteData())
{ {
if (!icao.hasSpecialDesignator() && !icao.hasCompleteData()) { continue; } if (ignoreIncompleteAndDuplicates) { continue; }
if (icao.isDbDuplicate()) { continue; } if (inconsistent)
{
inconsistent->push_back(icao);
continue;
}
}
if (icao.isDbDuplicate())
{
if (ignoreIncompleteAndDuplicates) { continue; }
if (inconsistent)
{
inconsistent->push_back(icao);
continue;
}
} }
codes.push_back(icao); codes.push_back(icao);
} }

View File

@@ -135,7 +135,7 @@ namespace BlackMisc
QPair<QString, int> maxCountManufacturer() const; QPair<QString, int> maxCountManufacturer() const;
//! From our database JSON format //! From our database JSON format
static CAircraftIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates = true); static CAircraftIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncompleteAndDuplicates = true, CAircraftIcaoCodeList *inconsistent = nullptr);
}; };
} //namespace } //namespace
} // namespace } // namespace

View File

@@ -185,15 +185,21 @@ namespace BlackMisc
return airlineCode; return airlineCode;
} }
CAirlineIcaoCodeList CAirlineIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete) CAirlineIcaoCodeList CAirlineIcaoCodeList::fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete, CAirlineIcaoCodeList *inconsistent)
{ {
CAirlineIcaoCodeList codes; CAirlineIcaoCodeList codes;
for (const QJsonValue &value : array) for (const QJsonValue &value : array)
{ {
const CAirlineIcaoCode icao(CAirlineIcaoCode::fromDatabaseJson(value.toObject())); const CAirlineIcaoCode icao(CAirlineIcaoCode::fromDatabaseJson(value.toObject()));
if (ignoreIncomplete && !icao.hasCompleteData()) const bool incomplete = !icao.hasCompleteData();
if (incomplete)
{ {
continue; if (ignoreIncomplete) { continue; }
if (inconsistent)
{
inconsistent->push_back(icao);
continue;
}
} }
codes.push_back(icao); codes.push_back(icao);
} }

View File

@@ -96,7 +96,7 @@ namespace BlackMisc
QStringList toNameCompleterStrings(bool sort = true) const; QStringList toNameCompleterStrings(bool sort = true) const;
//! From our DB JSON //! From our DB JSON
static CAirlineIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete = true); static CAirlineIcaoCodeList fromDatabaseJson(const QJsonArray &array, bool ignoreIncomplete = true, CAirlineIcaoCodeList *inconsistent = nullptr);
}; };
} //namespace } //namespace
} // namespace } // namespace