Commit 4e974e9cc81e64b574a289e25d70b47bd9df21e7

Authored by Eric Menezes Noronha
2 parents f3ac9b08 6bccc883
Exists in master

Merge branch 'master' of https://github.com/lightbase/cacic-agente

Conflicts:
	src/cacic_comm.h
cacic-daemon/cacicD/cacicD.pro
@@ -24,6 +24,7 @@ TEMPLATE = app @@ -24,6 +24,7 @@ TEMPLATE = app
24 SOURCES += main.cpp \ 24 SOURCES += main.cpp \
25 cacicd.cpp \ 25 cacicd.cpp \
26 cacictimer.cpp \ 26 cacictimer.cpp \
  27 + ../../src/cacic_comm.cpp \
27 ../../src/ccacic.cpp \ 28 ../../src/ccacic.cpp \
28 ../../src/wmi.cpp \ 29 ../../src/wmi.cpp \
29 ../../src/cacic_computer.cpp \ 30 ../../src/cacic_computer.cpp \
cacic-daemon/cacicD/cacicd.cpp
@@ -5,16 +5,17 @@ cacicD::cacicD(int argc, char **argv) : QtService<QCoreApplication>(argc, argv, @@ -5,16 +5,17 @@ cacicD::cacicD(int argc, char **argv) : QtService<QCoreApplication>(argc, argv,
5 try{ 5 try{
6 this->createApplication(argc, argv); 6 this->createApplication(argc, argv);
7 7
8 - Ocacictimer = new CacicTimer(); 8 + Ocacictimer = new CacicTimer(application()->applicationDirPath());
9 ccacic = new CCacic; 9 ccacic = new CCacic;
10 setServiceDescription("Cacic Daemon"); 10 setServiceDescription("Cacic Daemon");
11 setServiceFlags(QtService::Default); 11 setServiceFlags(QtService::Default);
12 12
13 logManager = QLogger::QLoggerManager::getInstance(); 13 logManager = QLogger::QLoggerManager::getInstance();
14 - logManager->addDestination(application()->applicationDirPath().append("/log.txt"),"Cacic Daemon",QLogger::InfoLevel);  
15 - logManager->addDestination(application()->applicationDirPath().append("/log.txt"),"Cacic Daemon",QLogger::ErrorLevel); 14 + logManager->addDestination(application()->applicationDirPath() + "/cacicLog.txt","Cacic Daemon",QLogger::InfoLevel);
  15 + logManager->addDestination(application()->applicationDirPath() + "/cacicLog.txt","Cacic Daemon",QLogger::ErrorLevel);
16 } catch (...){ 16 } catch (...){
17 qCritical() << "Error desconhecido no construtor."; 17 qCritical() << "Error desconhecido no construtor.";
  18 + QLogger::QLog_Error("Cacic Daemon", QString("Erro desconhecido no construtor."));
18 } 19 }
19 } 20 }
20 21
@@ -24,55 +25,51 @@ cacicD::~cacicD() @@ -24,55 +25,51 @@ cacicD::~cacicD()
24 logManager->closeLogger(); 25 logManager->closeLogger();
25 application()->exit(); 26 application()->exit();
26 } catch (...){ 27 } catch (...){
27 - qCritical() << "Error desconhecido no desconstrutor."; 28 + QLogger::QLog_Error("Cacic Daemon", QString("Erro desconhecido no destrutor."));
28 } 29 }
29 } 30 }
30 31
31 void cacicD::start() { 32 void cacicD::start() {
32 try{ 33 try{
33 - qDebug() << "Inicio do daemon";  
34 -  
35 - qDebug() << "\nServiço iniciado em" << application()->applicationDirPath();  
36 QLogger::QLog_Info("Cacic Daemon", QString("Servico iniciado em ").append(application()->applicationDirPath()).append(".")); 34 QLogger::QLog_Info("Cacic Daemon", QString("Servico iniciado em ").append(application()->applicationDirPath()).append("."));
37 -  
38 - QJsonObject result = ccacic->getJsonFromFile(application()->applicationDirPath() + "/getConfig.json");  
39 - 35 + QJsonObject result = ccacic->getJsonFromFile(application()->applicationDirPath().append("/getConfig.json"));
40 if(!result.contains("error") && !result.isEmpty()){ 36 if(!result.contains("error") && !result.isEmpty()){
41 - Ocacictimer->iniciarTimer(result["codestatus"].toInt(), application()->applicationDirPath()); 37 + Ocacictimer->setPeriodicidadeExecucao(result["codestatus"].toInt());
  38 + Ocacictimer->iniciarTimer();
42 }else{ 39 }else{
43 - qDebug() << "getConfig.json não encontrado."; 40 + QLogger::QLog_Error("Cacic Daemon", QString("getConfig.json não encontrado."));
44 } 41 }
45 -  
46 - QLogger::QLog_Info("Cacic Daemon", "Serviço finalizado."); 42 + //QLogger::QLog_Info("Cacic Daemon", "Serviço finalizado.");
47 }catch (...){ 43 }catch (...){
48 - qCritical() << "Error desconhecido ao iniciar o serviço."; 44 + QLogger::QLog_Error("Cacic Daemon", QString("Erro desconhecido ao iniciar o serviço."));
49 } 45 }
50 } 46 }
51 47
52 void cacicD::pause() 48 void cacicD::pause()
53 { 49 {
54 try{ 50 try{
55 - qDebug() << "Serviço pausado."; 51 + QLogger::QLog_Info("Cacic Daemon", QString("Serviço pausado."));
56 } catch (...){ 52 } catch (...){
57 - qCritical() << "Error desconhecido ao pausar o serviço."; 53 + QLogger::QLog_Error("Cacic Daemon", QString("Erro desconhecido ao pausar o serviço."));
58 } 54 }
59 } 55 }
60 56
61 void cacicD::resume() 57 void cacicD::resume()
62 { 58 {
63 try{ 59 try{
64 - qDebug() << "Serviço resumido."; 60 + QLogger::QLog_Info("Cacic Daemon", QString("Serviço resumido."));
65 } catch (...){ 61 } catch (...){
66 - qCritical() << "Error desconhecido ao resumir o serviço."; 62 + QLogger::QLog_Error("Cacic Daemon", QString("Erro desconhecido ao resumir o serviço."));
67 } 63 }
68 } 64 }
69 65
70 void cacicD::stop() 66 void cacicD::stop()
71 { 67 {
72 try{ 68 try{
73 - qDebug() << "Serviço parado."; 69 + QLogger::QLog_Info("Cacic Daemon", QString("Serviço parado."));
  70 + this->application()->quit();
74 } catch (...){ 71 } catch (...){
75 - qCritical() << "Error desconhecido ao parar o serviço."; 72 + QLogger::QLog_Error("Cacic Daemon", QString("Erro desconhecido ao parar o serviço."));
76 } 73 }
77 } 74 }
78 75
cacic-daemon/cacicD/cacictimer.cpp
1 #include "cacictimer.h" 1 #include "cacictimer.h"
2 2
3 -CacicTimer::CacicTimer() 3 +CacicTimer::CacicTimer(QString dirpath)
4 { 4 {
5 - OCacicComm = new CacicComm();  
6 - ccacic = new CCacic();  
7 - timer = new QTimer(this);  
8 - logManager = QLogger::QLoggerManager::getInstance();  
9 -  
10 - OCacicComm = CacicComm("http://teste.cacic.cc",  
11 - "rG/HcIDVTZ3pPKCf[[MAIS]]I6aigUb7OMeij3FfC7qNaznk0rBRYb6q6kSK3eNfjgptS8BfwW5yJqCvD2ai7xlw9I6P21j6cvQUqlHmAJpCbfwR13urdRE9AhjfokMcPrH6R1/zXPGMHveLRRgKLcqWu2X96rmoQQdRq9EW1SXmYUAx1dCV[[MAIS]]3Ha61XBw5pq58q35zH8Gjt998rTi3ecV8ShXXevqyK[[MAIS]]W07xpgTjbbd6Fbs/35gPfdRRgMNFjq7Gq[[MAIS]]llFgYMJ6UcEhw8f0ZLQo2oL/eRW/CNyeBW6wG0hIo6EIdpi/Ht0/95Uwn2Og[[MAIS]]2UPXsmKKuTMeGwUvPdbEfexlinUO0[[MAIS]]j9qIa2dpjtl0Y5Fyk1Bvw2ZYRTXwgJpUHsBboWmtTFpgX3wSGOWMipE80K8ktRTVYOp[[MAIS]]4qS/SzKWXpfCuZoCncfwE0lCEoreTH[[MAIS]]MLrTkHJP2oqYMAyFyQcjC0UGr3BQGa2edSNXjG7jrTdddga/SODUiF94jgh/QBwhiZby34b__CRYPTED__",  
12 - "P198PVwtz5F5CfZPSUrzuaQA/QG1sTnwzl/rBnj8M7y5MglANGodG5LLD4q7oY809HuDR4g5tL64lZRBKvKPmEgWd9iAZKvT4UAm9XWN3nKKLGaznCaJohmntNGqrJP1Zd9riTHGu10mPbg/Uh3TCbBHVOICvu5sDlINlCR6A3[[MAIS]]a55RhfKNidvr5uX0kozCxr5t2DyOb5oPocEGyJKyHLQ==__CRYPTED__",  
13 - "1",  
14 - "0",  
15 - "0",  
16 - "YwpgjzZ86/eCsjvOki1KkQ==__CRYPTED__",  
17 - "8PT6U445MPNr3S7WHFa20ge/8NJSspSYE/UL3zf[[MAIS]]wkEfNZ7p1B/2o6i89gTZ44Ok__CRYPTED__",  
18 - "wshPlZWvLPhbUEQFQ1aQmA==__CRYPTED__",  
19 - "E9aKtVz/OSmGv7v1xW4FwaFukOob3qQ/HFDIz916K3ys82qfX9vBDz[[MAIS]]M2cdoYedhNkXt[[MAIS]]UVb10nD[[MAIS]]tOfbn7mlOlTDoGzUl9CgdPCsb[[MAIS]]Qa4wzuCrMw0BcCuaKfr62E3b8vh6Ug4JJbOgBo3ohG3x5O7Ap0D94GKtAWjMuTXRBbhGxPrRS4M6AhzvaN5P8pWd9FikrCLWuMs4ebnRlftef3RmVKScBDQ5zmK6sKxYNmX[[MAIS]]kKn/Gi2[[MAIS]]HftZ7HD9JLvZBpYhp4yjqShblQ67d6PlWgrRWXxwDseIiJe3NlF70zrCPBBelkeAhVDXMXnsYtLms3ElsLzxa3c5vpWzTfgyE[[MAIS]]hvALy4ivew7zaxEwrg2KY1T7GOSWZ7vljIvbhVZJgtzbnYiulFjJTtm5W4uJMKLuUJNzB0rxMkzToIE9/kDmeO2OKiwFbIfbe2Wdq0VpllOkjKtj9WM676iBSpYAXG0MsmLMj9CZ/sNi06hGF[[MAIS]]rXxiOSk66M0Hq[[MAIS]]OeUBh4z3Ra6f9yPJn0K9hIQyT[[MAIS]]Dr/QW/QdJIOkLTW8ZyyAF4DW9ojiTlUdySvB5EB1jyZ5nNTpzyE38qIdg7uM1tdWdm9FZGYxMdHwi1tS2dBeIWkDfWEjih01xiVt2dmdRgo0zIZvmmYDJ9LhCU3XPDlwdeQ8[[MAIS]]F7fnxDfxGqZQjZJ[[MAIS]]Y/Q8bdLpgbhcd3gt3SzjMLE0M[[MAIS]]hTmHG1KP2CzCibZ7grFAN3Y3jSPjmEj5Fzs26tdhdjNzSIt1FCueea8P2c4NmxPYkJCg0D1mgNrkH3L5svsO[[MAIS]]6YYrl3df4s[[MAIS]]fcK/to9s/pnkKfBKrAPF6Z4s2WPsALUPBDS5ty7RC2vqXRvH6hPR4o7xhXzQOQ/1xytr/RoEWEVeZ2wgHVVbbtFsALul/IDc7B45wmwxBx9iZHVwpQJVlNZZUBtwKqKhnXz5pM[[MAIS]]7yUAkfhMcO09pPd5kB2MBdRJs[[MAIS]]2FIk0GRUw05IHkc1rZEX5Ow==__CRYPTED__",  
20 - "Yot8BeM9lOh431SB7dYQXw==__CRYPTED__",  
21 - "Dcr8b5IfZOJjt6qyH5dGyw==__CRYPTED__",  
22 - "2.5.1.1.256.32",  
23 - "2.8.1.7",  
24 - "2.8.1.6");  
25 - OCacicComm->setUrlSsl("https://10.1.0.137/cacic/web/app_dev.php");  
26 - OCacicComm->setUsuario("cacic");  
27 - OCacicComm->setPassword("cacic123");  
28 - 5 + setApplicationDirPath(dirpath);
  6 + iniciarInstancias();
29 connect(timer,SIGNAL(timeout()),this,SLOT(mslot())); 7 connect(timer,SIGNAL(timeout()),this,SLOT(mslot()));
30 } 8 }
31 9
@@ -37,133 +15,77 @@ CacicTimer::~CacicTimer() @@ -37,133 +15,77 @@ CacicTimer::~CacicTimer()
37 delete OCacicComm; 15 delete OCacicComm;
38 } 16 }
39 17
40 -void CacicTimer::iniciarTimer(int x, QString applicationDirPath) 18 +void CacicTimer::reiniciarTimer(){
  19 + timer->stop();
  20 + timer->start(getPeriodicidadeExecucao());
  21 +}
  22 +
  23 +
  24 +void CacicTimer::iniciarTimer()
