Commit 4b30d249789538c4d18911482d4873c911acd235
Exists in
master
Merge branch 'master' of http://github.com/lightbase/cacic-agente
Showing
7 changed files
with
164 additions
and
74 deletions
Show diff stats
cacic-daemon/cacicD/cacicD.pro
@@ -19,26 +19,29 @@ win32 { | @@ -19,26 +19,29 @@ win32 { | ||
19 | LIBS += -L/usr/lib -lcryptopp | 19 | LIBS += -L/usr/lib -lcryptopp |
20 | } | 20 | } |
21 | TEMPLATE = app | 21 | TEMPLATE = app |
22 | -#TEMPLATE = lib | ||
23 | 22 | ||
24 | SOURCES += main.cpp \ | 23 | SOURCES += main.cpp \ |
25 | cacicd.cpp \ | 24 | cacicd.cpp \ |
26 | cacictimer.cpp \ | 25 | cacictimer.cpp \ |
26 | + cacicthread.cpp \ | ||
27 | ../../src/cacic_comm.cpp \ | 27 | ../../src/cacic_comm.cpp \ |
28 | ../../src/ccacic.cpp \ | 28 | ../../src/ccacic.cpp \ |
29 | ../../src/wmi.cpp \ | 29 | ../../src/wmi.cpp \ |
30 | ../../src/cacic_computer.cpp \ | 30 | ../../src/cacic_computer.cpp \ |
31 | ../../src/operatingsystem.cpp \ | 31 | ../../src/operatingsystem.cpp \ |
32 | - ../../src/QLogger.cpp | 32 | + ../../src/QLogger.cpp \ |
33 | + | ||
33 | 34 | ||
34 | HEADERS += cacicd.h \ | 35 | HEADERS += cacicd.h \ |
35 | cacictimer.h \ | 36 | cacictimer.h \ |
37 | + cacicthread.h \ | ||
36 | ../../src/ccacic.h \ | 38 | ../../src/ccacic.h \ |
37 | ../../src/wmi.h \ | 39 | ../../src/wmi.h \ |
38 | ../../src/cacic_computer.h \ | 40 | ../../src/cacic_computer.h \ |
39 | ../../src/operatingsystem.h \ | 41 | ../../src/operatingsystem.h \ |
40 | ../../src/cacic_comm.h \ | 42 | ../../src/cacic_comm.h \ |
41 | - ../../src/QLogger.h | 43 | + ../../src/QLogger.h \ |
44 | + | ||
42 | 45 | ||
43 | include(../../src/qtservice/src/qtservice.pri) | 46 | include(../../src/qtservice/src/qtservice.pri) |
44 | 47 |
@@ -0,0 +1,56 @@ | @@ -0,0 +1,56 @@ | ||
1 | +#include "cacicthread.h" | ||
2 | + | ||
3 | +CacicThread::CacicThread(QString applicationDirPath) | ||
4 | +{ | ||
5 | + this->applicationDirPath = applicationDirPath; | ||
6 | + iniciarInstancias(); | ||
7 | +} | ||
8 | + | ||
9 | +void CacicThread::run(){ | ||
10 | + iniciarModulo(); | ||
11 | +} | ||
12 | + | ||
13 | +void CacicThread::setModuloDirPath(const QString &value) | ||
14 | +{ | ||
15 | + moduloDirPath = value; | ||
16 | +} | ||
17 | + | ||
18 | +void CacicThread::iniciarModulo() | ||
19 | +{ | ||
20 | + registraInicioColeta(); | ||
21 | + QDir::setCurrent(this->applicationDirPath); | ||
22 | + QProcess proc; | ||
23 | + proc.setWorkingDirectory(this->applicationDirPath); | ||
24 | + proc.execute(this->moduloDirPath); | ||
25 | + if((proc.atEnd()) && (proc.exitStatus() == QProcess::NormalExit)){ | ||
26 | + registraFimColeta("SUCESSO"); | ||
27 | + }else{ | ||
28 | + if((!proc.atEnd()) || (proc.exitStatus() == QProcess::CrashExit)){ | ||
29 | + registraFimColeta("ERRO"); | ||
30 | + proc.kill(); | ||
31 | + } | ||
32 | + } | ||
33 | + cMutex->unlock(); | ||
34 | + QLogger::QLog_Info("Cacic Daemon (Thread)", QString("Semáforo aberto com sucesso.")); | ||
35 | +} | ||
36 | + | ||
37 | +void CacicThread::setCMutex(QMutex *value) | ||
38 | +{ | ||
39 | + cMutex = value; | ||
40 | +} | ||
41 | + | ||
42 | +void CacicThread::registraInicioColeta() | ||
43 | +{ | ||
44 | + QLogger::QLog_Info("Cacic Daemon (Thread)","Coleta iniciada em: " + QDateTime::currentDateTime().toLocalTime().toString()); | ||
45 | +} | ||
46 | + | ||
47 | +void CacicThread::registraFimColeta(QString msg) | ||
48 | +{ | ||
49 | + QLogger::QLog_Info("Cacic Daemon (Thread)","Coleta finalizada com " + msg + " em: " + QDateTime::currentDateTime().toLocalTime().toString()); | ||
50 | +} | ||
51 | + | ||
52 | +void CacicThread::iniciarInstancias(){ | ||
53 | + logManager = QLogger::QLoggerManager::getInstance(); | ||
54 | + logManager->addDestination(this->applicationDirPath + "/cacicLog.txt","Cacic Daemon (Thread)",QLogger::InfoLevel); | ||
55 | + logManager->addDestination(this->applicationDirPath + "/cacicLog.txt","Cacic Daemon (Thread)",QLogger::ErrorLevel); | ||
56 | +} |
@@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
1 | +#ifndef CACICTHREAD_H | ||
2 | +#define CACICTHREAD_H | ||
3 | +#include <QtCore> | ||
4 | +#include <QMutex> | ||
5 | +#include "QLogger.h" | ||
6 | + | ||
7 | +class CacicThread : public QThread | ||
8 | +{ | ||
9 | +public: | ||
10 | + CacicThread(QString applicationDirPath); | ||
11 | + void run(); | ||
12 | + void setModuloDirPath(const QString &value); | ||
13 | + void setCMutex(QMutex *value); | ||
14 | + | ||
15 | +private: | ||
16 | + QString moduloDirPath; | ||
17 | + QString applicationDirPath; | ||
18 | + QLogger::QLoggerManager *logManager; | ||
19 | + void iniciarInstancias(); | ||
20 | + void registraInicioColeta(); | ||
21 | + void registraFimColeta(QString msg); | ||
22 | + void iniciarModulo(); | ||
23 | + QMutex *cMutex; | ||
24 | +}; | ||
25 | + | ||
26 | +#endif // CACICTHREAD_H |
cacic-daemon/cacicD/cacictimer.cpp
@@ -38,36 +38,52 @@ void CacicTimer::mslot(){ | @@ -38,36 +38,52 @@ void CacicTimer::mslot(){ | ||
38 | }catch (...){ | 38 | }catch (...){ |
39 | QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Não foi possivel verificar a periodicidade no getConfig.json")); | 39 | QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Não foi possivel verificar a periodicidade no getConfig.json")); |
40 | } | 40 | } |
41 | - cMutex->lock(); | ||
42 | - QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Semáforo fechado.")); | 41 | + |
42 | + verificarEIniciarQMutex(); | ||
43 | + | ||
43 | if(getTest()){ | 44 | if(getTest()){ |
44 | QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getTeste() success.")); | 45 | QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getTeste() success.")); |
45 | if(getConfig()){ | 46 | if(getConfig()){ |
46 | QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getConfig() success.")); | 47 | QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getConfig() success.")); |
47 | //QStringList nomesModulos = verificarModulos(); | 48 | //QStringList nomesModulos = verificarModulos(); |
48 | //if ( !nomesModulos.empty() ) { | 49 | //if ( !nomesModulos.empty() ) { |
49 | - // foreach( QString nome, nomesModulos ) { | 50 | + // foreach( QString nome, nomesModulos ) { |
50 | definirDirModulo(getApplicationDirPath(), "gercols"); | 51 | definirDirModulo(getApplicationDirPath(), "gercols"); |
51 | - iniciarModulo(getDirProgram()); | ||
52 | - | ||
53 | - // if(nome == "gercols"){ | ||
54 | - // // Envio do json gerado na coleta | ||
55 | - // bool ok; | ||
56 | - // QJsonObject jsonColeta = ccacic->getJsonFromFile("coleta.json"); | ||
57 | - // OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta ); | ||
58 | - // } | ||
59 | - // } | 52 | + cacicthread->setCMutex(cMutex); |
53 | + cacicthread->setModuloDirPath(getDirProgram()); | ||
54 | + cacicthread->start(QThread::NormalPriority); | ||
55 | + //if(nome == "gercols"){ | ||
56 | + // Envio do json gerado na coleta | ||
57 | + // bool ok; | ||
58 | + // QJsonObject jsonColeta = ccacic->getJsonFromFile("coleta.json"); | ||
59 | + // OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta , false); | ||
60 | //} | 60 | //} |
61 | + // } | ||
62 | + // } | ||
61 | }else{ | 63 | }else{ |
62 | - qDebug() << "getConfig() failed. - " + QDateTime::currentDateTime().toLocalTime().toString(); | ||
63 | QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na obtenção do arquivo de configuração."); | 64 | QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na obtenção do arquivo de configuração."); |
64 | } | 65 | } |
65 | }else{ | 66 | }else{ |
66 | - qDebug() << "getTest() failed. - " + QDateTime::currentDateTime().toLocalTime().toString(); | ||
67 | QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na execução do getTest()."); | 67 | QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na execução do getTest()."); |
68 | } | 68 | } |
69 | - cMutex->unlock(); | ||
70 | - QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Semáforo aberto.")); | 69 | +} |
70 | + | ||
71 | +void CacicTimer::verificarEIniciarQMutex(){ | ||
72 | + if(!cacicthread->isRunning()){ | ||
73 | + cMutex->lock(); | ||
74 | + QLogger::QLog_Info("Cacic Daemon (Timer)", "Semáforo fechado com sucesso."); | ||
75 | + }else{ | ||
76 | + QLogger::QLog_Info("Cacic Daemon (Timer)", "Possivelmente o gercols travou e será finalizado."); | ||
77 | + try{ | ||
78 | + cacicthread->terminate(); | ||
79 | + QLogger::QLog_Info("Cacic Daemon (Timer)", "Gercols finalizado com sucesso."); | ||
80 | + }catch (...){ | ||
81 | + QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha ao finalizar gercols."); | ||
82 | + return; | ||
83 | + } | ||
84 | + cMutex->lock(); | ||
85 | + QLogger::QLog_Info("Cacic Daemon (Timer)", "Semáforo fechado com sucesso."); | ||
86 | + } | ||
71 | } | 87 | } |
72 | 88 | ||
73 | QString CacicTimer::getApplicationDirPath() { | 89 | QString CacicTimer::getApplicationDirPath() { |
@@ -167,11 +183,6 @@ void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig ) | @@ -167,11 +183,6 @@ void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig ) | ||
167 | } | 183 | } |
168 | } | 184 | } |
169 | 185 | ||
170 | -void CacicTimer::registraInicioColeta() | ||
171 | -{ | ||
172 | - QLogger::QLog_Info("Cacic Daemon (Timer)","Coleta iniciada em: " + QDateTime::currentDateTime().toLocalTime().toString()); | ||
173 | -} | ||
174 | - | ||
175 | QString CacicTimer::getDirProgram() const | 186 | QString CacicTimer::getDirProgram() const |
176 | { | 187 | { |
177 | return dirProgram; | 188 | return dirProgram; |
@@ -183,44 +194,18 @@ void CacicTimer::setDirProgram(const QString &value) | @@ -183,44 +194,18 @@ void CacicTimer::setDirProgram(const QString &value) | ||
183 | } | 194 | } |
184 | 195 | ||
185 | 196 | ||
186 | -void CacicTimer::iniciarModulo(QString modulo) | ||
187 | -{ | ||
188 | - registraInicioColeta(); | ||
189 | - QDir::setCurrent(this->applicationDirPath); | ||
190 | - QProcess proc; | ||
191 | - proc.setWorkingDirectory(this->applicationDirPath); | ||
192 | - proc.execute(modulo); | ||
193 | - if((proc.atEnd()) && (proc.exitStatus() == QProcess::NormalExit)){ | ||
194 | - registraFimColeta("SUCESSO"); | ||
195 | - }else{ | ||
196 | - if((!proc.atEnd()) || (proc.exitStatus() == QProcess::CrashExit)){ | ||
197 | - registraFimColeta("ERRO"); | ||
198 | - proc.kill(); | ||
199 | - } | ||
200 | - } | ||
201 | -} | ||
202 | - | ||
203 | void CacicTimer::setApplicationDirPath(const QString &value) | 197 | void CacicTimer::setApplicationDirPath(const QString &value) |
204 | { | 198 | { |
205 | this->applicationDirPath = value; | 199 | this->applicationDirPath = value; |
206 | } | 200 | } |
207 | 201 | ||
208 | 202 | ||
209 | -void CacicTimer::registraFimColeta(QString msg) | ||
210 | -{ | ||
211 | - QLogger::QLog_Info("Cacic Daemon (Timer)","Coleta finalizada com " + msg + " em: " + QDateTime::currentDateTime().toLocalTime().toString()); | ||
212 | -} | ||
213 | - | ||
214 | bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){ | 203 | bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){ |
215 | QString getconfigMD5 = QString(QCryptographicHash::hash( | 204 | QString getconfigMD5 = QString(QCryptographicHash::hash( |
216 | (document01.toByteArray()),QCryptographicHash::Md5).toHex()); | 205 | (document01.toByteArray()),QCryptographicHash::Md5).toHex()); |
217 | QString getconfigMD52 = QString(QCryptographicHash::hash( | 206 | QString getconfigMD52 = QString(QCryptographicHash::hash( |
218 | (document02.toByteArray()),QCryptographicHash::Md5).toHex()); | 207 | (document02.toByteArray()),QCryptographicHash::Md5).toHex()); |
219 | - if(getconfigMD5 == getconfigMD52){ | ||
220 | - return true; | ||
221 | - }else{ | ||
222 | - return false; | ||
223 | - } | 208 | + return getconfigMD5 == getconfigMD52; |
224 | } | 209 | } |
225 | 210 | ||
226 | void CacicTimer::iniciarInstancias(){ | 211 | void CacicTimer::iniciarInstancias(){ |
@@ -230,6 +215,7 @@ void CacicTimer::iniciarInstancias(){ | @@ -230,6 +215,7 @@ void CacicTimer::iniciarInstancias(){ | ||
230 | ccacic = new CCacic(); | 215 | ccacic = new CCacic(); |
231 | timer = new QTimer(this); | 216 | timer = new QTimer(this); |
232 | cMutex = new QMutex(QMutex::Recursive); | 217 | cMutex = new QMutex(QMutex::Recursive); |
218 | + cacicthread = new CacicThread(this->applicationDirPath); | ||
233 | OCacicComm = new CacicComm(); | 219 | OCacicComm = new CacicComm(); |
234 | OCacicComm->setUrlSsl("https://teste.cacic.cc"); | 220 | OCacicComm->setUrlSsl("https://teste.cacic.cc"); |
235 | OCacicComm->setUrlGerente("teste.cacic.cc"); | 221 | OCacicComm->setUrlGerente("teste.cacic.cc"); |
cacic-daemon/cacicD/cacictimer.h
@@ -12,6 +12,7 @@ | @@ -12,6 +12,7 @@ | ||
12 | #include "cacic_comm.h" | 12 | #include "cacic_comm.h" |
13 | #include "cacic_computer.h" | 13 | #include "cacic_computer.h" |
14 | #include "QLogger.h" | 14 | #include "QLogger.h" |
15 | +#include "cacicthread.h" | ||
15 | 16 | ||
16 | class CacicTimer : public QObject | 17 | class CacicTimer : public QObject |
17 | { | 18 | { |
@@ -34,15 +35,14 @@ public: | @@ -34,15 +35,14 @@ public: | ||
34 | void setPeriodicidadeExecucao(int value); | 35 | void setPeriodicidadeExecucao(int value); |
35 | 36 | ||
36 | private: | 37 | private: |
37 | - void registraFimColeta(QString msg); | ||
38 | - void registraInicioColeta(); | 38 | + void verificarEIniciarQMutex(); |
39 | QStringList verificarModulos(); | 39 | QStringList verificarModulos(); |
40 | void reiniciarTimer(); | 40 | void reiniciarTimer(); |
41 | QLogger::QLoggerManager *logManager; | 41 | QLogger::QLoggerManager *logManager; |
42 | + CacicThread *cacicthread; | ||
42 | QString dirProgram; | 43 | QString dirProgram; |
43 | QString applicationDirPath; | 44 | QString applicationDirPath; |
44 | QString getDirProgram() const; | 45 | QString getDirProgram() const; |
45 | - void iniciarModulo(QString modulo); | ||
46 | void iniciarInstancias(); | 46 | void iniciarInstancias(); |
47 | void verificarPeriodicidadeJson(); | 47 | void verificarPeriodicidadeJson(); |
48 | void lerArquivoConfig( const QJsonObject &jsonConfig); | 48 | void lerArquivoConfig( const QJsonObject &jsonConfig); |
cacic-daemon/cacicD/main.cpp
install-cacic/installcacic.cpp
@@ -4,7 +4,7 @@ InstallCacic::InstallCacic(QObject *parent) : | @@ -4,7 +4,7 @@ InstallCacic::InstallCacic(QObject *parent) : | ||
4 | QObject(parent) | 4 | QObject(parent) |
5 | { | 5 | { |
6 | logManager = QLogger::QLoggerManager::getInstance(); | 6 | logManager = QLogger::QLoggerManager::getInstance(); |
7 | - logManager->addDestination("./log.txt","Install",QLogger::DebugLevel); | 7 | + logManager->addDestination("./install.log","Install",QLogger::DebugLevel); |
8 | } | 8 | } |
9 | 9 | ||
10 | InstallCacic::~InstallCacic() | 10 | InstallCacic::~InstallCacic() |
@@ -28,31 +28,51 @@ void InstallCacic::run(QStringList argv, int argc) { | @@ -28,31 +28,51 @@ void InstallCacic::run(QStringList argv, int argc) { | ||
28 | oCacicComm->setPassword(this->argumentos["password"]); | 28 | oCacicComm->setPassword(this->argumentos["password"]); |
29 | QJsonObject jsonLogin = oCacicComm->login(&ok); | 29 | QJsonObject jsonLogin = oCacicComm->login(&ok); |
30 | if (ok){ | 30 | if (ok){ |
31 | + QJsonObject jsonComm; | ||
32 | + QLogger::QLog_Debug("Install", "Login: " + jsonLogin["reply"].toObject()["chavecript"].toString()); | ||
31 | //conectado, grava a chave na classe; | 33 | //conectado, grava a chave na classe; |
32 | oCacic.setChaveCrypt(jsonLogin["reply"].toObject()["chavecrip"].toString()); | 34 | oCacic.setChaveCrypt(jsonLogin["reply"].toObject()["chavecrip"].toString()); |
35 | + jsonComm["computador"] = oCacicComputer.toJsonObject(); | ||
36 | + QJsonObject configs = oCacicComm->comm("/ws/neo/config", &ok, jsonComm); | ||
37 | + qDebug () << configs; | ||
38 | + if (ok){ | ||
39 | + oCacicComm->setUrlGerente(configs["reply"].toObject()["applicationUrl"].toString()); | ||
33 | #ifdef Q_OS_WIN | 40 | #ifdef Q_OS_WIN |
34 | - oCacic.setCacicMainFolder("c:/cacic/"); | 41 | + oCacic.setCacicMainFolder(configs["reply"].toObject()["cacic_main_folder"].isString() ? |
42 | + configs["reply"].toObject()["cacic_main_folder"].toString() : | ||
43 | + "c:/cacic/"); | ||
35 | #elif defined(Q_OS_LINUX) | 44 | #elif defined(Q_OS_LINUX) |
36 | - oCacic.setCacicMainFolder("/home/cacic"); | 45 | + oCacic.setCacicMainFolder(configs["reply"].toObject()["cacic_main_folder"].isString() ? |
46 | + configs["reply"].toObject()["cacic_main_folder"].toString() : | ||
47 | + "/usr/cacic"); | ||
37 | #endif | 48 | #endif |
38 | - oCacic.createFolder(oCacic.getCacicMainFolder()); | ||
39 | - //grava chave em registro; | ||
40 | 49 | ||
41 | - QVariantMap registro; | ||
42 | - registro["key"] = oCacic.getChaveCrypt(); | ||
43 | - registro["mainFolder"] = oCacic.getCacicMainFolder(); | ||
44 | - oCacic.setValueToRegistry("Lightbase", "Cacic", registro); | ||
45 | - //starta o processo do cacic. | 50 | + oCacic.createFolder(oCacic.getCacicMainFolder()); |
51 | + //grava chave em registro; | ||
52 | + QVariantMap registro; | ||
53 | + registro["key"] = oCacic.getChaveCrypt(); | ||
54 | + registro["mainFolder"] = oCacic.getCacicMainFolder(); | ||
55 | + oCacic.setValueToRegistry("Lightbase", "Cacic", registro); | ||
56 | + //starta o processo do cacic. | ||
57 | + | ||
58 | + //TO DO: Fazer download do serviço | ||
59 | + #ifdef Q_OS_WIN | ||
60 | + oCacicComm->ftpDownload("agentes/cacic.exe"); | ||
61 | + QString exitStatus = oCacic.startProcess(oCacic.getCacicMainFolder() + "cacic.exe", false, &ok, QStringList("-install")); | ||
62 | + #else | ||
63 | + oCacicComm->ftpDownload("agentes/cacic"); | ||
64 | + QString exitStatus = oCacic.startProcess(oCacic.getCacicMainFolder() + "cacic", false, &ok, QStringList("-install")); | ||
65 | + #endif | ||
66 | + if (!ok) | ||
67 | + std::cout << "Erro ao iniciar o processo: " | ||
68 | + << exitStatus.toStdString() << "\n"; | ||
69 | + else { | ||
70 | + std::cout << "Instalação realizada com sucesso."; | ||
71 | + } | ||
72 | + } else { | ||
73 | + std::cout << "Falha ao pegar configurações: " << configs["error"].toString(); | ||
74 | + } | ||
46 | 75 | ||
47 | - //TO DO: Fazer download do serviço | ||
48 | -#ifdef Q_OS_WIN | ||
49 | - QString exitStatus = oCacic.startProcess(oCacic.getCacicMainFolder() + "cacic.exe", false, &ok); | ||
50 | -#else | ||
51 | - QString exitStatus = oCacic.startProcess(oCacic.getCacicMainFolder() + "cacic", false, &ok); | ||
52 | -#endif | ||
53 | - if (!ok) | ||
54 | - std::cout << "Erro ao iniciar o processo: " | ||
55 | - << exitStatus.toStdString() << "\n"; | ||
56 | } else | 76 | } else |
57 | std::cout << "Nao foi possivel realizar o login.\n " | 77 | std::cout << "Nao foi possivel realizar o login.\n " |
58 | << jsonLogin["error"].toString().toStdString(); | 78 | << jsonLogin["error"].toString().toStdString(); |