Working on logs

This commit is contained in:
Ondřej Fischer 2019-10-30 13:59:41 +01:00
parent a55a6f6b93
commit ba1315d1da
9 changed files with 88 additions and 46 deletions

View File

@ -11,15 +11,14 @@ int main(int argc, char *argv[])
QCoreApplication::setApplicationVersion("1.0"); QCoreApplication::setApplicationVersion("1.0");
QCommandLineParser parser; QCommandLineParser parser;
Logger *logger = Logger::getLogger(); 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"); QCommandLineOption dryModeOption("dryMode", "ColnodAPI", "Read-only mode, prints changes which would normally be made");
parser.addOption(dryModeOption); parser.addOption(dryModeOption);
parser.process(app); parser.process(app);
auto *api = new ColnodAPI(true); // parser.isSet(dryModeOption)); auto *api = new ColnodAPI(parser.isSet(dryModeOption));
api->loadDataFromDB(); api->loadDataFromDB();
api->loadDataFromColnod(); api->loadDataFromColnod();
QObject::connect(api, &ColnodAPI::dataDownloaded, [=](){ QObject::connect(api, &ColnodAPI::dataDownloaded, [=](){
qDebug() << "All items are loaded to data manager.";
api->syncDataFromColnodToDB(); api->syncDataFromColnodToDB();
api->syncDataFromDBToColnod(); api->syncDataFromDBToColnod();
QObject::connect(api, &ColnodAPI::syncFinished, [=](){ QObject::connect(api, &ColnodAPI::syncFinished, [=](){

View File

@ -135,7 +135,6 @@ void ColnodAPI::syncUpdatedDataFromDBToColnod()
areDataUpdatedToColnod(); areDataUpdatedToColnod();
resp0->deleteLater(); resp0->deleteLater();
}); });
} }
} }
@ -144,12 +143,18 @@ void ColnodAPI::syncDeletedDataFromDBToColnod()
{ {
dataMan->filterTokensDB(); dataMan->filterTokensDB();
auto tokensToDelete = dataMan->getTokensToDeleteDB(); auto tokensToDelete = dataMan->getTokensToDeleteDB();
if (dryMode){
for (const auto &token : tokensToDelete)
qInfo() << "Deleting token: " << token << "from Colnod";
}
else {
Response* resp1 = reqMan->deleteTokens(tokensToDelete); Response* resp1 = reqMan->deleteTokens(tokensToDelete);
connect(resp1, &Response::ready, [=](){ connect(resp1, &Response::ready, [=](){
deleteFinished = true; deleteFinished = true;
areDataUpdatedToColnod(); areDataUpdatedToColnod();
resp1->deleteLater(); resp1->deleteLater();
}); });
}
} }
// For full sync // For full sync

View File

