From ba1315d1da63b6f1d699b442293e85f6f70a5bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Wed, 30 Oct 2019 13:59:41 +0100 Subject: [PATCH] Working on logs --- src/app/main.cpp | 5 ++-- src/colnod/colnodapi.cpp | 19 +++++++----- src/colnod/databasemanager.cpp | 29 ++++++++++++++---- src/colnod/databasemanager.h | 5 +++- src/colnod/datamanager.cpp | 55 ++++++++++++++++++---------------- src/colnod/logger.cpp | 15 ++++++++-- src/colnod/logger.h | 2 ++ src/colnod/requestmanager.cpp | 2 +- test/unitTests/complextest.cpp | 2 +- 9 files changed, 88 insertions(+), 46 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index 10a4150..112dc39 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -11,15 +11,14 @@ int main(int argc, char *argv[]) QCoreApplication::setApplicationVersion("1.0"); QCommandLineParser parser; Logger *logger = Logger::getLogger(); - parser.setApplicationDescription("Dry mode"); + parser.setApplicationDescription("Colnod sync"); QCommandLineOption dryModeOption("dryMode", "ColnodAPI", "Read-only mode, prints changes which would normally be made"); parser.addOption(dryModeOption); parser.process(app); - auto *api = new ColnodAPI(true); // parser.isSet(dryModeOption)); + auto *api = new ColnodAPI(parser.isSet(dryModeOption)); api->loadDataFromDB(); api->loadDataFromColnod(); QObject::connect(api, &ColnodAPI::dataDownloaded, [=](){ - qDebug() << "All items are loaded to data manager."; api->syncDataFromColnodToDB(); api->syncDataFromDBToColnod(); QObject::connect(api, &ColnodAPI::syncFinished, [=](){ diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index c6a4add..4fbdbeb 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -135,7 +135,6 @@ void ColnodAPI::syncUpdatedDataFromDBToColnod() areDataUpdatedToColnod(); resp0->deleteLater(); }); - } } @@ -144,12 +143,18 @@ void ColnodAPI::syncDeletedDataFromDBToColnod() { dataMan->filterTokensDB(); auto tokensToDelete = dataMan->getTokensToDeleteDB(); - Response* resp1 = reqMan->deleteTokens(tokensToDelete); - connect(resp1, &Response::ready, [=](){ - deleteFinished = true; - areDataUpdatedToColnod(); - resp1->deleteLater(); - }); + if (dryMode){ + for (const auto &token : tokensToDelete) + qInfo() << "Deleting token: " << token << "from Colnod"; + } + else { + Response* resp1 = reqMan->deleteTokens(tokensToDelete); + connect(resp1, &Response::ready, [=](){ + deleteFinished = true; + areDataUpdatedToColnod(); + resp1->deleteLater(); + }); + } } // For full sync diff --git a/src/colnod/databasemanager.cpp b/src/colnod/databasemanager.cpp index 27a54d4..7b84c1f 100644 --- a/src/colnod/databasemanager.cpp +++ b/src/colnod/databasemanager.cpp @@ -154,15 +154,17 @@ QString DatabaseManager::getLastQuery(const QSqlQuery& query) const void DatabaseManager::executeNonPreperedQuery(const QString &statement, QSqlQuery &query) const { if (dryMode){ + QString sqlStatement = getLastQuery(query); + qDebug() << sqlStatement; if (statement.contains("SELECT")) query.exec(statement); } else{ query.exec(statement); } - } + bool DatabaseManager::executeQuery(QSqlQuery &query) const { if (dryMode){ @@ -172,7 +174,6 @@ bool DatabaseManager::executeQuery(QSqlQuery &query) const query.exec(); return true; } - bool res = query.exec(); return res; @@ -270,11 +271,29 @@ void DatabaseManager::setLastUpdate(const QString& id, quint64 lastUpdate) executeQuery(query); } -void DatabaseManager::log(QString msg) +void DatabaseManager::log(const QString &msg) { - query.prepare("INSERT INTO logs (msg) VALUES (:msg)"); + query.prepare("INSERT INTO logs (log_time, msg) VALUES (NOW(), :msg)"); query.bindValue(":msg", msg); query.exec(); - //executeQuery(query); } +QString DatabaseManager::getSubjectName(const QString &tokenId) +{ + query.prepare("SELECT name FROM colnod_subject WHERE id = (SELECT subject_id FROM colnod_token WHERE id = :tokenId)"); + query.bindValue(":tokenId", tokenId); + executeQuery(query); + if (query.next()) + return query.value(0).toString(); + qWarning() << "Token:" << tokenId << "is not assigned to any sbject"; + return "No Subject"; +} + +bool DatabaseManager::checkDeletedToken(const QString &id) +{ + query.prepare("SELECT deleted FROM colnod_token WHERE id = :id"); + query.bindValue(":id", id); + executeQuery(query); + query.next(); + return query.value(0).toBool(); +} diff --git a/src/colnod/databasemanager.h b/src/colnod/databasemanager.h index 2e4ddb6..54e0771 100644 --- a/src/colnod/databasemanager.h +++ b/src/colnod/databasemanager.h @@ -36,7 +36,10 @@ public: void setLastUpdate(const QString& id, quint64 lastUpdate); - void log(QString msg); + void log(const QString &msg); + QString getSubjectName(const QString &tokenId); + bool checkDeletedToken(const QString &id); + private: bool checkIfExists(const QString& id, const QString& table); diff --git a/src/colnod/datamanager.cpp b/src/colnod/datamanager.cpp index e758a1d..06fa344 100644 --- a/src/colnod/datamanager.cpp +++ b/src/colnod/datamanager.cpp @@ -46,11 +46,11 @@ void DataManager::fillTokensToUpdateColnod(const QString& response) token->setDeleted(false); tokensToUpdateFromColnodToDB.insert(token->idToStringWithoutBraces(), token); } - qInfo() << tokensToUpdateFromColnodToDB.size() << " tokens to update from Colnod"; + qInfo() << "Colnod:" << tokensToUpdateFromColnodToDB.size() << "tokens to update"; } else { - qInfo() << "0 tokens to update from Colnod"; + qInfo() << "Colnod: 0 tokens to update"; auto token = new Token("empty"); tokensToUpdateFromColnodToDB.insert(token->getName(), token); } @@ -69,11 +69,11 @@ void DataManager::fillSubjectsToUpdateColnod(const QString& response) subject->fromJSON(item.toObject()); subjectsToUpdateFromColnodToDB.insert(subject->idToStringWithoutBraces(), subject); } - qInfo() << subjectsToUpdateFromColnodToDB.size() << " subjects to update from Colnod"; + qInfo() << "Colnod:" << subjectsToUpdateFromColnodToDB.size() << "subjects to update"; } else { - qInfo() << "0 subjects to update from Colnod"; + qInfo() << "Colnod:" << "0 subjects to update"; Subject* subject = new Subject("empty"); subjectsToUpdateFromColnodToDB.insert(subject->getName(), subject); } @@ -94,8 +94,8 @@ void DataManager::fillTokensToChangeDB() tokensToUpdateFromDBToColnod.insert(token->idToStringWithoutBraces(), token); } } - qDebug() << tokensToUpdateFromDBToColnod.size() << " tokens to update from DB"; - qDebug() << tokensFromDBToDeleteFromColnod.size() << " tokens to delete from DB"; + qDebug() << "DB:" << tokensToUpdateFromDBToColnod.size() << "tokens to update"; + qDebug() << "DB:" << tokensFromDBToDeleteFromColnod.size() << "tokens to delete"; } void DataManager::fillSubjectsToUpdateDB() @@ -106,8 +106,6 @@ void DataManager::fillSubjectsToUpdateDB() // load working set with subjest to delete from Colnod void DataManager::fillSubjectsToDeleteColnod(const QString& json) { - Logger::log("hello from dataManager :)"); - Logger::logToDb("testing"); QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QJsonArray items = doc.object()["items"].toArray(); if (!items.empty()) @@ -115,10 +113,10 @@ void DataManager::fillSubjectsToDeleteColnod(const QString& json) for (QJsonValueRef item : items) { subjectsFromColnodToDeleteFromDB.append(item.toString()); } - qInfo() << subjectsFromColnodToDeleteFromDB.size() << " subjects deleted in Colnod"; + qInfo() << "Colnod:" << subjectsFromColnodToDeleteFromDB.size() << "subjects to delete"; } else { - qInfo() << "0 subjects deleted in Colnod"; + qInfo() << "Colnod: 0 subjects to delete"; subjectsFromColnodToDeleteFromDB.append("empty"); } } @@ -133,10 +131,10 @@ void DataManager::fillTokensToDeleteColnod(const QString& json) for (QJsonValueRef item : items) { tokensFromColnodToDeleteFromDB.append(item.toString()); } - qInfo() << tokensFromColnodToDeleteFromDB.size() << " tokens deleted in Colnod"; + qInfo() << "Colnod:" << tokensFromColnodToDeleteFromDB.size() << "tokens to delete"; } else { - qInfo() << "0 tokens deleted in Colnod"; + qInfo() << "Colnod: 0 tokens to delete"; tokensFromColnodToDeleteFromDB.append("empty"); } } @@ -150,11 +148,12 @@ void DataManager::fillSubjectsToDeleteDB() void DataManager::pushSubjectsToDB() { if (subjectsToUpdateFromColnodToDB.contains("empty")) { + qInfo() << "DB: 0 subjects added"; + qInfo() << "DB: 0 subjects updated"; return; } int updated = 0; int added = 0; - qInfo() << "Subjects in progress..."; for (const auto& subject : subjectsToUpdateFromColnodToDB) { if (db->saveSubject(subject, "colnod_subject") > 0) @@ -163,20 +162,21 @@ void DataManager::pushSubjectsToDB() updated++; db->saveSubjectAttributes(subject, "colnod_subject_attribute"); } - qInfo() << added << " subjects added to DB"; - qInfo() << updated << " subjects updated to DB"; + qInfo() << "DB:" << added << "subjects added"; + qInfo() << "DB:" << updated << "subjects updated"; } // update tokens from colnod to DB void DataManager::pushTokensToDB() { if (tokensToUpdateFromColnodToDB.contains("empty")){ + qInfo() << "DB: 0 tokens added"; + qInfo() << "DB: 0 tokens updated"; return; } filterTokensColnod(); int updated = 0; int added = 0; - qInfo() << "Tokens in progress..."; for (const auto& token : tokensToUpdateFromColnodToDB) { if (db->saveToken(token, "colnod_token") > 0) @@ -184,8 +184,8 @@ void DataManager::pushTokensToDB() else updated++; } - qInfo() << added << " tokens added to DB"; - qInfo() << updated << " tokens updated to DB"; + qInfo() << "DB:" << added << " tokens added"; + qInfo() << "DB:" << updated << " tokens updated"; } @@ -193,14 +193,14 @@ void DataManager::deleteSubjectsFromDB() { if (subjectsFromColnodToDeleteFromDB[0] == "empty") { + qInfo() << "DB: 0 subjects deleted"; return; } - qInfo() << "Deleting subjects in progress..."; for (const auto& subjectId : subjectsFromColnodToDeleteFromDB) { db->setDeleted(subjectId, "colnod_subject"); } - qInfo() << subjectsFromColnodToDeleteFromDB.size() << " subject deleted from DB"; + qInfo() << "DB:" << subjectsFromColnodToDeleteFromDB.size() << " subject deleted"; } // "delete" (set deleted true) tokens in DB depends on Colnod @@ -208,15 +208,20 @@ void DataManager::setDeletedToTokensFromDB() { if (tokensFromColnodToDeleteFromDB[0] == "empty") { - qDebug() << "0 tokens to be deleted"; + qDebug() << "DB: 0 tokens deleted"; return; } - qDebug() << "Deleted tokens in progress..."; + int alreadyDeleted = 0; for (const auto& tokenId : tokensFromColnodToDeleteFromDB) { - db->setDeleted(tokenId, "colnod_token"); + if (!db->checkDeletedToken(tokenId)){ + db->setDeleted(tokenId, "colnod_token"); + Logger::logToDb(Logger::makeMsg(tokenId, "deleted", "DB")); + } + else + alreadyDeleted++; } - qDebug() << tokensFromColnodToDeleteFromDB.size() << "tokens deleted from DB"; + qDebug() << "DB:" << tokensFromColnodToDeleteFromDB.size() - alreadyDeleted << "tokens deleted"; } // do I have loaded all data @@ -284,7 +289,7 @@ void DataManager::filterTokensColnod() } } -// sync last update in colnod and DB +// sync last update from colnod to DB void DataManager::setLastUpdate() { for (const auto &token : tokensToUpdateFromColnodToDB){ diff --git a/src/colnod/logger.cpp b/src/colnod/logger.cpp index 431897d..bf9a2b9 100644 --- a/src/colnod/logger.cpp +++ b/src/colnod/logger.cpp @@ -1,5 +1,8 @@ #include "logger.h" +DatabaseManager *Logger::dbMan = nullptr; +Logger *Logger::logger = nullptr; + Logger::Logger() { dbMan = nullptr; @@ -19,7 +22,8 @@ void Logger::log(const QString& msg) void Logger::logToDb(const QString &msg) { - dbMan->log(msg); + Q_ASSERT(Logger::dbMan); + Logger::dbMan->log(msg); } void Logger::setDBMan(DatabaseManager *dbMan) @@ -27,7 +31,12 @@ void Logger::setDBMan(DatabaseManager *dbMan) Logger::dbMan = dbMan; } +QString Logger::makeMsg(const QString &tokenId, const QString &action, const QString &source) +{ + QString msg = QString("Token: %1 of subject: %2 %3. Source: %4").arg(tokenId,dbMan->getSubjectName(tokenId), action, source); + return msg; +} + + -Logger *Logger::logger = nullptr; -DatabaseManager *Logger::dbMan = nullptr; diff --git a/src/colnod/logger.h b/src/colnod/logger.h index 13e8494..06290fe 100644 --- a/src/colnod/logger.h +++ b/src/colnod/logger.h @@ -20,9 +20,11 @@ public: static void log(const QString& msg); static void logToDb(const QString& msg); static void setDBMan(DatabaseManager* dbMan); + static QString makeMsg(const QString& tokenId, const QString& action, const QString& source); private: }; + diff --git a/src/colnod/requestmanager.cpp b/src/colnod/requestmanager.cpp index b17ad74..4225213 100644 --- a/src/colnod/requestmanager.cpp +++ b/src/colnod/requestmanager.cpp @@ -35,7 +35,7 @@ Response* RequestManager::login() reply->deleteLater(); return; } - qDebug() << "Logged in successfully."; + //qDebug() << "Logged in successfully."; loginStatus = true; emit successLogin(); reply->deleteLater(); diff --git a/test/unitTests/complextest.cpp b/test/unitTests/complextest.cpp index 0bd7616..7fabed1 100644 --- a/test/unitTests/complextest.cpp +++ b/test/unitTests/complextest.cpp @@ -11,6 +11,7 @@ void ComplexTest::initTestCase() // QCOMPARE(deleteTokensRespSpy.count(), 0); // deleteTokensRespSpy.wait(timeout); // QTest::qWait(2500); + // Logger *logger = Logger::getLogger(); start = QDateTime::currentMSecsSinceEpoch()-2000; api = new ColnodAPI(); qDebug() << start; @@ -129,7 +130,6 @@ void ComplexTest::fullSync() void ComplexTest::syncLastUpdated() { - Logger *logger = Logger::getLogger(); Logger::log("ahoj"); api->loadDataFromColnod(); QSignalSpy spy(api, &ColnodAPI::dataDownloaded);