diff --git a/cacic-daemon/cacicD/cacicD.pro b/cacic-daemon/cacicD/cacicD.pro index 5f66133..e6d4e35 100644 --- a/cacic-daemon/cacicD/cacicD.pro +++ b/cacic-daemon/cacicD/cacicD.pro @@ -19,26 +19,29 @@ win32 { LIBS += -L/usr/lib -lcryptopp } TEMPLATE = app -#TEMPLATE = lib SOURCES += main.cpp \ cacicd.cpp \ cacictimer.cpp \ + cacicthread.cpp \ ../../src/cacic_comm.cpp \ ../../src/ccacic.cpp \ ../../src/wmi.cpp \ ../../src/cacic_computer.cpp \ ../../src/operatingsystem.cpp \ - ../../src/QLogger.cpp + ../../src/QLogger.cpp \ + HEADERS += cacicd.h \ cacictimer.h \ + cacicthread.h \ ../../src/ccacic.h \ ../../src/wmi.h \ ../../src/cacic_computer.h \ ../../src/operatingsystem.h \ ../../src/cacic_comm.h \ - ../../src/QLogger.h + ../../src/QLogger.h \ + include(../../src/qtservice/src/qtservice.pri) diff --git a/cacic-daemon/cacicD/cacicthread.cpp b/cacic-daemon/cacicD/cacicthread.cpp new file mode 100644 index 0000000..04334ee --- /dev/null +++ b/cacic-daemon/cacicD/cacicthread.cpp @@ -0,0 +1,56 @@ +#include "cacicthread.h" + +CacicThread::CacicThread(QString applicationDirPath) +{ + this->applicationDirPath = applicationDirPath; + iniciarInstancias(); +} + +void CacicThread::run(){ + iniciarModulo(); +} + +void CacicThread::setModuloDirPath(const QString &value) +{ + moduloDirPath = value; +} + +void CacicThread::iniciarModulo() +{ + registraInicioColeta(); + QDir::setCurrent(this->applicationDirPath); + QProcess proc; + proc.setWorkingDirectory(this->applicationDirPath); + proc.execute(this->moduloDirPath); + if((proc.atEnd()) && (proc.exitStatus() == QProcess::NormalExit)){ + registraFimColeta("SUCESSO"); + }else{ + if((!proc.atEnd()) || (proc.exitStatus() == QProcess::CrashExit)){ + registraFimColeta("ERRO"); + proc.kill(); + } + } + cMutex->unlock(); + QLogger::QLog_Info("Cacic Daemon (Thread)", QString("Semáforo aberto com sucesso.")); +} + +void CacicThread::setCMutex(QMutex *value) +{ + cMutex = value; +} + +void CacicThread::registraInicioColeta() +{ + QLogger::QLog_Info("Cacic Daemon (Thread)","Coleta iniciada em: " + QDateTime::currentDateTime().toLocalTime().toString()); +} + +void CacicThread::registraFimColeta(QString msg) +{ + QLogger::QLog_Info("Cacic Daemon (Thread)","Coleta finalizada com " + msg + " em: " + QDateTime::currentDateTime().toLocalTime().toString()); +} + +void CacicThread::iniciarInstancias(){ + logManager = QLogger::QLoggerManager::getInstance(); + logManager->addDestination(this->applicationDirPath + "/cacicLog.txt","Cacic Daemon (Thread)",QLogger::InfoLevel); + logManager->addDestination(this->applicationDirPath + "/cacicLog.txt","Cacic Daemon (Thread)",QLogger::ErrorLevel); +} diff --git a/cacic-daemon/cacicD/cacicthread.h b/cacic-daemon/cacicD/cacicthread.h new file mode 100644 index 0000000..9b34ca2 --- /dev/null +++ b/cacic-daemon/cacicD/cacicthread.h @@ -0,0 +1,26 @@ +#ifndef CACICTHREAD_H +#define CACICTHREAD_H +#include +#include +#include "QLogger.h" + +class CacicThread : public QThread +{ +public: + CacicThread(QString applicationDirPath); + void run(); + void setModuloDirPath(const QString &value); + void setCMutex(QMutex *value); + +private: + QString moduloDirPath; + QString applicationDirPath; + QLogger::QLoggerManager *logManager; + void iniciarInstancias(); + void registraInicioColeta(); + void registraFimColeta(QString msg); + void iniciarModulo(); + QMutex *cMutex; +}; + +#endif // CACICTHREAD_H diff --git a/cacic-daemon/cacicD/cacictimer.cpp b/cacic-daemon/cacicD/cacictimer.cpp index a8562d5..73b99c4 100644 --- a/cacic-daemon/cacicD/cacictimer.cpp +++ b/cacic-daemon/cacicD/cacictimer.cpp @@ -38,36 +38,52 @@ void CacicTimer::mslot(){ }catch (...){ QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Não foi possivel verificar a periodicidade no getConfig.json")); } - cMutex->lock(); - QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Semáforo fechado.")); + + verificarEIniciarQMutex(); + if(getTest()){ QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getTeste() success.")); if(getConfig()){ QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getConfig() success.")); //QStringList nomesModulos = verificarModulos(); //if ( !nomesModulos.empty() ) { - // foreach( QString nome, nomesModulos ) { + // foreach( QString nome, nomesModulos ) { definirDirModulo(getApplicationDirPath(), "gercols"); - iniciarModulo(getDirProgram()); - - // if(nome == "gercols"){ - // // Envio do json gerado na coleta - // bool ok; - // QJsonObject jsonColeta = ccacic->getJsonFromFile("coleta.json"); - // OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta ); - // } - // } + cacicthread->setCMutex(cMutex); + cacicthread->setModuloDirPath(getDirProgram()); + cacicthread->start(QThread::NormalPriority); + //if(nome == "gercols"){ + // Envio do json gerado na coleta + // bool ok; + // QJsonObject jsonColeta = ccacic->getJsonFromFile("coleta.json"); + // OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta , false); //} + // } + // } }else{ - qDebug() << "getConfig() failed. - " + QDateTime::currentDateTime().toLocalTime().toString(); QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na obtenção do arquivo de configuração."); } }else{ - qDebug() << "getTest() failed. - " + QDateTime::currentDateTime().toLocalTime().toString(); QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na execução do getTest()."); } - cMutex->unlock(); - QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Semáforo aberto.")); +} + +void CacicTimer::verificarEIniciarQMutex(){ + if(!cacicthread->isRunning()){ + cMutex->lock(); + QLogger::QLog_Info("Cacic Daemon (Timer)", "Semáforo fechado com sucesso."); + }else{ + QLogger::QLog_Info("Cacic Daemon (Timer)", "Possivelmente o gercols travou e será finalizado."); + try{ + cacicthread->terminate(); + QLogger::QLog_Info("Cacic Daemon (Timer)", "Gercols finalizado com sucesso."); + }catch (...){ + QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha ao finalizar gercols."); + return; + } + cMutex->lock(); + QLogger::QLog_Info("Cacic Daemon (Timer)", "Semáforo fechado com sucesso."); + } } QString CacicTimer::getApplicationDirPath() { @@ -167,11 +183,6 @@ void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig ) } } -void CacicTimer::registraInicioColeta() -{ - QLogger::QLog_Info("Cacic Daemon (Timer)","Coleta iniciada em: " + QDateTime::currentDateTime().toLocalTime().toString()); -} - QString CacicTimer::getDirProgram() const { return dirProgram; @@ -183,34 +194,12 @@ void CacicTimer::setDirProgram(const QString &value) } -void CacicTimer::iniciarModulo(QString modulo) -{ - registraInicioColeta(); - QDir::setCurrent(this->applicationDirPath); - QProcess proc; - proc.setWorkingDirectory(this->applicationDirPath); - proc.execute(modulo); - if((proc.atEnd()) && (proc.exitStatus() == QProcess::NormalExit)){ - registraFimColeta("SUCESSO"); - }else{ - if((!proc.atEnd()) || (proc.exitStatus() == QProcess::CrashExit)){ - registraFimColeta("ERRO"); - proc.kill(); - } - } -} - void CacicTimer::setApplicationDirPath(const QString &value) { this->applicationDirPath = value; } -void CacicTimer::registraFimColeta(QString msg) -{ - QLogger::QLog_Info("Cacic Daemon (Timer)","Coleta finalizada com " + msg + " em: " + QDateTime::currentDateTime().toLocalTime().toString()); -} - bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){ QString getconfigMD5 = QString(QCryptographicHash::hash( (document01.toByteArray()),QCryptographicHash::Md5).toHex()); @@ -230,6 +219,7 @@ void CacicTimer::iniciarInstancias(){ ccacic = new CCacic(); timer = new QTimer(this); cMutex = new QMutex(QMutex::Recursive); + cacicthread = new CacicThread(this->applicationDirPath); OCacicComm = new CacicComm(); OCacicComm->setUrlSsl("https://teste.cacic.cc"); OCacicComm->setUrlGerente("teste.cacic.cc"); diff --git a/cacic-daemon/cacicD/cacictimer.h b/cacic-daemon/cacicD/cacictimer.h index 544e9dc..657bf4a 100644 --- a/cacic-daemon/cacicD/cacictimer.h +++ b/cacic-daemon/cacicD/cacictimer.h @@ -12,6 +12,7 @@ #include "cacic_comm.h" #include "cacic_computer.h" #include "QLogger.h" +#include "cacicthread.h" class CacicTimer : public QObject { @@ -34,15 +35,14 @@ public: void setPeriodicidadeExecucao(int value); private: - void registraFimColeta(QString msg); - void registraInicioColeta(); + void verificarEIniciarQMutex(); QStringList verificarModulos(); void reiniciarTimer(); QLogger::QLoggerManager *logManager; + CacicThread *cacicthread; QString dirProgram; QString applicationDirPath; QString getDirProgram() const; - void iniciarModulo(QString modulo); void iniciarInstancias(); void verificarPeriodicidadeJson(); void lerArquivoConfig( const QJsonObject &jsonConfig); diff --git a/cacic-daemon/cacicD/main.cpp b/cacic-daemon/cacicD/main.cpp index e0fc49c..e1225e4 100644 --- a/cacic-daemon/cacicD/main.cpp +++ b/cacic-daemon/cacicD/main.cpp @@ -1,6 +1,5 @@ #include #include "cacicd.h" -#include "cacictimer.h" int main(int argc, char **argv) { -- libgit2 0.21.2