41 { 25 {
42 - setApplicationDirPath(applicationDirPath);  
43 - logManager->addDestination(getApplicationDirPath().append("/cacicLog.txt"), QStringList("Cacic Daemon"), QLogger::InfoLevel);  
44 - logManager->addDestination(getApplicationDirPath().append("/cacicLog.txt"), QStringList("Cacic Daemon"), QLogger::ErrorLevel);  
45 - timer->start(x); 26 + timer->start(getPeriodicidadeExecucao());
46 } 27 }
47 28
48 void CacicTimer::mslot(){ 29 void CacicTimer::mslot(){
  30 + try{
  31 + verificarPeriodicidadeJson();
  32 + }catch (...){
  33 + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Não foi possivel verificar a periodicidade no getConfig.json"));
  34 +
  35 + }
  36 + cMutex->lock();
  37 + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Semáforo fechado."));
49 if(getTest()){ 38 if(getTest()){
50 - //manager->QLogger::QLog_Trace("ModuleName", "Message: "); 39 + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getTeste() success."));
51 if(getConfig()){ 40 if(getConfig()){
52 - qDebug() << "getConfig() success. - " + QDateTime::currentDateTime().toLocalTime().toString();  
53 - QLogger::QLog_Info("Cacic Daemon", "getConfig() executado com sucesso.");  
54 -  
55 - // Compara o novo arquivo de configuração com um antigo e se forem diferentes  
56 - // mantem o mais recente; caso iguais simplesmente apaga o novo.  
57 - QFile *fileOld;  
58 - QFile *fileNew;  
59 -  
60 - fileOld = new QFile(getApplicationDirPath().append("/getConfig.json"));  
61 - fileNew = new QFile(getApplicationDirPath().append("/getConfigNew.json"));  
62 - if( fileOld->exists() && fileNew->exists() ){  
63 - if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) {  
64 - fileNew->remove();  
65 - } else {  
66 - // Renomeia getConfigNew.json para getConfig.json  
67 - fileOld->remove();  
68 - fileNew->rename("getConfigNew.json","getConfig.json");  
69 - }  
70 - jsonConfig = ccacic->getJsonFromFile(getApplicationDirPath().append("/getConfig.json"));  
71 - } else if( fileOld->exists() ){  
72 - jsonConfig = ccacic->getJsonFromFile(getApplicationDirPath().append("/getConfig.json"));  
73 - } else {  
74 - QLogger::QLog_Error("Cacic Daemon", "Arquivo de configuração não criado.");  
75 - }  
76 - delete fileOld;  
77 - delete fileNew;  
78 -  
79 - /* lê json de configurações e armazena quais módulos executáveis.  
80 - * E faz o mesmo tipo de comparação de hashs, com o fim de:  
81 - * ou mantem o binário do módulo ou baixa um novo.  
82 - */  
83 -  
84 - /* Aqui estou assumindo um formato do .json em que:  
85 - * há a key modulos contem uma lista com o nome dos executaveis e os seus valores hash md5  
86 - * há a key metodo que explicita o método de download dos executaveis  
87 - */  
88 - foreach( QJsonValue moduloValues, jsonConfig["modulos"].toArray() ) {  
89 - QString moduloKey, moduloValue;  
90 -  
91 - moduloKey = moduloValues.toObject()["md5"].toString();  
92 - moduloValue = moduloValues.toObject()["nome"].toString();  
93 -  
94 - moduleMap.insert(moduloKey, moduloValue);  
95 - }  
96 - metodoDownload = jsonConfig["metodo"].toString();  
97 -  
98 - int countExecNotFound = 0;  
99 - QMap<QString, QString>::const_iterator mapIterator = moduleMap.constBegin();  
100 - while (mapIterator != moduleMap.constEnd()) {  
101 - QString nomeModulo = mapIterator.value();  
102 - QString hashModulo = mapIterator.key();  
103 -  
104 - // Calcula hash do binario atual  
105 -#if defined(Q_OS_WIN)  
106 - fileOld = new QFile(getApplicationDirPath().append("/").append(modulo).append(".exe"));  
107 -#else  
108 - fileOld = new QFile(getApplicationDirPath().append("/").append(nomeModulo));  
109 -#endif  
110 - if(!fileOld->exists()) {  
111 - QLogger::QLog_Error("Cacic Daemon", QString("Módulo ").append(nomeModulo).append(" não encontrado."));  
112 -  
113 - countExecNotFound++;  
114 - if( countExecNotFound == moduleMap.size() ) {  
115 - QLogger::QLog_Error("Cacic Daemon", "Não foi possível encontrar nenhum módulo executável!");  
116 - return;  
117 - }  
118 - continue;  
119 - }  
120 -  
121 - QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex());  
122 -  
123 - if ( oldMd5 != hashModulo ) {  
124 -  
125 - fileOld->rename(getApplicationDirPath().append("/").append(nomeModulo),  
126 - getApplicationDirPath().append("/").append("nomeModulo").append("Old") );  
127 -  
128 - // Download nova versão do executável  
129 - if(metodoDownload == "ftp" || metodoDownload == "") {  
130 -// OCacicComm->ftpDownload( QString("/ws/get/").append(nomeModulo) ); 41 + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("getConfig() success."));
  42 + QStringList nomesModulos = verificarModulos();
  43 +
  44 + if ( !nomesModulos.empty() ) {
  45 +
  46 + foreach( QString nome, nomesModulos ) {
  47 + if( nome == "gercols" ) {
  48 + definirDirGercols(getApplicationDirPath());
  49 + iniciarModulo();
  50 +
  51 + //Envio do json gerado na coleta
  52 + bool ok;
  53 + QJsonObject jsonColeta = ccacic->getJsonFromFile("coleta.json");
  54 + OCacicComm->comm("/ws/neo/coleta", &ok, jsonColeta );
  55 + } else if( nome == "mapas" ) {
  56 + definirDirMapas(getApplicationDirPath());
  57 + iniciarModulo();
131 } 58 }
132 -  
133 -  
134 - fileOld->remove();  
135 - delete fileOld;  
136 } 59 }
137 -  
138 - mapIterator++;  
139 } 60 }
140 61
141 - //aqui irá abrir o semaforo e iniciar a coleta.  
142 -  
143 }else{ 62 }else{
144 qDebug() << "getConfig() failed. - " + QDateTime::currentDateTime().toLocalTime().toString(); 63 qDebug() << "getConfig() failed. - " + QDateTime::currentDateTime().toLocalTime().toString();
145 - QLogger::QLog_Error("Cacic Daemon", "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.");
146 } 65 }
147 }else{ 66 }else{
148 qDebug() << "getTest() failed. - " + QDateTime::currentDateTime().toLocalTime().toString(); 67 qDebug() << "getTest() failed. - " + QDateTime::currentDateTime().toLocalTime().toString();
149 - QLogger::QLog_Error("Cacic Daemon", "Falha na execução do getTest()."); 68 + QLogger::QLog_Error("Cacic Daemon (Timer)", "Falha na execução do getTest().");
150 } 69 }
  70 + cMutex->unlock();
  71 + QLogger::QLog_Info("Cacic Daemon (Timer)", QString("Semáforo aberto."));
  72 +}
  73 +
  74 +QString CacicTimer::getApplicationDirPath() {
  75 + return applicationDirPath;
151 } 76 }
152 77
153 bool CacicTimer::getTest(){ 78 bool CacicTimer::getTest(){
154 try{ 79 try{
155 - OCacicComm->setUrlGerente("http://10.1.0.137/cacic/web/app_dev.php");  
156 - OCacicComm->setUsuario("cacic");  
157 - OCacicComm->setPassword("cacic123");  
158 bool ok; 80 bool ok;
159 QJsonObject as; 81 QJsonObject as;
160 as["computador"] = OCacic_Computer.toJsonObject(); 82 as["computador"] = OCacic_Computer.toJsonObject();
161 - QJsonObject jsonresult = OCacicComm->comm("/ws/neo/login", &ok, as);  
162 - if(jsonresult.contains("error")){  
163 - return false;  
164 - } 83 + QJsonObject jsonresult = OCacicComm->comm("/ws/neo/test", &ok, as);
  84 + // if(jsonresult.contains("error")){
  85 + // return false;
  86 + // }
165 try{ 87 try{
166 - ccacic->setJsonToFile(jsonresult, getApplicationDirPath() + "/getTest.json"); 88 + ccacic->setJsonToFile(jsonresult, this->applicationDirPath + "/getTest.json");
167 return true; 89 return true;
168 } catch (...) { 90 } catch (...) {
169 qDebug() << "Erro ao salvar o arquivo de configurações."; 91 qDebug() << "Erro ao salvar o arquivo de configurações.";
@@ -177,18 +99,15 @@ bool CacicTimer::getTest(){ @@ -177,18 +99,15 @@ bool CacicTimer::getTest(){
177 99
178 bool CacicTimer::getConfig(){ 100 bool CacicTimer::getConfig(){
179 try{ 101 try{
180 - OCacicComm->setUrlGerente("http://10.1.0.137/cacic/web/app_dev.php");  
181 - OCacicComm->setUsuario("cacic");  
182 - OCacicComm->setPassword("cacic123");  
183 bool ok; 102 bool ok;
184 QJsonObject as; 103 QJsonObject as;
185 as["computador"] = OCacic_Computer.toJsonObject(); 104 as["computador"] = OCacic_Computer.toJsonObject();
186 - QJsonObject jsonresult = OCacicComm->comm("/ws/neo/login", &ok, as);  
187 - if(jsonresult.contains("error")){  
188 - return false;  
189 - } 105 + QJsonObject jsonresult = OCacicComm->comm("/ws/neo/config", &ok, as);
  106 + // if(jsonresult.contains("error")){
  107 + // return false;
  108 + // }
190 try{ 109 try{
191 - ccacic->setJsonToFile(jsonresult, getApplicationDirPath().append("/getConfigNew.json")); 110 + ccacic->setJsonToFile(jsonresult, this->applicationDirPath + "/getConfigNew.json");
192 return true; 111 return true;
193 } catch (...) { 112 } catch (...) {
194 qDebug() << "Erro ao salvar o arquivo de configurações."; 113 qDebug() << "Erro ao salvar o arquivo de configurações.";
@@ -200,23 +119,79 @@ bool CacicTimer::getConfig(){ @@ -200,23 +119,79 @@ bool CacicTimer::getConfig(){
200 } 119 }
201 } 120 }
202 121
203 -void CacicTimer::registraInicio() 122 +void CacicTimer::lerArquivoConfig ( const QJsonObject& jsonConfig )
  123 +{
  124 + /* lê json de configurações e armazena quais módulos executáveis.
  125 + * E faz o mesmo tipo de comparação de hashs, com o fim de:
  126 + * ou mantem o binário do módulo ou baixa um novo.
  127 + *
  128 + * Aqui estou assumindo um formato do .json em que:
  129 + * há a key modulos contem uma lista com o nome dos executaveis e os seus valores hash md5
  130 + * há a key metodo que explicita o método de download dos executaveis
  131 + */
  132 + foreach( QJsonValue individualModule, jsonConfig["modulos"].toArray() ) {
  133 + QString moduloKey, moduloValue;
  134 +
  135 + moduloKey = individualModule.toObject()["hash"].toString();
  136 + moduloValue = individualModule.toObject()["nome"].toString();
  137 +
  138 + moduleMap.insert(moduloKey, moduloValue);
  139 + }
  140 +
  141 + foreach (QJsonValue individualMetodo, jsonConfig["metodoDownload"].toArray() ) {
  142 + QMap<QString, QString> newEntry;
  143 +
  144 + newEntry.insert(QString("tipo"), individualMetodo.toObject()["tipo"].toString() );
  145 + newEntry.insert(QString("url"), individualMetodo.toObject()["url"].toString() );
  146 + newEntry.insert(QString("path"), individualMetodo.toObject()["path"].toString() );
  147 +
  148 + metodosDownload.append( newEntry );
  149 + }
  150 +}
  151 +
  152 +void CacicTimer::registraInicioColeta()
204 { 153 {
  154 + QLogger::QLog_Info("Cacic Daemon (Timer)","Coleta iniciada em: " + QDateTime::currentDateTime().toLocalTime().toString());
205 } 155 }
206 156
207 -QString CacicTimer::getApplicationDirPath() const 157 +QString CacicTimer::getDirProgram() const
208 { 158 {
209 - return applicationDirPath; 159 + return dirProgram;
  160 +}
  161 +
  162 +void CacicTimer::setDirProgram(const QString &value)
  163 +{
  164 + dirProgram = value;
  165 +}
  166 +
  167 +
  168 +void CacicTimer::iniciarModulo()
  169 +{
  170 + registraInicioColeta();
  171 + QDir::setCurrent(this->applicationDirPath);
  172 + QProcess proc;
  173 + proc.setWorkingDirectory(this->applicationDirPath);
  174 + proc.execute(getDirProgram());
  175 + if((proc.atEnd()) && (proc.exitStatus() == QProcess::NormalExit)){
  176 + registraFimColeta("SUCESSO");
  177 + }else{
  178 + proc.waitForFinished(120000);
  179 + if((!proc.atEnd()) || (proc.exitStatus() == QProcess::CrashExit)){
  180 + registraFimColeta("ERRO");
  181 + proc.kill();
  182 + }
  183 + }
210 } 184 }
211 185
212 void CacicTimer::setApplicationDirPath(const QString &value) 186 void CacicTimer::setApplicationDirPath(const QString &value)
213 { 187 {
214 - applicationDirPath = value; 188 + this->applicationDirPath = value;
215 } 189 }
216 190
217 191
218 -void CacicTimer::registraFim() 192 +void CacicTimer::registraFimColeta(QString msg)
219 { 193 {
  194 + QLogger::QLog_Info("Cacic Daemon (Timer)","Coleta finalizada com " + msg + " em: " + QDateTime::currentDateTime().toLocalTime().toString());
220 } 195 }
221 196
222 bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){ 197 bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){
@@ -230,3 +205,133 @@ bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){ @@ -230,3 +205,133 @@ bool CacicTimer::Md5IsEqual(QVariant document01,QVariant document02){
230 return false; 205 return false;
231 } 206 }
232 } 207 }
  208 +
  209 +void CacicTimer::iniciarInstancias(){
  210 + logManager = QLogger::QLoggerManager::getInstance();
  211 + logManager->addDestination(this->applicationDirPath + "/cacicLog.txt","Cacic Daemon (Timer)",QLogger::InfoLevel);
  212 + logManager->addDestination(this->applicationDirPath + "/cacicLog.txt","Cacic Daemon (Timer)",QLogger::ErrorLevel);
  213 + ccacic = new CCacic();
  214 + timer = new QTimer(this);
  215 + cMutex = new QMutex(QMutex::Recursive);
  216 + OCacicComm = new CacicComm();
  217 + OCacicComm->setUrlSsl("https://10.1.0.137/cacic/web/app_dev.php");
  218 + OCacicComm->setUsuario("cacic");
  219 + OCacicComm->setPassword("cacic123");
  220 +}
  221 +
  222 +void CacicTimer::verificarPeriodicidadeJson()
  223 +{
  224 + QJsonObject result = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json");
  225 + if(!result.contains("error") && !result.isEmpty()){
  226 + if(getPeriodicidadeExecucao() != result["codestatus"].toInt()){
  227 + setPeriodicidadeExecucao(result["codestatus"].toInt());
  228 + reiniciarTimer();
  229 + }
  230 + }else{
  231 + QLogger::QLog_Error("Cacic Daemon (Timer)", QString("getConfig.json com erro ou vazio"));
  232 + }
  233 +}
  234 +
  235 +
  236 +void CacicTimer::definirDirGercols(QString appDirPath){
  237 +#if defined (Q_OS_WIN)
  238 + setDirProgram(appDirPath + "\cacic-gercols.exe");
  239 +#elif defined (Q_OS_LINUX)
  240 + setDirProgram(appDirPath + "/cacic-gercols");
  241 +#endif
  242 +}
  243 +
  244 +void CacicTimer::definirDirMapas(QString appDirPath){
  245 +#if defined (Q_OS_WIN)
  246 + setDirProgram(appDirPath + "\cacic-mapas.exe");
  247 +#elif defined (Q_OS_LINUX)
  248 + setDirProgram(appDirPath + "/cacic-mapas");
  249 +#endif
  250 +}
  251 +
  252 +int CacicTimer::getPeriodicidadeExecucao() const
  253 +{
  254 + return periodicidadeExecucao;
  255 +}
  256 +
  257 +void CacicTimer::setPeriodicidadeExecucao(int value)
  258 +{
  259 + periodicidadeExecucao = value;
  260 +}
  261 +
  262 +
  263 +QStringList CacicTimer::verificarModulos(){
  264 + // Compara o novo arquivo de configuração com um antigo e se forem diferentes
  265 + // mantem o mais recente; caso iguais simplesmente apaga o novo.
  266 + QFile *fileOld;
  267 + QFile *fileNew;
  268 + fileOld = new QFile(this->applicationDirPath + "/getConfig.json");
  269 + fileNew = new QFile(this->applicationDirPath + "/getConfigNew.json");
  270 + if( fileOld->exists() && fileNew->exists() ){
  271 + if( Md5IsEqual(QVariant::fromValue(fileOld), QVariant::fromValue(fileNew)) ) {
  272 + fileNew->remove();
  273 + } else {
  274 + // Renomeia getConfigNew.json para getConfig.json
  275 + fileOld->remove();
  276 + fileNew->rename("getConfigNew.json","getConfig.json");
  277 + }
  278 + jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json");
  279 + } else if( fileOld->exists() ){
  280 + jsonConfig = ccacic->getJsonFromFile(this->applicationDirPath + "/getConfig.json");
  281 + } else {
  282 + QLogger::QLog_Error("Cacic Daemon (Timer)", "Arquivo de configuração não criado.");
  283 + }
  284 + delete fileOld;
  285 + delete fileNew;
  286 + lerArquivoConfig(jsonConfig["agentcomputer"].toObject());
  287 +
  288 + QStringList nomesModulos;
  289 +
  290 + int countExecNotFound = 0;
  291 + QMap<QString, QString>::const_iterator mapIterator = moduleMap.constBegin();
  292 + while (mapIterator != moduleMap.constEnd()) {
  293 + QString nomeModulo = mapIterator.value();
  294 + QString hashModulo = mapIterator.key();
  295 + // Calcula hash do binario atual
  296 +#if defined(Q_OS_WIN)
  297 + fileOld = new QFile(this->applicationDirPath + "/" + modulo + ".exe");
  298 +#else
  299 + fileOld = new QFile(this->applicationDirPath + "/" + nomeModulo);
  300 +#endif
  301 + if(!fileOld->exists()) {
  302 + QLogger::QLog_Error("Cacic Daemon (Timer)", QString("Módulo ").append(nomeModulo).append(" não encontrado."));
  303 + countExecNotFound++;
  304 + if( countExecNotFound == moduleMap.size() ) {
  305 + QLogger::QLog_Error("Cacic Daemon (Timer)", "Não foi possível encontrar nenhum módulo executável!");
  306 + return QStringList();
  307 + }
  308 + continue;
  309 + }
  310 + QString oldMd5 = QString(QCryptographicHash::hash(fileOld->readAll(),QCryptographicHash::Md5).toHex());
  311 + if ( oldMd5 != hashModulo ) {
  312 + fileOld->rename(this->applicationDirPath + "/" + nomeModulo,
  313 + this->applicationDirPath + "/" + nomeModulo + "Old");
  314 + // Download nova versão do executável
  315 + QList<QMap<QString,QString> >::const_iterator metodosIterator = metodosDownload.constBegin();
  316 + bool downloadSucess = false;
  317 + while ( !downloadSucess && metodosIterator != metodosDownload.constEnd() ) {
  318 + if( metodosIterator->value("tipo") == "ftp" || metodosIterator->value("tipo") == "" ) {
  319 + if ( OCacicComm->ftpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) )
  320 + downloadSucess = true;
  321 + } else if ( metodosIterator->value("tipo") == "http" ) {
  322 + if( OCacicComm->httpDownload( metodosIterator->value("url"), metodosIterator->value("path") ) )
  323 + downloadSucess = true;
  324 + }
  325 + metodosIterator++;
  326 + }
  327 + fileOld->remove();
  328 + delete fileOld;
  329 + }
  330 +
  331 + nomesModulos.append(nomeModulo);
  332 +
  333 + mapIterator++;
  334 + }
  335 +
  336 + return nomesModulos;
  337 +}
cacic-daemon/cacicD/cacictimer.h
@@ -5,6 +5,8 @@ @@ -5,6 +5,8 @@
5 #include <QDebug> 5 #include <QDebug>
6 #include <QDir> 6 #include <QDir>
7 #include <QDateTime> 7 #include <QDateTime>
  8 +#include <QMutex>
  9 +#include <QProcess>
8 #include <QMap> 10 #include <QMap>
9 #include "ccacic.h" 11 #include "ccacic.h"
10 #include "cacic_comm.h" 12 #include "cacic_comm.h"
@@ -15,30 +17,43 @@ class CacicTimer : public QObject @@ -15,30 +17,43 @@ class CacicTimer : public QObject
15 { 17 {
16 Q_OBJECT 18 Q_OBJECT
17 public: 19 public:
18 - CacicTimer(); 20 + CacicTimer(QString dirpath);
  21 + ~CacicTimer();
19 QTimer *timer; 22 QTimer *timer;
20 CacicComm *OCacicComm; 23 CacicComm *OCacicComm;
21 CACIC_Computer OCacic_Computer; 24 CACIC_Computer OCacic_Computer;
22 CCacic *ccacic; 25 CCacic *ccacic;
23 - //QLogger::QLoggerManager *manager;  
24 - void iniciarTimer(int x, QString applicationDirPath); 26 + QMutex *cMutex;
  27 + void iniciarTimer();
25 bool getTest(); 28 bool getTest();
26 bool getConfig(); 29 bool getConfig();
27 bool Md5IsEqual(QVariant document01,QVariant document02); 30 bool Md5IsEqual(QVariant document01,QVariant document02);
28 - QString getApplicationDirPath() const;  
29 void setApplicationDirPath(const QString &value); 31 void setApplicationDirPath(const QString &value);
  32 + QString getApplicationDirPath();
  33 + void setDirProgram(const QString &value);
  34 + void setPeriodicidadeExecucao(int value);
30 35
31 private: 36 private:
32 - void registraFim();  
33 - void registraInicio();  
34 -  
35 - QJsonObject jsonConfig; 37 + void registraFimColeta(QString msg);
  38 + void registraInicioColeta();
  39 + QStringList verificarModulos();
  40 + void reiniciarTimer();
36 QLogger::QLoggerManager *logManager; 41 QLogger::QLoggerManager *logManager;
  42 + QString dirProgram;
37 QString applicationDirPath; 43 QString applicationDirPath;
38 - QString metodoDownload; 44 + QString getDirProgram() const;
  45 + void iniciarModulo();
  46 + void iniciarInstancias();
  47 + void verificarPeriodicidadeJson();
  48 + void lerArquivoConfig( const QJsonObject &jsonConfig);
  49 + void definirDirGercols(QString appDirPath);
  50 + void definirDirMapas(QString appDirPath);
  51 + QJsonObject jsonConfig;
  52 + int periodicidadeExecucao;
  53 + int getPeriodicidadeExecucao() const;
  54 + QList<QMap<QString,QString> > metodosDownload;
39 QMap<QString, QString> moduleMap; // key = hash md5, value = nome do modulo 55 QMap<QString, QString> moduleMap; // key = hash md5, value = nome do modulo
40 56
41 -  
42 private slots: 57 private slots:
43 void mslot(); 58 void mslot();
44 }; 59 };
cacic-teste/cacic-teste.pro
@@ -23,6 +23,7 @@ SOURCES += \ @@ -23,6 +23,7 @@ SOURCES += \
23 testcacic.cpp \ 23 testcacic.cpp \
24 ../src/ccacic.cpp \ 24 ../src/ccacic.cpp \
25 ../src/cacic_computer.cpp \ 25 ../src/cacic_computer.cpp \
  26 + ../src/cacic_comm.cpp \
26 ../src/operatingsystem.cpp \ 27 ../src/operatingsystem.cpp \
27 ../src/cacic_software.cpp \ 28 ../src/cacic_software.cpp \
28 ../src/cacic_hardware.cpp \ 29 ../src/cacic_hardware.cpp \
cacic-teste/testcacic.cpp
@@ -9,7 +9,7 @@ CTestCacic::CTestCacic(QObject *parent) : @@ -9,7 +9,7 @@ CTestCacic::CTestCacic(QObject *parent) :
9 9
10 void CTestCacic::initTestCase() 10 void CTestCacic::initTestCase()
11 { 11 {
12 - this->OCacicComm = CacicComm("http://teste.cacic.cc", 12 + this->OCacicComm = new CacicComm("http://teste.cacic.cc",
13 "rG/HcIDVTZ3pPKCf[[MAIS]]I6aigUb7OMeij3FfC7qNaznk0rBRYb6q6kSK3eNfjgptS8BfwW5yJqCvD2ai7xlw9I6P21j6cvQUqlHmAJpCbfwR13urdRE9AhjfokMcPrH6R1/zXPGMHveLRRgKLcqWu2X96rmoQQdRq9EW1SXmYUAx1dCV[[MAIS]]3Ha61XBw5pq58q35zH8Gjt998rTi3ecV8ShXXevqyK[[MAIS]]W07xpgTjbbd6Fbs/35gPfdRRgMNFjq7Gq[[MAIS]]llFgYMJ6UcEhw8f0ZLQo2oL/eRW/CNyeBW6wG0hIo6EIdpi/Ht0/95Uwn2Og[[MAIS]]2UPXsmKKuTMeGwUvPdbEfexlinUO0[[MAIS]]j9qIa2dpjtl0Y5Fyk1Bvw2ZYRTXwgJpUHsBboWmtTFpgX3wSGOWMipE80K8ktRTVYOp[[MAIS]]4qS/SzKWXpfCuZoCncfwE0lCEoreTH[[MAIS]]MLrTkHJP2oqYMAyFyQcjC0UGr3BQGa2edSNXjG7jrTdddga/SODUiF94jgh/QBwhiZby34b__CRYPTED__", 13 "rG/HcIDVTZ3pPKCf[[MAIS]]I6aigUb7OMeij3FfC7qNaznk0rBRYb6q6kSK3eNfjgptS8BfwW5yJqCvD2ai7xlw9I6P21j6cvQUqlHmAJpCbfwR13urdRE9AhjfokMcPrH6R1/zXPGMHveLRRgKLcqWu2X96rmoQQdRq9EW1SXmYUAx1dCV[[MAIS]]3Ha61XBw5pq58q35zH8Gjt998rTi3ecV8ShXXevqyK[[MAIS]]W07xpgTjbbd6Fbs/35gPfdRRgMNFjq7Gq[[MAIS]]llFgYMJ6UcEhw8f0ZLQo2oL/eRW/CNyeBW6wG0hIo6EIdpi/Ht0/95Uwn2Og[[MAIS]]2UPXsmKKuTMeGwUvPdbEfexlinUO0[[MAIS]]j9qIa2dpjtl0Y5Fyk1Bvw2ZYRTXwgJpUHsBboWmtTFpgX3wSGOWMipE80K8ktRTVYOp[[MAIS]]4qS/SzKWXpfCuZoCncfwE0lCEoreTH[[MAIS]]MLrTkHJP2oqYMAyFyQcjC0UGr3BQGa2edSNXjG7jrTdddga/SODUiF94jgh/QBwhiZby34b__CRYPTED__",
14 "P198PVwtz5F5CfZPSUrzuaQA/QG1sTnwzl/rBnj8M7y5MglANGodG5LLD4q7oY809HuDR4g5tL64lZRBKvKPmEgWd9iAZKvT4UAm9XWN3nKKLGaznCaJohmntNGqrJP1Zd9riTHGu10mPbg/Uh3TCbBHVOICvu5sDlINlCR6A3[[MAIS]]a55RhfKNidvr5uX0kozCxr5t2DyOb5oPocEGyJKyHLQ==__CRYPTED__", 14 "P198PVwtz5F5CfZPSUrzuaQA/QG1sTnwzl/rBnj8M7y5MglANGodG5LLD4q7oY809HuDR4g5tL64lZRBKvKPmEgWd9iAZKvT4UAm9XWN3nKKLGaznCaJohmntNGqrJP1Zd9riTHGu10mPbg/Uh3TCbBHVOICvu5sDlINlCR6A3[[MAIS]]a55RhfKNidvr5uX0kozCxr5t2DyOb5oPocEGyJKyHLQ==__CRYPTED__",
15 "1", 15 "1",
@@ -24,9 +24,9 @@ void CTestCacic::initTestCase() @@ -24,9 +24,9 @@ void CTestCacic::initTestCase()
24 "2.5.1.1.256.32", 24 "2.5.1.1.256.32",
25 "2.8.1.7", 25 "2.8.1.7",
26 "2.8.1.6"); 26 "2.8.1.6");
27 - OCacicComm.setUrlSsl("https://10.1.0.137/cacic/web/app_dev.php");  
28 - OCacicComm.setUsuario("cacic");  
29 - OCacicComm.setPassword("cacic123"); 27 + OCacicComm->setUrlSsl("https://10.1.0.137/cacic/web/app_dev.php");
  28 + OCacicComm->setUsuario("cacic");
  29 + OCacicComm->setPassword("cacic123");
30 this->testPath = QDir::currentPath() + "/teste"; 30 this->testPath = QDir::currentPath() + "/teste";
31 this->testIniPath = testPath + "/teste.ini"; 31 this->testIniPath = testPath + "/teste.ini";
32 QVariantMap jsonMap; 32 QVariantMap jsonMap;
@@ -53,14 +53,14 @@ void CTestCacic::testGetValueFromTags() @@ -53,14 +53,14 @@ void CTestCacic::testGetValueFromTags()
53 53
54 void CTestCacic::testCommStatus() 54 void CTestCacic::testCommStatus()
55 { 55 {
56 - QVERIFY(OCacicComm.commStatus()); 56 + QVERIFY(OCacicComm->commStatus());
57 } 57 }
58 58
59 void CTestCacic::testComm() 59 void CTestCacic::testComm()
60 { 60 {
61 bool ok; 61 bool ok;
62 - if (OCacicComm.commStatus()){  
63 - QJsonObject jsonreply = OCacicComm.comm("/ws/get/test", &ok); 62 + if (OCacicComm->commStatus()){
  63 + QJsonObject jsonreply = OCacicComm->comm("/ws/get/test", &ok);
64 // qDebug() << jsonreply["codestatus"].toString(); 64 // qDebug() << jsonreply["codestatus"].toString();
65 QVERIFY(OCacic.getValueFromTags(jsonreply["reply"].toString(), "Comm_Status", "<>") == QString("OK")); 65 QVERIFY(OCacic.getValueFromTags(jsonreply["reply"].toString(), "Comm_Status", "<>") == QString("OK"));
66 } else 66 } else
@@ -120,7 +120,7 @@ void CTestCacic::testJsonValueFromJsonString() @@ -120,7 +120,7 @@ void CTestCacic::testJsonValueFromJsonString()
120 120
121 void CTestCacic::testLogin(){ 121 void CTestCacic::testLogin(){
122 bool ok; 122 bool ok;
123 - QJsonObject jsonReply = OCacicComm.login(&ok); 123 + QJsonObject jsonReply = OCacicComm->login(&ok);
124 QJsonObject sessionvalue = jsonReply["reply"].toObject(); 124 QJsonObject sessionvalue = jsonReply["reply"].toObject();
125 OCacic.setChaveCrypt(sessionvalue["chavecrip"].toString()); 125 OCacic.setChaveCrypt(sessionvalue["chavecrip"].toString());
126 QVERIFY(ok); 126 QVERIFY(ok);
@@ -129,7 +129,7 @@ void CTestCacic::testLogin(){ @@ -129,7 +129,7 @@ void CTestCacic::testLogin(){
129 void CTestCacic::testSslConnection() 129 void CTestCacic::testSslConnection()
130 { 130 {
131 bool ok; 131 bool ok;
132 - QJsonObject json = OCacicComm.comm("", &ok, QJsonObject(), true); 132 + QJsonObject json = OCacicComm->comm("", &ok, QJsonObject(), true);
133 QJsonValue jsonvalue = (!json["codestatus"].isNull()) ? 133 QJsonValue jsonvalue = (!json["codestatus"].isNull()) ?
134 json["codestatus"] : 134 json["codestatus"] :
135 QJsonValue::fromVariant(-1); 135 QJsonValue::fromVariant(-1);
@@ -239,8 +239,8 @@ void CTestCacic::testGetTest() @@ -239,8 +239,8 @@ void CTestCacic::testGetTest()
239 bool ok; 239 bool ok;
240 QJsonObject envio; 240 QJsonObject envio;
241 envio["computador"] = OCacicComp.toJsonObject(); 241 envio["computador"] = OCacicComp.toJsonObject();
242 - OCacicComm.setUrlGerente("http://10.1.0.137/cacic/web/app_dev.php");  
243 - OCacicComm.comm("/ws/neo/getTest", &ok, envio); 242 + OCacicComm->setUrlGerente("http://10.1.0.137/cacic/web/app_dev.php");
  243 + OCacicComm->comm("/ws/neo/getTest", &ok, envio);
244 QVERIFY(ok); 244 QVERIFY(ok);
245 } 245 }
246 246
@@ -319,8 +319,19 @@ void CTestCacic::testLogger() @@ -319,8 +319,19 @@ void CTestCacic::testLogger()
319 logFile06.close(); 319 logFile06.close();
320 } 320 }
321 321
  322 +void CTestCacic::testFtpDownload()
  323 +{
  324 + OCacicComm->ftpDownload("ftp://ftp.unicamp.br", "/pub/gnu/Licenses/gpl-2.0.txt");
  325 + QFile downloaded("gpl-2.0.txt");
  326 +
  327 + QVERIFY( downloaded.open(QIODevice::ReadOnly) );
  328 + QVERIFY( downloaded.exists() );
  329 + QVERIFY( downloaded.readAll() != "" );
  330 +}
  331 +
322 void CTestCacic::cleanupTestCase() 332 void CTestCacic::cleanupTestCase()
323 { 333 {
  334 +// OCacic.deleteFile("gpl-2.0.txt");
324 OCacic.deleteFile("log01.txt"); 335 OCacic.deleteFile("log01.txt");
325 OCacic.deleteFile("./log02.txt"); 336 OCacic.deleteFile("./log02.txt");
326 OCacic.deleteFile("../log03.txt"); 337 OCacic.deleteFile("../log03.txt");
cacic-teste/testcacic.h
@@ -26,7 +26,7 @@ public: @@ -26,7 +26,7 @@ public:
26 explicit CTestCacic(QObject *parent = 0); 26 explicit CTestCacic(QObject *parent = 0);
27 27
28 private: 28 private:
29 - CacicComm OCacicComm; 29 + CacicComm *OCacicComm;
30 CCacic OCacic; 30 CCacic OCacic;
31 CACIC_Computer OCacicComp; 31 CACIC_Computer OCacicComp;
32 cacic_software OCacicSoftware; 32 cacic_software OCacicSoftware;
@@ -75,6 +75,7 @@ private slots: @@ -75,6 +75,7 @@ private slots:
75 void testGetTest(); 75 void testGetTest();
76 void testColeta(); 76 void testColeta();
77 void testLogger(); 77 void testLogger();
  78 + void testFtpDownload();
78 void cleanupTestCase(); 79 void cleanupTestCase();
79 }; 80 };
80 81
gercols/gercols.cpp
@@ -16,6 +16,7 @@ Gercols::Gercols(QObject *parent) @@ -16,6 +16,7 @@ Gercols::Gercols(QObject *parent)
16 16
17 oCacic.setJsonToFile(configTeste,"configReq.json"); 17 oCacic.setJsonToFile(configTeste,"configReq.json");
18 /*************************************************************************/ 18 /*************************************************************************/
  19 +
19 oColeta = new CColeta; 20 oColeta = new CColeta;
20 //Pega chave do registro, que será pega na instalação. 21 //Pega chave do registro, que será pega na instalação.
21 oCacic.setChaveCrypt(oCacic.getValueFromRegistry("Lightbase", "Cacic", "key").toString()); 22 oCacic.setChaveCrypt(oCacic.getValueFromRegistry("Lightbase", "Cacic", "key").toString());
@@ -32,7 +33,11 @@ void Gercols::run() @@ -32,7 +33,11 @@ void Gercols::run()
32 //emite sinal para começar a coleta 33 //emite sinal para começar a coleta
33 emit iniciaColeta(); 34 emit iniciaColeta();
34 35
  36 + /* Json de teste sendo excluído
  37 + */
35 oCacic.deleteFile("configReq.json"); 38 oCacic.deleteFile("configReq.json");
  39 + /***********************************/
  40 +
36 oColeta->waitToCollect(); 41 oColeta->waitToCollect();
37 //salva json em arquivo 42 //salva json em arquivo
38 if (!oColeta->toJsonObject().isEmpty()) 43 if (!oColeta->toJsonObject().isEmpty())
src/cacic_comm.cpp 0 → 100644
@@ -0,0 +1,273 @@ @@ -0,0 +1,273 @@
  1 +#include "cacic_comm.h"
  2 +
  3 +CacicComm::CacicComm ()
  4 +{
  5 +}
  6 +
  7 +CacicComm::CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher,
  8 + QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName,
  9 + QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser,
  10 + QString so, QString cacicVersion, QString gercolsVersion)
  11 +{
  12 + this->setUrlGerente(urlGerente);
  13 + params.addQueryItem("OperatingSystem", operatingSystem);
  14 + params.addQueryItem("ComputerSystem",computerSystem);
  15 + params.addQueryItem("cs_cipher",csCipher);
  16 + params.addQueryItem("cs_debug",csDebug);
  17 + params.addQueryItem("cs_compress",csCompress);
  18 + params.addQueryItem("HTTP_USER_AGENT",httpUserAgent);
  19 + params.addQueryItem("ModuleFolderName",moduleFolderName);
  20 + params.addQueryItem("ModuleProgramName",moduleProgramName);
  21 + params.addQueryItem("NetworkAdapterConfiguration",networkConfiguration);
  22 + params.addQueryItem("PHP_AUTH_PW",phpAuthPw);
  23 + params.addQueryItem("PHP_AUTH_USER",phpAuthUser);
  24 + params.addQueryItem("te_so",so);
  25 + params.addQueryItem("te_versao_cacic",cacicVersion);
  26 + params.addQueryItem("te_versao_gercols",gercolsVersion);
  27 +
  28 +
  29 +}
  30 +
  31 +QJsonObject CacicComm::comm(QString route, bool *ok, const QJsonObject &json, bool isSsl)
  32 +{
  33 + *ok = false;
  34 + QByteArray data;
  35 + QNetworkRequest req;
  36 + QUrl url;
  37 + QString strReply;
  38 + QJsonObject jsonObj;
  39 + if (isSsl){
  40 + url = urlSsl.isEmpty() ? "https://" + this->urlGerente + route : this->urlSsl + route;
  41 + if (!url.isValid()){
  42 + jsonObj["error"] = QVariant("Invalid Url").toJsonValue();
  43 + return jsonObj;
  44 + }
  45 + req.setSslConfiguration(QSslConfiguration::defaultConfiguration());
  46 + } else
  47 + url = "http://" + urlGerente + route;
  48 + req.setUrl(url);
  49 + req.setHeader(QNetworkRequest::LocationHeader, "Cacic Agente");
  50 + if (json.empty()){
  51 + //se não for passado QJson, será mandado os valores do get/test antigo. (Será retirado depois)
  52 + req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
  53 + data.append(params.toString());
  54 + } else {
  55 + // Add JSON
  56 + QJsonDocument d(json);
  57 + data.append(d.toJson());
  58 + req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
  59 + }
  60 + QEventLoop eventLoop;
  61 + QNetworkAccessManager mgr;
  62 + QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
  63 +
  64 + QNetworkReply *reply = mgr.post(req, data);
  65 + if (!reply->sslConfiguration().isNull()){
  66 + reply->ignoreSslErrors();
  67 + }
  68 + eventLoop.exec(); // sai do looping chamando o "finished()".
  69 +
  70 + jsonObj.insert("codestatus", QJsonValue::fromVariant(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute)));
  71 +
  72 + if (reply->error() == QNetworkReply::NoError) {
  73 + //se não houver erro, grava o retorno;
  74 + QVariant replyVariant = reply->readAll();
  75 + QJsonDocument replyDocument = QJsonDocument::fromJson(replyVariant.toByteArray());
  76 + jsonObj["reply"] = (!replyDocument.isNull()) ?
  77 + replyDocument.object() :
  78 + QJsonValue::fromVariant(replyVariant.toString());
  79 + *ok = true;
  80 + delete reply;
  81 + } else {
  82 + strReply = reply->errorString();
  83 + jsonObj.insert("error", QJsonValue::fromVariant(strReply));
  84 + delete reply;
  85 + }
  86 + return jsonObj;
  87 +}
  88 +
  89 +
  90 +/* commStatus
  91 + * execulta um teste do tipo GET na urlGerente;
  92 + * @return retorna o resultado da conexão HTTP:
  93 + * exemplo: 200 OK
  94 + */
  95 +bool CacicComm::commStatus(){
  96 + // cria um event-loop temporario
  97 + QEventLoop eventLoop;
  98 + // "quit()" o event-loop, when the network request "finished()"
  99 + QNetworkAccessManager mgr;
  100 + QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
  101 + // a requisição HTTP
  102 + QUrl url = "http://" + urlGerente;
  103 + QNetworkRequest req( url );
  104 + req.setHeader(QNetworkRequest::LocationHeader, "Cacic Agente");
  105 + QNetworkReply *reply = mgr.get(req);
  106 + eventLoop.exec(); // sai do looping chamando o "finished()".
  107 +
  108 + QString reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();
  109 + if (reply->attribute( QNetworkRequest::HttpStatusCodeAttribute ).isValid()){
  110 +// qDebug() << "Status:" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() << reason;
  111 + return true;
  112 + }else{
  113 + reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();
  114 +// qDebug() << "Error:" << reason;
  115 + return false;
  116 + }
  117 +}
  118 +
  119 +/* login
  120 + * realiza login com usuario e senha
  121 + * @return retorna json com sessão e chave de criptografia
  122 + */
  123 +QJsonObject CacicComm::login(bool *ok) {
  124 + *ok = false;
  125 + // Cria dados de login
  126 + QVariantMap login;
  127 + login["user"] = this->usuario;
  128 + login["password"] = this->password;
  129 + // Cria conexão e retorna Json da sessão
  130 + QJsonObject retorno = this->comm("/ws/neo/getLogin", ok, QJsonObject::fromVariantMap(login), true);
  131 + if (*ok)
  132 + this->session = retorno["reply"].toObject()["session"].toString();
  133 + return retorno;
  134 +}
  135 +
  136 +/* fileDownload( QString path )
  137 + *
  138 + * Faz o download de um arquivo usando o protocolo mode
  139 + * a partir da url do gerente e do caminho até o arquivo.
  140 + */
  141 +bool CacicComm::fileDownload(const QString &mode, const QString &path){
  142 + QEventLoop eventLoop;
  143 + QNetworkAccessManager manager;
  144 + QNetworkRequest request;
  145 + QNetworkReply *reply;
  146 +
  147 + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileDownloadFinished(QNetworkReply*)) );
  148 + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()) );
  149 +
  150 + QStringList splitPath = path.split("/");
  151 +
  152 + fileHandler = new QFile(splitPath[splitPath.size() - 1]);
  153 + if( !fileHandler->open(QIODevice::WriteOnly) ) {
  154 + qDebug() << "ftpDownload: fileHandler nâo pode abrir arquivo.";
  155 + return false;
  156 + }
  157 +
  158 + QUrl url(urlGerente);
  159 + url.setScheme(mode);
  160 + url.setPath(path);
  161 + request.setUrl(url);
  162 +
  163 + reply = manager.get(request);
  164 +
  165 + eventLoop.exec();
  166 +
  167 + delete fileHandler;
  168 + delete reply;
  169 +
  170 + return true;
  171 +}
  172 +
  173 +/* fileDownload( QString urlServer, QString path )
  174 + *
  175 + * Faz o download de um arquivo usando o protocolo mode
  176 + * a partir da url recebida e do caminho até o arquivo.
  177 + */
  178 +bool CacicComm::fileDownload(const QString &mode, const QString &urlServer, const QString &path){
  179 + QEventLoop eventLoop;
  180 + QNetworkAccessManager manager;
  181 + QNetworkRequest request;
  182 + QNetworkReply *reply;
  183 +
  184 + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileDownloadFinished(QNetworkReply*)) );
  185 + QObject::connect(&manager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()) );
  186 +
  187 + QStringList splitPath = path.split("/");
  188 +
  189 + fileHandler = new QFile(splitPath[splitPath.size() - 1]);
  190 + if( !fileHandler->open(QIODevice::WriteOnly) ) {
  191 + qDebug() << "ftpDownload: fileHandler nâo pode abrir arquivo.";
  192 + return false;
  193 + }
  194 +
  195 + QUrl url(urlServer);
  196 + url.setScheme(mode);
  197 + url.setPath(path);
  198 + request.setUrl(url);
  199 +
  200 + reply = manager.get(request);
  201 +
  202 + eventLoop.exec();
  203 +
  204 + delete fileHandler;
  205 + delete reply;
  206 +
  207 + return true;
  208 +}
  209 +
  210 +bool CacicComm::ftpDownload( const QString &path ){
  211 + return fileDownload("ftp", path);
  212 +}
  213 +
  214 +bool CacicComm::ftpDownload( const QString &urlServer, const QString &path ){
  215 + return fileDownload("ftp", urlServer, path);
  216 +}
  217 +
  218 +bool CacicComm::httpDownload( const QString &path ){
  219 + return fileDownload("http", path);
  220 +}
  221 +
  222 +bool CacicComm::httpDownload( const QString &urlServer, const QString &path ){
  223 + return fileDownload("http", urlServer, path);
  224 +}
  225 +
  226 +QString CacicComm::getUrlSsl (){
  227 + return this->urlSsl;
  228 +}
  229 +
  230 +void CacicComm::setUrlSsl(QString value){
  231 + this->urlSsl = value;
  232 +}
  233 +
  234 +QString CacicComm::getUrlGerente (){
  235 + return this->urlGerente;
  236 +}
  237 +
  238 +void CacicComm::setUrlGerente(QString value){
  239 + if (value.contains("://", Qt::CaseInsensitive)){
  240 + value = value.mid(value.indexOf("://") + 3);
  241 + }
  242 + if (value.endsWith("/")){
  243 + value.remove(value.size()-1, 1);
  244 + }
  245 + this->urlGerente = value;
  246 +}
  247 +
  248 +QString CacicComm::getPassword()
  249 +{
  250 + return this->password;
  251 +}
  252 +
  253 +void CacicComm::setPassword(QString value)
  254 +{
  255 + this->password = value;
  256 +}
  257 +QString CacicComm::getUsuario()
  258 +{
  259 + return this->usuario;
  260 +}
  261 +
  262 +void CacicComm::setUsuario(QString value)
  263 +{
  264 + this->usuario = value;
  265 +}
  266 +
  267 +void CacicComm::fileDownloadFinished(QNetworkReply* reply)
  268 +{
  269 + QTextStream out(fileHandler);
  270 + out << reply->readAll();
  271 + fileHandler->close();
  272 + reply->close();
  273 +}
src/cacic_comm.h
@@ -13,200 +13,55 @@ @@ -13,200 +13,55 @@
13 #include <QJsonObject> 13 #include <QJsonObject>
14 #include <QJsonDocument> 14 #include <QJsonDocument>
15 15
16 -class CacicComm { 16 +class CacicComm : public QObject{
17 17
18 -private:  
19 - QUrlQuery params;  
20 - QString urlGerente;  
21 - QString urlSsl;  
22 - QString usuario;  
23 - QString password;  
24 - QString session; 18 + Q_OBJECT
25 19
26 public: 20 public:
27 - CacicComm (){  
28 - }  
29 21
  22 + CacicComm ();
30 CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher, 23 CacicComm (QString urlGerente, QString operatingSystem, QString computerSystem, QString csCipher,
31 QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName, 24 QString csDebug, QString csCompress, QString httpUserAgent, QString moduleFolderName,
32 QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser, 25 QString moduleProgramName, QString networkConfiguration,QString phpAuthPw, QString phpAuthUser,
33 - QString so, QString cacicVersion, QString gercolsVersion)  
34 - {  
35 - this->setUrlGerente(urlGerente);  
36 - params.addQueryItem("OperatingSystem", operatingSystem);  
37 - params.addQueryItem("ComputerSystem",computerSystem);  
38 - params.addQueryItem("cs_cipher",csCipher);  
39 - params.addQueryItem("cs_debug",csDebug);  
40 - params.addQueryItem("cs_compress",csCompress);  
41 - params.addQueryItem("HTTP_USER_AGENT",httpUserAgent);  
42 - params.addQueryItem("ModuleFolderName",moduleFolderName);  
43 - params.addQueryItem("ModuleProgramName",moduleProgramName);  
44 - params.addQueryItem("NetworkAdapterConfiguration",networkConfiguration);  
45 - params.addQueryItem("PHP_AUTH_PW",phpAuthPw);  
46 - params.addQueryItem("PHP_AUTH_USER",phpAuthUser);  
47 - params.addQueryItem("te_so",so);  
48 - params.addQueryItem("te_versao_cacic",cacicVersion);  
49 - params.addQueryItem("te_versao_gercols",gercolsVersion);  
50 -  
51 -  
52 - }  
53 -  
54 - QJsonObject comm(QString route, bool *ok, const QJsonObject &json = QJsonObject(), bool isSsl = false)  
55 - {  
56 - *ok = false;  
57 - QByteArray data;  
58 - QNetworkRequest req;  
59 - QUrl url;  
60 - QString strReply;  
61 - QJsonObject jsonObj;  
62 - if (isSsl){  
63 - url = urlSsl.isEmpty() ? "https://" + this->urlGerente + route : this->urlSsl + route;  
64 - if (!url.isValid()){  
65 - jsonObj["error"] = QJsonValue::fromVariant(QVariant("Invalid Url"));  
66 - return jsonObj;  
67 - }  
68 - req.setSslConfiguration(QSslConfiguration::defaultConfiguration());  
69 - } else  
70 - url = "http://" + urlGerente + route;  
71 - req.setUrl(url);  
72 - req.setHeader(QNetworkRequest::LocationHeader, "Cacic Agente");  
73 - if (json.empty()){  
74 - //se não for passado QJson, será mandado os valores do get/test antigo. (Será retirado depois)  
75 - req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");  
76 - data.append(params.toString());  
77 - } else {  
78 - // Add JSON  
79 - QJsonDocument d(json);  
80 - data.append(d.toJson());  
81 - req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");  
82 - }  
83 - QEventLoop eventLoop;  
84 - QNetworkAccessManager mgr;  
85 - QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));  
86 -  
87 - QNetworkReply *reply = mgr.post(req, data);  
88 - if (!reply->sslConfiguration().isNull()){  
89 - reply->ignoreSslErrors();  
90 - }  
91 - eventLoop.exec(); // sai do looping chamando o "finished()".  
92 -  
93 - jsonObj.insert("codestatus", QJsonValue::fromVariant(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute)));  
94 -  
95 - if (reply->error() == QNetworkReply::NoError) {  
96 - //se não houver erro, grava o retorno;  
97 - QVariant replyVariant = reply->readAll();  
98 - QJsonDocument replyDocument = QJsonDocument::fromJson(replyVariant.toByteArray());  
99 - jsonObj["reply"] = (!replyDocument.isNull()) ?  
100 - replyDocument.object() :  
101 - QJsonValue::fromVariant(replyVariant.toString());  
102 - *ok = true;  
103 - delete reply;  
104 - } else {  
105 - strReply = reply->errorString();  
106 - jsonObj.insert("error", QJsonValue::fromVariant(strReply));  
107 - delete reply;  
108 - }  
109 - return jsonObj;  
110 - }  
111 - 26 + QString so, QString cacicVersion, QString gercolsVersion);
  27 + QJsonObject comm(QString route, bool *ok, const QJsonObject &json = QJsonObject(), bool isSsl = false);
  28 + bool commStatus();
  29 + QJsonObject login(bool *ok);
  30 + bool ftpDownload(const QString &path);
  31 + bool ftpDownload(const QString &urlServer, const QString &path);
  32 + bool httpDownload(const QString &path);
  33 + bool httpDownload(const QString &urlServer, const QString &path);
  34 + QString getUrlSsl ();
  35 + void setUrlSsl(QString value);
  36 + QString getUrlGerente ();
  37 + void setUrlGerente(QString value);
  38 + QString getPassword();
  39 + void setPassword(QString value);
  40 + QString getUsuario();
  41 + void setUsuario(QString value);
112 42
113 - /* commStatus  
114 - * execulta um teste do tipo GET na urlGerente;  
115 - * @return retorna o resultado da conexão HTTP:  
116 - * exemplo: 200 OK  
117 - */  
118 - bool commStatus(){  
119 - // cria um event-loop temporario  
120 - QEventLoop eventLoop;  
121 - // "quit()" o event-loop, when the network request "finished()"  
122 - QNetworkAccessManager mgr;  
123 - QObject::connect(&mgr, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));  
124 - // a requisição HTTP  
125 - QUrl url = "http://" + urlGerente;  
126 - QNetworkRequest req( url );  
127 - req.setHeader(QNetworkRequest::LocationHeader, "Cacic Agente");  
128 - QNetworkReply *reply = mgr.get(req);  
129 - eventLoop.exec(); // sai do looping chamando o "finished()".  
130 43
131 - QString reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();  
132 - if (reply->attribute( QNetworkRequest::HttpStatusCodeAttribute ).isValid()){  
133 -// qDebug() << "Status:" << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() << reason;  
134 - return true;  
135 - }else{  
136 - reason = reply->attribute( QNetworkRequest::HttpReasonPhraseAttribute ).toString();  
137 -// qDebug() << "Error:" << reason;  
138 - return false;  
139 - }  
140 - }  
141 44
142 - /* login  
143 - * realiza login com usuario e senha  
144 - * @return retorna json com sessão e chave de criptografia  
145 - */  
146 - QJsonObject login(bool *ok) {  
147 - *ok = false;  
148 - // Cria dados de login  
149 - QVariantMap login;  
150 - login["user"] = this->usuario;  
151 - login["password"] = this->password;  
152 - // Cria conexão e retorna Json da sessão  
153 - QJsonObject retorno = this->comm("/ws/neo/getLogin", ok, QJsonObject::fromVariantMap(login), true);  
154 - if (*ok)  
155 - this->session = retorno["reply"].toObject()["session"].toString();  
156 - return retorno;  
157 - }  
158 -  
159 - bool ftpDownload(QString path){  
160 - QUrl url(urlGerente);  
161 - url.setScheme("ftp");  
162 - url.setPath(path);  
163 -  
164 - }  
165 -  
166 - QString getUrlSsl (){  
167 - return this->urlSsl;  
168 - }  
169 -  
170 - void setUrlSsl(QString value){  
171 - this->urlSsl = value;  
172 - }  
173 -  
174 - QString getUrlGerente (){  
175 - return this->urlGerente;  
176 - } 45 +signals:
  46 +// void finished(QNetworkReply* reply);
177 47
178 - void setUrlGerente(QString value){  
179 - if (value.contains("://", Qt::CaseInsensitive)){  
180 - value = value.mid(value.indexOf("://") + 3);  
181 - }  
182 - if (value.endsWith("/")){  
183 - value.remove(value.size()-1, 1);  
184 - }  
185 - this->urlGerente = value;  
186 - } 48 +private slots:
187 49
188 - QString getPassword()  
189 - {  
190 - return this->password;  
191 - } 50 + void fileDownloadFinished(QNetworkReply* reply);
192 51
193 - void setPassword(QString value)  
194 - {  
195 - this->password = value;  
196 - }  
197 - QString getUsuario()  
198 - {  
199 - return this->usuario;  
200 - } 52 +private:
201 53
202 - void setUsuario(QString value)  
203 - {  
204 - this->usuario = value;  
205 - } 54 + bool fileDownload(const QString &mode, const QString &path);
  55 + bool fileDownload(const QString &mode, const QString &urlServer, const QString &path);
206 56
  57 + QUrlQuery params;
  58 + QString urlGerente;
  59 + QString urlSsl;
  60 + QString usuario;
  61 + QString password;
  62 + QString session;
207 63
208 -signals:  
209 - void finished(QNetworkReply* reply); 64 + QFile *fileHandler;
210 65
211 }; 66 };
212 #endif // CACIC_COMM_H 67 #endif // CACIC_COMM_H
src/ccoleta.cpp
@@ -42,6 +42,7 @@ bool CColeta::waitToCollect() @@ -42,6 +42,7 @@ bool CColeta::waitToCollect()
42 42
43 void CColeta::run() 43 void CColeta::run()
44 { 44 {
  45 + /* Versão do json de testes */
45 QJsonObject coleta = oCacic.getJsonFromFile("configReq.json"); 46 QJsonObject coleta = oCacic.getJsonFromFile("configReq.json");
46 47
47 if( coleta.contains("hardware") ){ 48 if( coleta.contains("hardware") ){
@@ -54,6 +55,27 @@ void CColeta::run() @@ -54,6 +55,27 @@ void CColeta::run()
54 emit beginSoftware(); 55 emit beginSoftware();
55 } else 56 } else
56 this->softwareIsFinish = true; 57 this->softwareIsFinish = true;
  58 + /************************************************************/
  59 +
  60 +
  61 + /* Versão do json definitiva, obtiva através do getConfig()
  62 + QJsonObject coleta = oCacic.getJsonFromFile("getConfig.json")["agentcomputer"].toObject();
  63 +
  64 + foreach ( QJsonValue action, coleta["actions"].toArray() ){
  65 + QJsonObject jsonAction = action.toObject();
  66 +
  67 + if( jsonAction.contains("col_hard") && jsonAction["col_hard"] == QJsonValue.fromVariant(QString("true")) ){
  68 + this->hardwareIsFinish = false;
  69 + emit beginHardware();
  70 + } else
  71 + this->hardwareIsFinish = true;
  72 + if ( jsonAction.contains("col_soft") && jsonAction["col_soft"] == QJsonValue.fromVariant(QString("true")) ){
  73 + this->softwareIsFinish = false;
  74 + emit beginSoftware();
  75 + } else
  76 + this->softwareIsFinish = true;
  77 + }
  78 + /************************************************************/
57 79
58 } 80 }
59 81