added staff to handle initialization error

This commit is contained in:
Ondřej Fischer 2019-11-07 12:49:02 +01:00
parent 811345c301
commit b914b1c11d
10 changed files with 67 additions and 35 deletions

View File

@ -16,6 +16,12 @@ int main(int argc, char *argv[])
parser.addOption(dryModeOption); parser.addOption(dryModeOption);
parser.process(app); parser.process(app);
SyncManager api(parser.isSet(dryModeOption)); SyncManager api(parser.isSet(dryModeOption));
if (!api.isValid())
return 1;
QObject::connect(&api, &SyncManager::error, [](){
qDebug() << "error";
QCoreApplication::exit(1);
});
api.loadDataFromDB(); api.loadDataFromDB();
api.loadDataFromColnod(); api.loadDataFromColnod();
QObject::connect(&api, &SyncManager::dataDownloaded, [&](){ QObject::connect(&api, &SyncManager::dataDownloaded, [&](){
@ -26,9 +32,5 @@ int main(int argc, char *argv[])
api.syncDataFromColnodToDB(); api.syncDataFromColnodToDB();
api.syncDataFromDBToColnod(); api.syncDataFromDBToColnod();
}); });
QObject::connect(&api, &SyncManager::error, [](){
qDebug() << "error";
QCoreApplication::exit();
});
return QCoreApplication::exec(); return QCoreApplication::exec();
} }

View File

@ -10,9 +10,13 @@ DatabaseManager::DatabaseManager(const QString& host, const QString& dbName, con
db.setPassword(password); db.setPassword(password);
if (!db.open()) if (!db.open())
{ {
log("Opening error" + db.lastError().text()); opened = false;
Logger::log("Opening error" + db.lastError().text());
emit error(); emit error();
} }
else{
opened = true;
}
} }
// add or update subject to db // add or update subject to db
@ -139,7 +143,7 @@ bool DatabaseManager::executeQuery(QSqlQuery &query, const QString &statement)
if (!dryMode || getLastQuery(query).startsWith("SELECT")){ if (!dryMode || getLastQuery(query).startsWith("SELECT")){
if (!query.exec()){ if (!query.exec()){
QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text()); QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text());
log(QString(msg)); Logger::logToDb(QString(msg));
emit error(); emit error();
} }
} }
@ -151,7 +155,7 @@ bool DatabaseManager::executeQuery(QSqlQuery &query, const QString &statement)
if (!dryMode || statement.startsWith("SELECT")){ if (!dryMode || statement.startsWith("SELECT")){
if (!query.exec(statement)){ if (!query.exec(statement)){
QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text()); QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text());
log(QString(msg)); Logger::logToDb(QString(msg));
emit error(); emit error();
} }
} }
@ -300,3 +304,8 @@ bool DatabaseManager::checkDeletedToken(const QString &id)
query.next(); query.next();
return query.value(0).toBool(); return query.value(0).toBool();
} }
bool DatabaseManager::isOpen()
{
return opened;
}

View File

@ -10,7 +10,7 @@
#include "subject.h" #include "subject.h"
#include "token.h" #include "token.h"
#include <QDateTime> #include <QDateTime>
//#include "logger.h" #include "logger.h"
class DatabaseManager : public QObject class DatabaseManager : public QObject
@ -41,6 +41,8 @@ public:
QString getSubjectNameById(const QString &id); QString getSubjectNameById(const QString &id);
bool checkDeletedToken(const QString &id); bool checkDeletedToken(const QString &id);
bool isOpen();
private: private:
bool checkIfExists(const QString& id, const QString& table); bool checkIfExists(const QString& id, const QString& table);
@ -53,4 +55,5 @@ signals:
private: private:
QSqlDatabase db; QSqlDatabase db;
bool dryMode = false; bool dryMode = false;
bool opened = false;
}; };

View File

