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");
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, [=](){

View File

@ -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

View File

@ -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();
}

View File

@ -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);

View File

@ -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){

View File

@ -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;

View File

@ -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:
};

View File

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

View File

@ -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);