Commit ebd01e4b5cbb0c20d7bdfd1ab0faf5db6b16f9b3
1 parent
df1422ff
Exists in
master
Modificação do esquema de verificação dos módulos. (Não funcional ainda)
Showing
8 changed files
with
214 additions
and
182 deletions
Show diff stats
cacic-daemon/cacicD/cacicd.cpp
| ... | ... | @@ -40,7 +40,7 @@ void cacicD::start() { |
| 40 | 40 | //o valor nu_intervalo_exec vem em minutos. O valor que o timer aceita é em milisegundos,por isso 60000 |
| 41 | 41 | Ocacictimer->setPeriodicidadeExecucao(configuracoes["nu_intervalo_exec"].toString().toInt() * 60000); |
| 42 | 42 | Ocacictimer->iniciarTimer(); |
| 43 | - }else{ | |
| 43 | + } else { | |
| 44 | 44 | //Iniciar com um timer default (4 horas), pra não ficar freezado pra sempre. |
| 45 | 45 | QLogger::QLog_Error("Cacic Daemon", QString("Problemas com o arquivo getConfig.json")); |
| 46 | 46 | QLogger::QLog_Info("Cacic Daemon", QString("Inicializando periodicidade de execução do serviço com tempo padrão.")); | ... | ... |
cacic-daemon/cacicD/cacictimer.cpp
| ... | ... | @@ -48,42 +48,44 @@ void CacicTimer::mslot(){ |
| 48 | 48 | QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Não foi possivel verificar a periodicidade no getConfig.json")); |
| 49 | 49 | } |
| 50 | 50 | |
| 51 | - verificarEIniciarQMutex(); | |
| 52 | - | |
| 53 | - if(getTest()){ | |
| 54 | - QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getTeste() success.")); | |
| 55 | - if(getConfig()){ | |
| 56 | - QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getConfig() success.")); | |
| 57 | - // QStringList nomesModulos = verificarModulos(); | |
| 58 | - // if ( !nomesModulos.empty() ) { | |
| 59 | - // foreach( QString nome, nomesModulos ) { | |
| 60 | - QString nome = "gercols"; | |
| 61 | - definirDirModulo(getApplicationDirPath(), nome); | |
| 62 | - cacicthread->setCcacic(ccacic); | |
| 63 | - cacicthread->setOCacicComm(OCacicComm); | |
| 64 | - cacicthread->setNomeModulo(nome); | |
| 65 | - cacicthread->setCMutex(cMutex); | |
| 66 | - cacicthread->setModuloDirPath(getDirProgram()); | |
| 67 | - cacicthread->start(QThread::NormalPriority); | |
| 68 | -// if(nome == "gercols" ){ | |
| 69 | -// //Envio do json gerado na coleta | |
| 70 | -// bool ok = false; | |
| 71 | -// QJsonObject jsonColeta = ccacic->getJsonFromFile(this->applicationDirPath + "/coleta.json"); | |
| 72 | -// OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta , false); | |
| 73 | -// if(&ok){ | |
| 74 | -// QLogger::QLog_Info("Cacic Daemon (Timer)", QString("coleta enviada com sucesso.")); | |
| 75 | -// } | |
| 76 | -// } | |
| 51 | + //Caso verifique que a thread ainda está em execução e não consiga finalizá-la. | |
| 52 | + //Acredito que seja difícil acontecer, mas vai que... | |
| 53 | + if (verificarEIniciarQMutex()) { | |
| 54 | + if(getTest()){ | |
| 55 | + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getTeste() success.")); | |
| 56 | + if(getConfig()){ | |
| 57 | + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getConfig() success.")); | |
| 58 | + // QStringList nomesModulos = verificarModulos(); | |
| 59 | + // if ( !nomesModulos.empty() ) { | |
| 60 | + // foreach( QString nome, nomesModulos ) { | |
| 61 | + QString nome = "gercols"; | |
| 62 | + definirDirModulo(getApplicationDirPath(), nome); | |
| 63 | + cacicthread->setCcacic(ccacic); | |
| 64 | + cacicthread->setOCacicComm(OCacicComm); | |
| 65 | + cacicthread->setNomeModulo(nome); | |
| 66 | + cacicthread->setCMutex(cMutex); | |
| 67 | + cacicthread->setModuloDirPath(getDirProgram()); | |
| 68 | + cacicthread->start(QThread::NormalPriority); | |
| 69 | + // if(nome == "gercols" ){ | |
| 70 | + // //Envio do json gerado na coleta | |
| 71 | + // bool ok = false; | |
| 72 | + // QJsonObject jsonColeta = ccacic->getJsonFromFile(this->applicationDirPath + "/coleta.json"); | |
| 73 | + // OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta , false); | |
| 74 | + // if(&ok){ | |
| 75 | + // QLogger::QLog_Info("Cacic Daemon (Timer)", QString("coleta enviada com sucesso.")); | |
| 76 | + // } | |
| 77 | + // } | |
| 78 | + }else{ | |
| 79 | + QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na obtenção do arquivo de configuração."); | |
| 80 | + } | |
| 77 | 81 | }else{ |
| 78 | - QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na obtenção do arquivo de configuração."); | |
| 82 | + QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na execução do getTest()."); | |
| 79 | 83 | } |
| 80 | - }else{ | |
| 81 | - QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na execução do getTest()."); | |
| 82 | 84 | } |
| 83 | 85 | } |
| 84 | 86 | |
| 85 | 87 | |
| 86 | -void CacicTimer::verificarEIniciarQMutex(){ | |
| 88 | +bool CacicTimer::verificarEIniciarQMutex(){ | |
| 87 | 89 | if(!cacicthread->isRunning()){ |
| 88 | 90 | cMutex->lock(); |
| 89 | 91 | QLogger::QLog_Info("Cacic Daemon (Timer)", "Semáforo fechado com sucesso."); |
| ... | ... | @@ -94,10 +96,11 @@ void CacicTimer::verificarEIniciarQMutex(){ |
| 94 | 96 | QLogger::QLog_Info("Cacic Daemon (Timer)", "Gercols finalizado com sucesso."); |
| 95 | 97 | }catch (...){ |
| 96 | 98 | QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha ao finalizar gercols."); |
| 97 | - return; | |
| 99 | + return false; | |
| 98 | 100 | } |
| 99 | 101 | cMutex->lock(); |
| 100 | 102 | QLogger::QLog_Info("Cacic Daemon (Timer)", "Semáforo fechado com sucesso."); |
| 103 | + return true; | |
| 101 | 104 | } |
| 102 | 105 | } |
| 103 | 106 | |
| ... | ... | @@ -120,7 +123,7 @@ bool CacicTimer::getTest(){ |
| 120 | 123 | try{ |
| 121 | 124 | ccacic->setJsonToFile(jsonresult.contains("reply") ? jsonresult["reply"].toObject() : jsonresult, |
| 122 | 125 | this->applicationDirPath + "/getTest.json"); |
| 123 | - return true; //acho que seria melhor retornar a variável 'ok'. Se der erro na conexão eu acho que não cai no catch. | |
| 126 | + return ok; | |
| 124 | 127 | } catch (...) { |
| 125 | 128 | qDebug() << "Erro ao salvar o arquivo de configurações."; |
| 126 | 129 | return false; |
| ... | ... | @@ -146,7 +149,7 @@ bool CacicTimer::getConfig(){ |
| 146 | 149 | try{ |
| 147 | 150 | ccacic->setJsonToFile(jsonresult.contains("reply") ? jsonresult["reply"].toObject() : jsonresult, |
| 148 | 151 | this->applicationDirPath + "/getConfigNew.json"); |
| 149 | - return true; //mesma observação do getTest | |
| 152 | + return ok; | |
| 150 | 153 | } catch (...) { |
| 151 | 154 | qDebug() << "Erro ao salvar o arquivo de configurações."; |
| 152 | 155 | return false; |
| ... | ... | @@ -157,47 +160,6 @@ bool CacicTimer::getConfig(){ |
| 157 | 160 | } |
| 158 | 161 | } |
| 159 | 162 | |
| 160 | -void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig ) | |
| 161 | -{ | |
| 162 | - /* lê json de configurações e armazena quais módulos executáveis. | |
| 163 | - * E faz o mesmo tipo de comparação de hashs, com o fim de: | |
| 164 | - * ou mantem o binário do módulo ou baixa um novo. | |
| 165 | - */ | |
| 166 | - foreach( QJsonValue individualModule, jsonConfig["modulos"].toArray() ) { | |
| 167 | - QString moduloKey, moduloValue; | |
| 168 | - | |
| 169 | - moduloKey = individualModule.toObject()["hash"].toString(); | |
| 170 | - moduloValue = individualModule.toObject()["nome"].toString(); | |
| 171 | - | |
| 172 | - moduleMap.insert(moduloKey, moduloValue); | |
| 173 | - } | |
| 174 | - | |
| 175 | - if ( jsonConfig["metodoDownload"].isArray() ) { | |
| 176 | - | |
| 177 | - foreach (QJsonValue individualMetodo, jsonConfig["metodoDownload"].toArray() ) { | |
| 178 | - QMap<QString, QString> newEntry; | |
| 179 | - | |
| 180 | - newEntry.insert(QString("tipo"), individualMetodo.toObject()["tipo"].toString() ); | |
| 181 | - newEntry.insert(QString("url"), individualMetodo.toObject()["url"].toString() ); | |
| 182 | - newEntry.insert(QString("path"), individualMetodo.toObject()["path"].toString() ); | |
| 183 | - newEntry.insert(QString("usuario"), individualMetodo.toObject()["usario"].toString() ); | |
| 184 | - newEntry.insert(QString("senha"), individualMetodo.toObject()["senha"].toString() ); | |
| 185 | - | |
| 186 | - metodosDownload.append( newEntry ); | |
| 187 | - } | |
| 188 | - } else { | |
| 189 | - QMap<QString, QString> newEntry; | |
| 190 | - | |
| 191 | - newEntry.insert(QString("tipo"), jsonConfig["metodoDownload"].toObject()["tipo"].toString() ); | |
| 192 | - newEntry.insert(QString("url"), jsonConfig["metodoDownload"].toObject()["url"].toString() ); | |
| 193 | - newEntry.insert(QString("path"), jsonConfig["metodoDownload"].toObject()["path"].toString() ); | |
| 194 | - newEntry.insert(QString("usuario"), jsonConfig["metodoDownload"].toObject()["usario"].toString() ); | |
| 195 | - newEntry.insert(QString("senha"), jsonConfig["metodoDownload"].toObject()["senha"].toString() ); | |
| 196 | - | |
| 197 | - metodosDownload.append( newEntry ); | |
| 198 | - } | |
| 199 | -} | |
| 200 | - | |
| 201 | 163 | QString CacicTimer::getDirProgram() const |
| 202 | 164 | { |
| 203 | 165 | return dirProgram; |
| ... | ... | @@ -271,94 +233,3 @@ void CacicTimer::setPeriodicidadeExecucao(int value) |
| 271 | 233 | { |
| 272 | 234 | periodicidadeExecucao = value; |
| 273 | 235 | } |
| 274 | - | |
| 275 | - | |
| 276 | -QStringList CacicTimer::verificarModulos(){ | |
| 277 | - // Compara o novo arquivo de configuração com um antigo e se forem diferentes | |
| 278 | - // mantem o mais recente; caso iguais simplesmente apaga o novo. | |
| 279 | - QFile *fileOld; | |
| 280 | - QFile *fileNew; | |
| 281 | - | |
| 282 | - fileOld = new QFile(this->applicationDirPath + "/getConfig.json"); | |
| 283 | - fileNew = new QFile(this->applicationDirPath + "/getConfigNew.json"); | |
| 284 | - | |
| 285 | - if( fileOld->exists() && fileNew->exists() ){ | |
| 286 | - if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) { | |
| 287 | - fileNew->remove(); | |
| 288 | - } else { | |
| 289 | - // Renomeia getConfigNew.json para getConfig.json | |
| 290 | - fileOld->remove(); | |
| 291 | - fileNew->rename("getConfigNew.json","getConfig.json"); | |
| 292 | - } | |
| 293 | - jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json"); | |
| 294 | - } else if( fileOld->exists() ){ | |
| 295 | - jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json"); | |
| 296 | - } else { | |
| 297 | - QLogger::QLog_Error("Cacic Daemon (Timer)", "Arquivo de configuração não criado."); | |
| 298 | - } | |
| 299 | - delete fileOld; | |
| 300 | - delete fileNew; | |
| 301 | - lerArquivoConfig(jsonConfig["agentcomputer"].toObject()); | |
| 302 | - | |
| 303 | - QStringList nomesModulos; | |
| 304 | - | |
| 305 | - int countExecNotFound = 0; | |
| 306 | - QMap<QString, QString>::const_iterator moduloIterator = moduleMap.constBegin(); | |
| 307 | - while (moduloIterator != moduleMap.constEnd()) { | |
| 308 | - QString nomeModulo = moduloIterator.value(); | |
| 309 | - QString hashModulo = moduloIterator.key(); | |
| 310 | - // Calcula hash do binario atual | |
| 311 | -#if defined(Q_OS_WIN) | |
| 312 | - fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo + ".exe"); | |
| 313 | -#else | |
| 314 | - fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo); | |
| 315 | -#endif | |
| 316 | - if(!fileOld->exists()) { | |
| 317 | - QLogger::QLog_Error("Cacic Daemon (Timer)", QString("Módulo ").append(nomeModulo).append(" não encontrado.")); | |
| 318 | - countExecNotFound++; | |
| 319 | - | |
| 320 | - if( countExecNotFound == moduleMap.size() ) { | |
| 321 | - QLogger::QLog_Error("Cacic Daemon (Timer)", "Não foi possível encontrar nenhum módulo executável!"); | |
| 322 | - return QStringList(); | |
| 323 | - } | |
| 324 | - | |
| 325 | - // pula para o próximo módulo no moduloMap | |
| 326 | - moduloIterator++; | |
| 327 | - continue; | |
| 328 | - } | |
| 329 | - | |
| 330 | - QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex()); | |
| 331 | - if ( oldMd5 != hashModulo ) { | |
| 332 | - | |
| 333 | -#if defined(Q_OS_WIN) | |
| 334 | - fileOld->rename(this->applicationDirPath + "/" + nomeModulo + ".exe", | |
| 335 | - this->applicationDirPath + "/" + nomeModulo + "Old.exe"); | |
| 336 | -#elif defined(Q_OS_LINUX) | |
| 337 | - fileOld->rename(this->applicationDirPath + "/" + nomeModulo, | |
| 338 | - this->applicationDirPath + "/" + nomeModulo + "Old"); | |
| 339 | -#endif | |
| 340 | - | |
| 341 | - // Download nova versão do executável | |
| 342 | - QList<QMap<QString,QString> >::const_iterator metodosIterator = metodosDownload.constBegin(); | |
| 343 | - bool downloadSucess = false; | |
| 344 | - while ( !downloadSucess && metodosIterator != metodosDownload.constEnd() ) { | |
| 345 | - if( metodosIterator->value("tipo") == "ftp" || metodosIterator->value("tipo") == "" ) { | |
| 346 | - if ( OCacicComm->ftpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) ) | |
| 347 | - downloadSucess = true; | |
| 348 | - } else if ( metodosIterator->value("tipo") == "http" ) { | |
| 349 | - if( OCacicComm->httpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) ) | |
| 350 | - downloadSucess = true; | |
| 351 | - } | |
| 352 | - metodosIterator++; | |
| 353 | - } | |
| 354 | - fileOld->remove(); | |
| 355 | - delete fileOld; | |
| 356 | - } | |
| 357 | - | |
| 358 | - nomesModulos.append(nomeModulo); | |
| 359 | - | |
| 360 | - moduloIterator++; | |
| 361 | - } | |
| 362 | - | |
| 363 | - return nomesModulos; | |
| 364 | -} | ... | ... |
cacic-daemon/cacicD/cacictimer.h
| ... | ... | @@ -35,7 +35,7 @@ public: |
| 35 | 35 | void setPeriodicidadeExecucao(int value); |
| 36 | 36 | |
| 37 | 37 | private: |
| 38 | - void verificarEIniciarQMutex(); | |
| 38 | + bool verificarEIniciarQMutex(); | |
| 39 | 39 | QStringList verificarModulos(); |
| 40 | 40 | void reiniciarTimer(); |
| 41 | 41 | QLogger::QLoggerManager *logManager; |
| ... | ... | @@ -50,8 +50,6 @@ private: |
| 50 | 50 | QJsonObject jsonConfig; |
| 51 | 51 | int periodicidadeExecucao = 14400; // 4*3600. Tempo default de execução. |
| 52 | 52 | int getPeriodicidadeExecucao() const; |
| 53 | - QList<QMap<QString,QString> > metodosDownload; | |
| 54 | - QMap<QString, QString> moduleMap; // key = hash md5, value = nome do modulo | |
| 55 | 53 | |
| 56 | 54 | private slots: |
| 57 | 55 | void mslot(); | ... | ... |
cacic-teste/cacic-teste.pro
| ... | ... | @@ -31,7 +31,8 @@ SOURCES += \ |
| 31 | 31 | ../src/vregistry.cpp \ |
| 32 | 32 | ../src/ccoleta.cpp \ |
| 33 | 33 | ../src/wmi.cpp \ |
| 34 | - ../src/QLogger.cpp | |
| 34 | + ../src/QLogger.cpp \ | |
| 35 | + ../src/checkmodules.cpp | |
| 35 | 36 | # ../src/qtservice/src/qtservice.cpp \ |
| 36 | 37 | # ../src/qtservice/src/qtservice_unix.cpp \ |
| 37 | 38 | # ../src/qtservice/src/qtservice_win.cpp \ |
| ... | ... | @@ -52,7 +53,8 @@ HEADERS += \ |
| 52 | 53 | ../src/vregistry.h \ |
| 53 | 54 | ../src/ccoleta.h \ |
| 54 | 55 | ../src/wmi.h \ |
| 55 | - ../src/QLogger.h | |
| 56 | + ../src/QLogger.h \ | |
| 57 | + ../src/checkmodules.h | |
| 56 | 58 | # ../src/qtservice/src/qtservice.h \ |
| 57 | 59 | # ../src/qtservice/src/qtservice_p.h \ |
| 58 | 60 | # ../src/qtservice/src/qtunixserversocket.h \ | ... | ... |
cacic-teste/testcacic.cpp
| ... | ... | @@ -246,18 +246,14 @@ void CTestCacic::testGetTest() |
| 246 | 246 | QVERIFY(ok); |
| 247 | 247 | } |
| 248 | 248 | |
| 249 | -void CTestCacic::testColeta() | |
| 249 | +void CTestCacic::testGetConfig() | |
| 250 | 250 | { |
| 251 | 251 | bool ok; |
| 252 | 252 | QJsonObject configEnvio; |
| 253 | 253 | configEnvio["computador"] = oColeta.getOComputer().toJsonObject(); |
| 254 | - OCacic.setJsonToFile(OCacicComm->comm("/ws/neo/config", &ok, configEnvio), "getConfig.json"); | |
| 255 | - oColeta.configuraColetas(); | |
| 256 | - oColeta.run(); | |
| 257 | - oColeta.waitToCollect(); | |
| 254 | + OCacic.setJsonToFile(OCacicComm->comm("/ws/neo/config", &ok, configEnvio)["reply"].toObject(), "getConfig.json"); | |
| 258 | 255 | |
| 259 | - QVERIFY(!oColeta.toJsonObject()["software"].toObject().isEmpty() && | |
| 260 | - !oColeta.toJsonObject()["hardware"].toObject().isEmpty()); | |
| 256 | + QVERIFY(ok); | |
| 261 | 257 | } |
| 262 | 258 | |
| 263 | 259 | void CTestCacic::testLogger() |
| ... | ... | @@ -334,6 +330,12 @@ void CTestCacic::testEnviaColeta() |
| 334 | 330 | QVERIFY(ok); |
| 335 | 331 | } |
| 336 | 332 | |
| 333 | +void CTestCacic::testGetModulesValues() | |
| 334 | +{ | |
| 335 | + oCheckModules = new CheckModules(QDir::currentPath()); | |
| 336 | + QVERIFY(false); | |
| 337 | +} | |
| 338 | + | |
| 337 | 339 | void CTestCacic::cleanupTestCase() |
| 338 | 340 | { |
| 339 | 341 | // OCacic.deleteFile("gpl-2.0.txt"); |
| ... | ... | @@ -347,5 +349,5 @@ void CTestCacic::cleanupTestCase() |
| 347 | 349 | OCacic.deleteFolder("../logs"); |
| 348 | 350 | OCacic.deleteFile("configRequest.json"); |
| 349 | 351 | OCacic.deleteFile("teste.json"); |
| 350 | - OCacic.deleteFile("getConfig.json"); | |
| 352 | +// OCacic.deleteFile("getConfig.json"); | |
| 351 | 353 | } | ... | ... |
cacic-teste/testcacic.h
| ... | ... | @@ -18,6 +18,7 @@ |
| 18 | 18 | #include <QJsonObject> |
| 19 | 19 | #include <ccoleta.h> |
| 20 | 20 | #include <QLogger.h> |
| 21 | +#include <checkmodules.h> | |
| 21 | 22 | |
| 22 | 23 | class CTestCacic : public QObject |
| 23 | 24 | { |
| ... | ... | @@ -36,6 +37,7 @@ private: |
| 36 | 37 | QJsonObject session; |
| 37 | 38 | QString cripTeste; |
| 38 | 39 | CColeta oColeta; |
| 40 | + CheckModules *oCheckModules; | |
| 39 | 41 | // cacicD OcacicD; |
| 40 | 42 | |
| 41 | 43 | signals: |
| ... | ... | @@ -73,10 +75,11 @@ private slots: |
| 73 | 75 | void testColetaHardware(); |
| 74 | 76 | void testConvertDouble(); |
| 75 | 77 | void testGetTest(); |
| 76 | - void testColeta(); | |
| 78 | + void testGetConfig(); | |
| 77 | 79 | void testLogger(); |
| 78 | 80 | void testFtpDownload(); |
| 79 | 81 | void testEnviaColeta(); |
| 82 | + void testGetModulesValues(); | |
| 80 | 83 | void cleanupTestCase(); |
| 81 | 84 | }; |
| 82 | 85 | ... | ... |
src/checkmodules.cpp
| 1 | 1 | #include "checkmodules.h" |
| 2 | 2 | |
| 3 | -CheckModules::CheckModules() | |
| 3 | +CheckModules::CheckModules(const QString &workingPath) | |
| 4 | 4 | { |
| 5 | + QJsonObject configFile; | |
| 6 | + configFile = oCacic.getJsonFromFile(workingPath + "/getConfig.json"); | |
| 7 | + if (!configFile.isEmpty()) { | |
| 8 | + QJsonArray modulos; | |
| 9 | + modulos = configFile["agentcomputer"].toObject()["modulos"].toArray(); | |
| 10 | + foreach (QJsonValue modulo, modulos){ | |
| 11 | + modules[modulo.toObject()["nome"].toString()] = modulo.toObject()["hash"].toString(); | |
| 12 | + } | |
| 13 | + } | |
| 14 | + //TODO: Completar constructor. Agora que tenho os nomes dos módulos e os hashs, fazer a verificação. | |
| 15 | + qDebug() << modules; | |
| 5 | 16 | } |
| 17 | + | |
| 18 | +bool CheckModules::start(){ | |
| 19 | + return true; | |
| 20 | +} | |
| 21 | + | |
| 22 | +//QStringList CheckModules::verificaModulos(){ | |
| 23 | +// // Compara o novo arquivo de configuração com um antigo e se forem diferentes | |
| 24 | +// // mantem o mais recente; caso iguais simplesmente apaga o novo. | |
| 25 | +// QFile *fileOld; | |
| 26 | +// QFile *fileNew; | |
| 27 | + | |
| 28 | +// fileOld = new QFile(this->applicationDirPath + "/getConfig.json"); | |
| 29 | +// fileNew = new QFile(this->applicationDirPath + "/getConfigNew.json"); | |
| 30 | + | |
| 31 | +// if( fileOld->exists() && fileNew->exists() ){ | |
| 32 | +// if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) { | |
| 33 | +// fileNew->remove(); | |
| 34 | +// } else { | |
| 35 | +// // Renomeia getConfigNew.json para getConfig.json | |
| 36 | +// fileOld->remove(); | |
| 37 | +// fileNew->rename("getConfigNew.json","getConfig.json"); | |
| 38 | +// } | |
| 39 | +// jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json"); | |
| 40 | +// } else if( fileOld->exists() ){ | |
| 41 | +// jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json"); | |
| 42 | +// } else { | |
| 43 | +// QLogger::QLog_Error("Cacic Daemon (Timer)", "Arquivo de configuração não criado."); | |
| 44 | +// } | |
| 45 | +// delete fileOld; | |
| 46 | +// delete fileNew; | |
| 47 | +// lerArquivoConfig(jsonConfig["agentcomputer"].toObject()); | |
| 48 | + | |
| 49 | +// QStringList nomesModulos; | |
| 50 | + | |
| 51 | +// int countExecNotFound = 0; | |
| 52 | +// QMap<QString, QString>::const_iterator moduloIterator = moduleMap.constBegin(); | |
| 53 | +// while (moduloIterator != moduleMap.constEnd()) { | |
| 54 | +// QString nomeModulo = moduloIterator.value(); | |
| 55 | +// QString hashModulo = moduloIterator.key(); | |
| 56 | +// // Calcula hash do binario atual | |
| 57 | +//#if defined(Q_OS_WIN) | |
| 58 | +// fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo + ".exe"); | |
| 59 | +//#else | |
| 60 | +// fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo); | |
| 61 | +//#endif | |
| 62 | +// if(!fileOld->exists()) { | |
| 63 | +// QLogger::QLog_Error("Cacic Daemon (Timer)", QString("Módulo ").append(nomeModulo).append(" não encontrado.")); | |
| 64 | +// countExecNotFound++; | |
| 65 | + | |
| 66 | +// if( countExecNotFound == moduleMap.size() ) { | |
| 67 | +// QLogger::QLog_Error("Cacic Daemon (Timer)", "Não foi possível encontrar nenhum módulo executável!"); | |
| 68 | +// return QStringList(); | |
| 69 | +// } | |
| 70 | + | |
| 71 | +// // pula para o próximo módulo no moduloMap | |
| 72 | +// moduloIterator++; | |
| 73 | +// continue; | |
| 74 | +// } | |
| 75 | + | |
| 76 | +// QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex()); | |
| 77 | +// if ( oldMd5 != hashModulo ) { | |
| 78 | + | |
| 79 | +//#if defined(Q_OS_WIN) | |
| 80 | +// fileOld->rename(this->applicationDirPath + "/" + nomeModulo + ".exe", | |
| 81 | +// this->applicationDirPath + "/" + nomeModulo + "Old.exe"); | |
| 82 | +//#elif defined(Q_OS_LINUX) | |
| 83 | +// fileOld->rename(this->applicationDirPath + "/" + nomeModulo, | |
| 84 | +// this->applicationDirPath + "/" + nomeModulo + "Old"); | |
| 85 | +//#endif | |
| 86 | + | |
| 87 | +// // Download nova versão do executável | |
| 88 | +// QList<QMap<QString,QString> >::const_iterator metodosIterator = metodosDownload.constBegin(); | |
| 89 | +// bool downloadSucess = false; | |
| 90 | +// while ( !downloadSucess && metodosIterator != metodosDownload.constEnd() ) { | |
| 91 | +// if( metodosIterator->value("tipo") == "ftp" || metodosIterator->value("tipo") == "" ) { | |
| 92 | +// if ( OCacicComm->ftpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) ) | |
| 93 | +// downloadSucess = true; | |
| 94 | +// } else if ( metodosIterator->value("tipo") == "http" ) { | |
| 95 | +// if( OCacicComm->httpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) ) | |
| 96 | +// downloadSucess = true; | |
| 97 | +// } | |
| 98 | +// metodosIterator++; | |
| 99 | +// } | |
| 100 | +// fileOld->remove(); | |
| 101 | +// delete fileOld; | |
| 102 | +// } | |
| 103 | + | |
| 104 | +// nomesModulos.append(nomeModulo); | |
| 105 | + | |
| 106 | +// moduloIterator++; | |
| 107 | +// } | |
| 108 | + | |
| 109 | +// return nomesModulos; | |
| 110 | +//} | |
| 111 | + | |
| 112 | +//void CheckModules::lerArquivoConfig ( const QJsonObject& jsonConfig ) | |
| 113 | +//{ | |
| 114 | +// /* lê json de configurações e armazena quais módulos executáveis. | |
| 115 | +// * E faz o mesmo tipo de comparação de hashs, com o fim de: | |
| 116 | +// * ou mantem o binário do módulo ou baixa um novo. | |
| 117 | +// */ | |
| 118 | +// foreach( QJsonValue individualModule, jsonConfig["modulos"].toArray() ) { | |
| 119 | +// QString moduloKey, moduloValue; | |
| 120 | + | |
| 121 | +// moduloKey = individualModule.toObject()["hash"].toString(); | |
| 122 | +// moduloValue = individualModule.toObject()["nome"].toString(); | |
| 123 | + | |
| 124 | +// moduleMap.insert(moduloKey, moduloValue); | |
| 125 | +// } | |
| 126 | + | |
| 127 | +// if ( jsonConfig["metodoDownload"].isArray() ) { | |
| 128 | + | |
| 129 | +// foreach (QJsonValue individualMetodo, jsonConfig["metodoDownload"].toArray() ) { | |
| 130 | +// QMap<QString, QString> newEntry; | |
| 131 | + | |
| 132 | +// newEntry.insert(QString("tipo"), individualMetodo.toObject()["tipo"].toString() ); | |
| 133 | +// newEntry.insert(QString("url"), individualMetodo.toObject()["url"].toString() ); | |
| 134 | +// newEntry.insert(QString("path"), individualMetodo.toObject()["path"].toString() ); | |
| 135 | +// newEntry.insert(QString("usuario"), individualMetodo.toObject()["usario"].toString() ); | |
| 136 | +// newEntry.insert(QString("senha"), individualMetodo.toObject()["senha"].toString() ); | |
| 137 | + | |
| 138 | +// metodosDownload.append( newEntry ); | |
| 139 | +// } | |
| 140 | +// } else { | |
| 141 | +// QMap<QString, QString> newEntry; | |
| 142 | + | |
| 143 | +// newEntry.insert(QString("tipo"), jsonConfig["metodoDownload"].toObject()["tipo"].toString() ); | |
| 144 | +// newEntry.insert(QString("url"), jsonConfig["metodoDownload"].toObject()["url"].toString() ); | |
| 145 | +// newEntry.insert(QString("path"), jsonConfig["metodoDownload"].toObject()["path"].toString() ); | |
| 146 | +// newEntry.insert(QString("usuario"), jsonConfig["metodoDownload"].toObject()["usario"].toString() ); | |
| 147 | +// newEntry.insert(QString("senha"), jsonConfig["metodoDownload"].toObject()["senha"].toString() ); | |
| 148 | + | |
| 149 | +// metodosDownload.append( newEntry ); | |
| 150 | +// } | |
| 151 | +//} | ... | ... |
src/checkmodules.h
| 1 | 1 | #ifndef CHECKMODULES_H |
| 2 | 2 | #define CHECKMODULES_H |
| 3 | 3 | |
| 4 | +#include <ccacic.h> | |
| 5 | +#include <cacic_comm.h> | |
| 6 | +#include <cacic_computer.h> | |
| 7 | + | |
| 4 | 8 | class CheckModules |
| 5 | 9 | { |
| 6 | 10 | public: |
| 7 | - CheckModules(); | |
| 11 | + CheckModules(const QString &workingPath); | |
| 12 | +// QStringList verificaModulos(); | |
| 13 | + bool start(); | |
| 14 | +private: | |
| 15 | + CCacic oCacic; | |
| 16 | + QVariantMap modules; //modules["name"] = hash; | |
| 17 | +// void lerArquivoConfig(const QJsonObject& jsonConfig); | |
| 8 | 18 | }; |
| 9 | 19 | |
| 10 | 20 | #endif // CHECKMODULES_H | ... | ... |