@ -154,15 +154,17 @@ QString DatabaseManager::getLastQuery(const QSqlQuery& query) const
void DatabaseManager::executeNonPreperedQuery(const QString &statement, QSqlQuery &query) const void DatabaseManager::executeNonPreperedQuery(const QString &statement, QSqlQuery &query) const
{ {
if (dryMode){ if (dryMode){
QString sqlStatement = getLastQuery(query);
qDebug() << sqlStatement;
if (statement.contains("SELECT")) if (statement.contains("SELECT"))
query.exec(statement); query.exec(statement);
} }
else{ else{
query.exec(statement); query.exec(statement);
} }
} }
bool DatabaseManager::executeQuery(QSqlQuery &query) const bool DatabaseManager::executeQuery(QSqlQuery &query) const
{ {
if (dryMode){ if (dryMode){
@ -172,7 +174,6 @@ bool DatabaseManager::executeQuery(QSqlQuery &query) const
query.exec(); query.exec();
return true; return true;
} }
bool res = query.exec(); bool res = query.exec();
return res; return res;
@ -270,11 +271,29 @@ void DatabaseManager::setLastUpdate(const QString& id, quint64 lastUpdate)
executeQuery(query); 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.bindValue(":msg", msg);
query.exec(); 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();
}

View File

@ -36,7 +36,10 @@ public:
void setLastUpdate(const QString& id, quint64 lastUpdate); 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: private:
bool checkIfExists(const QString& id, const QString& table); bool checkIfExists(const QString& id, const QString& table);

View File

@ -46,11 +46,11 @@ void DataManager::fillTokensToUpdateColnod(const QString& response)
token->setDeleted(false); token->setDeleted(false);
tokensToUpdateFromColnodToDB.insert(token->idToStringWithoutBraces(), token); tokensToUpdateFromColnodToDB.insert(token->idToStringWithoutBraces(), token);
} }
qInfo() << tokensToUpdateFromColnodToDB.size() << " tokens to update from Colnod"; qInfo() << "Colnod:" << tokensToUpdateFromColnodToDB.size() << "tokens to update";
} }
else else
{ {
qInfo() << "0 tokens to update from Colnod"; qInfo() << "Colnod: 0 tokens to update";
auto token = new Token("empty"); auto token = new Token("empty");
tokensToUpdateFromColnodToDB.insert(token->getName(), token); tokensToUpdateFromColnodToDB.insert(token->getName(), token);
} }
@ -69,11 +69,11 @@ void DataManager::fillSubjectsToUpdateColnod(const QString& response)
subject->fromJSON(item.toObject()); subject->fromJSON(item.toObject());
subjectsToUpdateFromColnodToDB.insert(subject->idToStringWithoutBraces(), subject); subjectsToUpdateFromColnodToDB.insert(subject->idToStringWithoutBraces(), subject);
} }
qInfo() << subjectsToUpdateFromColnodToDB.size() << " subjects to update from Colnod"; qInfo() << "Colnod:" << subjectsToUpdateFromColnodToDB.size() << "subjects to update";
} }
else else
{ {
qInfo() << "0 subjects to update from Colnod"; qInfo() << "Colnod:" << "0 subjects to update";
Subject* subject = new Subject("empty"); Subject* subject = new Subject("empty");
subjectsToUpdateFromColnodToDB.insert(subject->getName(), subject); subjectsToUpdateFromColnodToDB.insert(subject->getName(), subject);
} }
@ -94,8 +94,8 @@ void DataManager::fillTokensToChangeDB()
tokensToUpdateFromDBToColnod.insert(token->idToStringWithoutBraces(), token); tokensToUpdateFromDBToColnod.insert(token->idToStringWithoutBraces(), token);
} }
} }
qDebug() << tokensToUpdateFromDBToColnod.size() << " tokens to update from DB"; qDebug() << "DB:" << tokensToUpdateFromDBToColnod.size() << "tokens to update";
qDebug() << tokensFromDBToDeleteFromColnod.size() << " tokens to delete from DB"; qDebug() << "DB:" << tokensFromDBToDeleteFromColnod.size() << "tokens to delete";
} }
void DataManager::fillSubjectsToUpdateDB() void DataManager::fillSubjectsToUpdateDB()
@ -106,8 +106,6 @@ void DataManager::fillSubjectsToUpdateDB()
// load working set with subjest to delete from Colnod // load working set with subjest to delete from Colnod
void DataManager::fillSubjectsToDeleteColnod(const QString& json) void DataManager::fillSubjectsToDeleteColnod(const QString& json)
{ {
Logger::log("hello from dataManager :)");
Logger::logToDb("testing");
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
QJsonArray items = doc.object()["items"].toArray(); QJsonArray items = doc.object()["items"].toArray();
if (!items.empty()) if (!items.empty())
@ -115,10 +113,10 @@ void DataManager::fillSubjectsToDeleteColnod(const QString& json)
for (QJsonValueRef item : items) { for (QJsonValueRef item : items) {
subjectsFromColnodToDeleteFromDB.append(item.toString()); subjectsFromColnodToDeleteFromDB.append(item.toString());
} }
qInfo() << subjectsFromColnodToDeleteFromDB.size() << " subjects deleted in Colnod"; qInfo() << "Colnod:" << subjectsFromColnodToDeleteFromDB.size() << "subjects to delete";
} }
else { else {
qInfo() << "0 subjects deleted in Colnod"; qInfo() << "Colnod: 0 subjects to delete";
subjectsFromColnodToDeleteFromDB.append("empty"); subjectsFromColnodToDeleteFromDB.append("empty");
} }
} }
@ -133,10 +131,10 @@ void DataManager::fillTokensToDeleteColnod(const QString& json)
for (QJsonValueRef item : items) { for (QJsonValueRef item : items) {
tokensFromColnodToDeleteFromDB.append(item.toString()); tokensFromColnodToDeleteFromDB.append(item.toString());
} }
qInfo() << tokensFromColnodToDeleteFromDB.size() << " tokens deleted in Colnod"; qInfo() << "Colnod:" << tokensFromColnodToDeleteFromDB.size() << "tokens to delete";
} }
else { else {
qInfo() << "0 tokens deleted in Colnod"; qInfo() << "Colnod: 0 tokens to delete";
tokensFromColnodToDeleteFromDB.append("empty"); tokensFromColnodToDeleteFromDB.append("empty");
} }
} }
@ -150,11 +148,12 @@ void DataManager::fillSubjectsToDeleteDB()
void DataManager::pushSubjectsToDB() void DataManager::pushSubjectsToDB()
{ {
if (subjectsToUpdateFromColnodToDB.contains("empty")) { if (subjectsToUpdateFromColnodToDB.contains("empty")) {
qInfo() << "DB: 0 subjects added";
qInfo() << "DB: 0 subjects updated";
return; return;
} }
int updated = 0; int updated = 0;
int added = 0; int added = 0;
qInfo() << "Subjects in progress...";
for (const auto& subject : subjectsToUpdateFromColnodToDB) for (const auto& subject : subjectsToUpdateFromColnodToDB)
{ {
if (db->saveSubject(subject, "colnod_subject") > 0) if (db->saveSubject(subject, "colnod_subject") > 0)
@ -163,20 +162,21 @@ void DataManager::pushSubjectsToDB()
updated++; updated++;
db->saveSubjectAttributes(subject, "colnod_subject_attribute"); db->saveSubjectAttributes(subject, "colnod_subject_attribute");
} }
qInfo() << added << " subjects added to DB"; qInfo() << "DB:" << added << "subjects added";
qInfo() << updated << " subjects updated to DB"; qInfo() << "DB:" << updated << "subjects updated";
} }
// update tokens from colnod to DB // update tokens from colnod to DB
void DataManager::pushTokensToDB() void DataManager::pushTokensToDB()
{ {
if (tokensToUpdateFromColnodToDB.contains("empty")){ if (tokensToUpdateFromColnodToDB.contains("empty")){
qInfo() << "DB: 0 tokens added";
qInfo() << "DB: 0 tokens updated";
return; return;
} }
filterTokensColnod(); filterTokensColnod();
int updated = 0; int updated = 0;
int added = 0; int added = 0;
qInfo() << "Tokens in progress...";
for (const auto& token : tokensToUpdateFromColnodToDB) for (const auto& token : tokensToUpdateFromColnodToDB)
{ {
if (db->saveToken(token, "colnod_token") > 0) if (db->saveToken(token, "colnod_token") > 0)
@ -184,8 +184,8 @@ void DataManager::pushTokensToDB()
else else
updated++; updated++;
} }
qInfo() << added << " tokens added to DB"; qInfo() << "DB:" << added << " tokens added";
qInfo() << updated << " tokens updated to DB"; qInfo() << "DB:" << updated << " tokens updated";
} }
@ -193,14 +193,14 @@ void DataManager::deleteSubjectsFromDB()
{ {
if (subjectsFromColnodToDeleteFromDB[0] == "empty") if (subjectsFromColnodToDeleteFromDB[0] == "empty")
{ {
qInfo() << "DB: 0 subjects deleted";
return; return;
} }
qInfo() << "Deleting subjects in progress...";
for (const auto& subjectId : subjectsFromColnodToDeleteFromDB) for (const auto& subjectId : subjectsFromColnodToDeleteFromDB)
{ {
db->setDeleted(subjectId, "colnod_subject"); 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 // "delete" (set deleted true) tokens in DB depends on Colnod
@ -208,15 +208,20 @@ void DataManager::setDeletedToTokensFromDB()
{ {
if (tokensFromColnodToDeleteFromDB[0] == "empty") if (tokensFromColnodToDeleteFromDB[0] == "empty")
{ {
qDebug() << "0 tokens to be deleted"; qDebug() << "DB: 0 tokens deleted";
return; return;
} }
qDebug() << "Deleted tokens in progress..."; int alreadyDeleted = 0;
for (const auto& tokenId : tokensFromColnodToDeleteFromDB) for (const auto& tokenId : tokensFromColnodToDeleteFromDB)
{ {
if (!db->checkDeletedToken(tokenId)){
db->setDeleted(tokenId, "colnod_token"); db->setDeleted(tokenId, "colnod_token");
Logger::logToDb(Logger::makeMsg(tokenId, "deleted", "DB"));
} }
qDebug() << tokensFromColnodToDeleteFromDB.size() << "tokens deleted from DB"; else
alreadyDeleted++;
}
qDebug() << "DB:" << tokensFromColnodToDeleteFromDB.size() - alreadyDeleted << "tokens deleted";
} }
// do I have loaded all data // 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() void DataManager::setLastUpdate()
{ {
for (const auto &token : tokensToUpdateFromColnodToDB){ for (const auto &token : tokensToUpdateFromColnodToDB){

View File

@ -1,5 +1,8 @@
#include "logger.h" #include "logger.h"
DatabaseManager *Logger::dbMan = nullptr;
Logger *Logger::logger = nullptr;
Logger::Logger() Logger::Logger()
{ {
dbMan = nullptr; dbMan = nullptr;
@ -19,7 +22,8 @@ void Logger::log(const QString& msg)
void Logger::logToDb(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) void Logger::setDBMan(DatabaseManager *dbMan)
@ -27,7 +31,12 @@ void Logger::setDBMan(DatabaseManager *dbMan)
Logger::dbMan = 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;

View File

@ -20,9 +20,11 @@ public:
static void log(const QString& msg); static void log(const QString& msg);
static void logToDb(const QString& msg); static void logToDb(const QString& msg);
static void setDBMan(DatabaseManager* dbMan); static void setDBMan(DatabaseManager* dbMan);
static QString makeMsg(const QString& tokenId, const QString& action, const QString& source);
private: private:
}; };

View File

@ -35,7 +35,7 @@ Response* RequestManager::login()
reply->deleteLater(); reply->deleteLater();
return; return;
} }
qDebug() << "Logged in successfully."; //qDebug() << "Logged in successfully.";
loginStatus = true; loginStatus = true;
emit successLogin(); emit successLogin();
reply->deleteLater(); reply->deleteLater();

View File

@ -11,6 +11,7 @@ void ComplexTest::initTestCase()
// QCOMPARE(deleteTokensRespSpy.count(), 0); // QCOMPARE(deleteTokensRespSpy.count(), 0);
// deleteTokensRespSpy.wait(timeout); // deleteTokensRespSpy.wait(timeout);
// QTest::qWait(2500); // QTest::qWait(2500);
// Logger *logger = Logger::getLogger();
start = QDateTime::currentMSecsSinceEpoch()-2000; start = QDateTime::currentMSecsSinceEpoch()-2000;
api = new ColnodAPI(); api = new ColnodAPI();
qDebug() << start; qDebug() << start;
@ -129,7 +130,6 @@ void ComplexTest::fullSync()
void ComplexTest::syncLastUpdated() void ComplexTest::syncLastUpdated()
{ {
Logger *logger = Logger::getLogger();
Logger::log("ahoj"); Logger::log("ahoj");
api->loadDataFromColnod(); api->loadDataFromColnod();
QSignalSpy spy(api, &ColnodAPI::dataDownloaded); QSignalSpy spy(api, &ColnodAPI::dataDownloaded);