@ -5,9 +5,15 @@ DataManager::DataManager(const bool &dryMode)
{ {
db = std::make_shared<DatabaseManager>("192.168.1.94", "deloitte", "postgres", "34rjkciea12", dryMode); db = std::make_shared<DatabaseManager>("192.168.1.94", "deloitte", "postgres", "34rjkciea12", dryMode);
//db = std::make_shared<DatabaseManager>("localhost", "deloitte", "postgres", "34rjkciea12"); //db = std::make_shared<DatabaseManager>("localhost", "deloitte", "postgres", "34rjkciea12");
if (db->isOpen()){
Logger::setDBMan(db); Logger::setDBMan(db);
nextLastSync = db->getNow(); nextLastSync = db->getNow();
lastSync = db->getLastSync(); lastSync = db->getLastSync();
}
else {
emit error();
QCoreApplication::quit();
}
connect(db.get(), &DatabaseManager::error, this, &DataManager::error); connect(db.get(), &DatabaseManager::error, this, &DataManager::error);
} }
@ -77,6 +83,7 @@ void DataManager::fillSubjectsToUpdateColnod(const QString& response)
// load working sets with updated/deleted tokens from DB // load working sets with updated/deleted tokens from DB
void DataManager::fillTokensToChangeDB() void DataManager::fillTokensToChangeDB()
{ {
if (db->isOpen()){
QSqlQuery query = db->getUpdatedTokens(); QSqlQuery query = db->getUpdatedTokens();
while (query.next()) while (query.next())
{ {
@ -92,6 +99,8 @@ void DataManager::fillTokensToChangeDB()
qDebug() << "DB:" << tokensToUpdateFromDBToColnod.size() << "tokens to update"; qDebug() << "DB:" << tokensToUpdateFromDBToColnod.size() << "tokens to update";
qDebug() << "DB:" << tokensFromDBToDeleteFromColnod.size() << "tokens to delete"; qDebug() << "DB:" << tokensFromDBToDeleteFromColnod.size() << "tokens to delete";
} }
else emit error();
}
void DataManager::fillSubjectsToUpdateDB() void DataManager::fillSubjectsToUpdateDB()
{ {
@ -278,6 +287,7 @@ void DataManager::clear()
// on the very end of sync update last sync time to begin time of this sync // on the very end of sync update last sync time to begin time of this sync
void DataManager::updateLastSync() void DataManager::updateLastSync()
{ {
if (db->isOpen())
db->updateLastSync(nextLastSync); db->updateLastSync(nextLastSync);
} }

View File

@ -50,6 +50,8 @@ public:
const quint64 &getLastSync() {return lastSync;} const quint64 &getLastSync() {return lastSync;}
const quint64 &getCurrentSync() {return nextLastSync;} const quint64 &getCurrentSync() {return nextLastSync;}
bool isDBOpened() {return db->isOpen();}
public slots: public slots:
void clear(); void clear();
void setLastUpdate(); void setLastUpdate();

View File

@ -1,4 +1,5 @@
#include "logger.h" #include "logger.h"
#include "databasemanager.h"
#include <utility> #include <utility>
@ -24,7 +25,7 @@ void Logger::log(const QString& msg)
void Logger::logToDb(const QString &msg) void Logger::logToDb(const QString &msg)
{ {
Q_ASSERT(Logger::dbMan); if (dbMan)
Logger::dbMan->log(msg); Logger::dbMan->log(msg);
} }

View File

@ -3,7 +3,9 @@
#include <QString> #include <QString>
#include <QDebug> #include <QDebug>
#include <QSqlDatabase> #include <QSqlDatabase>
#include "databasemanager.h" #include <memory>
class DatabaseManager;
class Logger class Logger

View File

@ -1,11 +1,10 @@
#include "syncmanager.h" #include "syncmanager.h"
SyncManager::SyncManager(bool dryMode) SyncManager::SyncManager(bool dryMode)
:dryMode(dryMode)
{ {
reqMan = std::make_unique<RequestManager>(); reqMan = std::make_unique<RequestManager>();
dataMan = std::make_unique<DataManager>(dryMode); dataMan = std::make_unique<DataManager>(dryMode);
this->dryMode = dryMode;
connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error); connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error);
connect(dataMan.get(), &DataManager::error, this, &SyncManager::error); connect(dataMan.get(), &DataManager::error, this, &SyncManager::error);
} }
@ -125,8 +124,10 @@ void SyncManager::syncDataFromDBToColnod()
if (!dataMan->getTokensToDeleteDB().isEmpty()){ if (!dataMan->getTokensToDeleteDB().isEmpty()){
syncDeletedDataFromDBToColnod(); syncDeletedDataFromDBToColnod();
} }
else else{
deleteFinished = true; deleteFinished = true;
areDataUpdatedToColnod();
}
} }
// add or update tokens to Colnod // add or update tokens to Colnod
@ -184,6 +185,11 @@ void SyncManager::prepareDatabase()
dataMan->emptyDatabase(); dataMan->emptyDatabase();
} }
bool SyncManager::isValid()
{
return dataMan->isDBOpened();
}
// emit signal when all data is downloaded from Colnod // emit signal when all data is downloaded from Colnod
void SyncManager::areChangedDataReady() void SyncManager::areChangedDataReady()
{ {

View File

@ -17,6 +17,8 @@ public:
void prepareDatabase(); void prepareDatabase();
bool isValid();
public slots: public slots:
void loadDataFromColnod(); void loadDataFromColnod();
void loadDataFromDB(); void loadDataFromDB();

View File

@ -37,11 +37,6 @@ private slots:
void deleteTokens(); void deleteTokens();
void subjectJSONParser(); void subjectJSONParser();
void tokenJSONParser(); void tokenJSONParser();
//void connectToDB();
//void debugConnection();
void saveDataToDB();
void getUuid();
private: private:
std::shared_ptr<Token> getTestToken(); std::shared_ptr<Token> getTestToken();