diff --git a/worker.cpp b/worker.cpp index 058fe18..17ffc43 100644 --- a/worker.cpp +++ b/worker.cpp @@ -205,122 +205,110 @@ void Worker::privateUpdate() { } } else { m_ismasClient.setProgressInPercent(10); - if (backendConnected()) { + if (updateTriggerSet()) { m_ismasClient.setProgressInPercent(20); - if (updateTriggerSet()) { + if (customerEnvironment()) { m_ismasClient.setProgressInPercent(30); - if (customerEnvironment()) { + if (filesToUpdate()) { + // send message to ISMAS about files which have been + // checked in into git repository + m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CHECK_FILES_TO_UPDATE_SUCCESS, + QString("Files to update: ") + m_filesToUpdate.join(',')); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.updateOfPSAContinues("CHECK-FILES-TO-UPDATE", + m_updateStatus.m_statusDescription)); m_ismasClient.setProgressInPercent(40); - if (filesToUpdate()) { - // send message to ISMAS about files which have been - // checked in into git repository - m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CHECK_FILES_TO_UPDATE_SUCCESS, - QString("Files to update: ") + m_filesToUpdate.join(',')); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.updateOfPSAContinues("CHECK-FILES-TO-UPDATE", - m_updateStatus.m_statusDescription)); + if (updateFiles(50)) { m_ismasClient.setProgressInPercent(50); - if (updateFiles(50)) { + if (syncCustomerRepositoryAndFS()) { m_ismasClient.setProgressInPercent(60); - if (syncCustomerRepositoryAndFS()) { + if (sendIsmasLastVersionNotification()) { m_ismasClient.setProgressInPercent(70); - if (sendIsmasLastVersionNotification()) { + sentIsmasLastVersionNotification = true; + if (saveLogFile()) { m_ismasClient.setProgressInPercent(80); - sentIsmasLastVersionNotification = true; - if (saveLogFile()) { - m_ismasClient.setProgressInPercent(90); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.updateOfPSASucceeded("")); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.updateOfPSASucceeded("")); - // mark update as activated -> this resets the WAIT button - m_ismasClient.setProgressInPercent(95); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.updateOfPSAActivated()); + // mark update as activated -> this resets the WAIT button + m_ismasClient.setProgressInPercent(95); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.updateOfPSAActivated()); - m_returnCode = 0; - } else { - m_updateStatus = UpdateStatus(UPDATE_STATUS::SAVE_LOG_FILES_FAILED, - QString("Saving log files failed")); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "SAVE-LOG-FILES", - m_updateStatus.m_statusDescription)); - m_returnCode = -11; - } + m_returnCode = 0; } else { - m_updateStatus = UpdateStatus(UPDATE_STATUS::ISMAS_SEND_LAST_VERSION_FAILED, - QString("Sending ISMAS last version failed")); + m_updateStatus = UpdateStatus(UPDATE_STATUS::SAVE_LOG_FILES_FAILED, + QString("Saving log files failed")); IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "ISMAS-SEND-LAST-VERSION", + "SAVE-LOG-FILES", m_updateStatus.m_statusDescription)); - m_returnCode = -10; + m_returnCode = -11; } } else { - m_updateStatus = UpdateStatus(UPDATE_STATUS::RSYNC_UPDATES_FAILURE, - QString("Syncing files to update failed")); + m_updateStatus = UpdateStatus(UPDATE_STATUS::ISMAS_SEND_LAST_VERSION_FAILED, + QString("Sending ISMAS last version failed")); IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "RSYNC-UPDATE-FILES", + "ISMAS-SEND-LAST-VERSION", m_updateStatus.m_statusDescription)); - m_returnCode = -9; + m_returnCode = -10; } } else { - m_updateStatus = UpdateStatus(UPDATE_STATUS::PSA_UPDATE_FILES_FAILED, - QString("Updating files failed")); + m_updateStatus = UpdateStatus(UPDATE_STATUS::RSYNC_UPDATES_FAILURE, + QString("Syncing files to update failed")); IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "UPDATE-FILES", + "RSYNC-UPDATE-FILES", m_updateStatus.m_statusDescription)); - m_returnCode = -8; + m_returnCode = -9; } } else { - m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_FETCH_UPDATES_REQUEST_FAILURE, - QString("No files to update")); + m_updateStatus = UpdateStatus(UPDATE_STATUS::PSA_UPDATE_FILES_FAILED, + QString("Updating files failed")); IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "FETCH-FILES-TO-UPDATE", + "UPDATE-FILES", m_updateStatus.m_statusDescription)); - m_returnCode = -7; + m_returnCode = -8; } } else { - m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CHECKOUT_BRANCH_FAILURE, - QString("Configuring customer environment failed")); + m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_FETCH_UPDATES_REQUEST_FAILURE, + QString("No files to update")); IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "GIT-CHECKOUT-BRANCH", + "FETCH-FILES-TO-UPDATE", m_updateStatus.m_statusDescription)); - m_returnCode = -6; + m_returnCode = -7; } } else { - m_updateStatus = UpdateStatus(UPDATE_STATUS::ISMAS_UPDATE_TRIGGER_SET_FAILURE, - QString("ISMAS update trigger wrong")); + m_updateStatus = UpdateStatus(UPDATE_STATUS::GIT_CHECKOUT_BRANCH_FAILURE, + QString("Configuring customer environment failed")); IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "CHECK-UPDATE-TRIGGER", + "GIT-CHECKOUT-BRANCH", m_updateStatus.m_statusDescription)); - m_returnCode = -5; + m_returnCode = -6; } } else { - m_updateStatus = UpdateStatus(UPDATE_STATUS::BACKEND_CHECK_FAILURE, - QString("ISMAS backend not available")); + m_updateStatus = UpdateStatus(UPDATE_STATUS::ISMAS_UPDATE_TRIGGER_SET_FAILURE, + QString("ISMAS update trigger wrong")); IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + m_ismasClient.updateOfPSAFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "ISMAS-BACKEND-CHECK", + "CHECK-UPDATE-TRIGGER", m_updateStatus.m_statusDescription)); - m_returnCode = -4; + m_returnCode = -5; } } @@ -334,7 +322,6 @@ void Worker::privateUpdate() { m_updateStatus = UpdateStatus(UPDATE_STATUS::UPDATE_PROCESS_FAILURE, QString("Update process failed")); if (std::optional s = m_ismasClient.finalResult(IsmasClient::RESULT_CODE::INSTALL_ERROR, - "FINAL-UPDATE-RESULT", m_updateStatus.m_statusDescription)) { IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + s.value()); @@ -343,9 +330,8 @@ void Worker::privateUpdate() { emit appendText(QString("UPDATE "), UPDATE_STEP_SUCCESS); m_updateStatus = UpdateStatus(UPDATE_STATUS::UPDATE_PROCESS_SUCCESS, - QString("Update process succeeded")); + QString("Update process succeeded. Reset WAIT.")); if (std::optional s = m_ismasClient.finalResult(IsmasClient::RESULT_CODE::SUCCESS, - "FINAL-UPDATE-RESULT", m_updateStatus.m_statusDescription)) { IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, QString("#M=APISM#C=CMD_EVENT#J=") + s.value()); @@ -362,137 +348,62 @@ void Worker::privateUpdate() { emit restartExitTimer(); } -bool Worker::backendConnected() { - // deactivated: REQ_SELF does not really help. Observation was that even - // id ISMAS is reported as 'true', a following check of the update-trigger - // button has no access to ISMAS. - return true; - - emit appendText("\nConnecting backend ..."); - - if (false) { // so linker removes dead code - for (int repeat = 0; repeat < 100; ++repeat) { - qInfo() << "REPEAT" << repeat << "In backendConnected() -> #M=APISM#C=REQ_SELF#J={}"; - startProgressLoop(); - std::optional result - = IsmasClient::sendRequestReceiveResponse( - IsmasClient::APISM::DIRECT_PORT, "#M=APISM#C=REQ_SELF#J={}"); - if (result) { - stopProgressLoop(); - int progress = (m_mainWindow->progressValue()/10) + 10; - setProgress(progress); - - QString msg = result.value(); - qInfo() << "In backendConnected() -> APISM response" << msg; - QJsonParseError parseError; - QJsonDocument document(QJsonDocument::fromJson(msg.toUtf8(), &parseError)); - if (parseError.error != QJsonParseError::NoError) { - qCritical() << "(1) INVALID JSON MSG: PARSING FAILED (msg=" << msg << "):" - << parseError.error << parseError.errorString(); - setProgress(100); - m_updateStatus = UpdateStatus(UPDATE_STATUS::JSON_PARSE_FAILURE, - QString("(2) INVALID JSON %1 %2 %3") - .arg(msg) - .arg(parseError.error) - .arg(parseError.errorString())); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.jsonParseFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - m_updateStatus.m_statusDescription)); - emit replaceLast("Connecting backend ...", UPDATE_STEP_FAIL); - return false; - } - if (!document.isObject()) { - qCritical() << "FILE IS NOT A JSON OBJECT!"; - setProgress(100); - m_updateStatus = UpdateStatus(UPDATE_STATUS::JSON_PARSE_FAILURE, - QString("NOT A JSON-OBJECT %1").arg(msg)); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.jsonParseFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - m_updateStatus.m_statusDescription)); - emit replaceLast("Connecting backend ...", UPDATE_STEP_FAIL); - return false; - } - - setProgress(progress + 1); - - QJsonObject obj = document.object(); - QStringList keys = obj.keys().filter("CMD_GET_APISMSTATUS_RESPONSE"); - if (keys.size() == 1) { - QString const key = keys.at(0); - QJsonValue v = obj.value(key); - if (v.isObject()) { - obj = v.toObject(); - bool ismas = obj.value("ISMAS").toBool(); - QString status = obj.value("Broker").toString(); - qInfo() << "REPEAT" << repeat << "In backendConnected() Broker=<" - << status << ">, ISMAS=<" << (ismas ? "true>" : "false>"); - if (ismas) { - if (status == "Connected") { - // do not send, as this would result in a corrupted wait button - // but update the user-interface - setProgress(100); - emit replaceLast("Connecting backend ...", UPDATE_STEP_OK); - return true; - } - } - - m_updateStatus = UpdateStatus(UPDATE_STATUS::BACKEND_CHECK, - QString ("REPEAT %1 Broker=<").arg(repeat) - + status + ">, ISMAS=<" + (ismas ? "true>" : "false>")); - //IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - // QString("#M=APISM#C=CMD_EVENT#J=") + - // m_ismasClient.updateOfPSAContinues("BACKEND-CHECK", m_updateStatus.m_statusDescription)); - - qInfo() << "BACKEND-CHECK" << m_updateStatus.m_statusDescription; - emit showErrorMessage("Check backend connection", m_updateStatus.m_statusDescription); - QThread::sleep(6); - continue; - } else { - setProgress(100); - m_updateStatus = UpdateStatus(UPDATE_STATUS::BACKEND_CHECK_FAILURE, - "CMD_GET_APISM_STATUS_RESPONSE KEY NOT A JSON-OBJECT"); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.sanityCheckFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - m_updateStatus.m_statusDescription)); - emit showErrorMessage("check backend connection", m_updateStatus.m_statusDescription); - emit replaceLast("Connecting backend ...", UPDATE_STEP_FAIL); - return false; - } - } else { - setProgress(100); - m_updateStatus = UpdateStatus(UPDATE_STATUS::BACKEND_CHECK_FAILURE, - "CMD_GET_APISMSTATUS_RESPONSE KEY NOT AVAILABLE"); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.sanityCheckFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, - m_updateStatus.m_statusDescription)); - emit showErrorMessage("check backend connection", m_updateStatus.m_statusDescription); - emit replaceLast("Connecting backend ...", UPDATE_STEP_FAIL); - return false; - } - - } else { - stopProgressLoop(); - int progress = (m_mainWindow->progressValue()/10) + 10; - setProgress(progress); +std::optional Worker::getApismVersion() { + for (int repeat = 0; repeat < 10; ++repeat) { + qInfo() << "REPEAT" << repeat << "In getApismVersion() -> #M=APISM#C=REQ_SELF#J={}"; + std::optional result + = IsmasClient::sendRequestReceiveResponse( + IsmasClient::APISM::DIRECT_PORT, "#M=APISM#C=REQ_SELF#J={}"); + if (result) { + QString msg = result.value(); + qInfo() << "In getApismVersion() -> APISM response" << msg; + QJsonParseError parseError; + QJsonDocument document(QJsonDocument::fromJson(msg.toUtf8(), &parseError)); + if (parseError.error != QJsonParseError::NoError) { + qCritical() << "(1) INVALID JSON MSG: PARSING FAILED (msg=" << msg << "):" + << parseError.error << parseError.errorString(); + m_updateStatus = UpdateStatus(UPDATE_STATUS::JSON_PARSE_FAILURE, + QString("(2) INVALID JSON %1 %2 %3") + .arg(msg) + .arg(parseError.error) + .arg(parseError.errorString())); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.jsonParseFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, + m_updateStatus.m_statusDescription)); + return std::nullopt; } + if (!document.isObject()) { + qCritical() << "FILE IS NOT A JSON OBJECT!"; + m_updateStatus = UpdateStatus(UPDATE_STATUS::JSON_PARSE_FAILURE, + QString("NOT A JSON-OBJECT %1").arg(msg)); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.jsonParseFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, + m_updateStatus.m_statusDescription)); + return std::nullopt; + } + QJsonObject obj = document.object(); + QStringList keys = obj.keys().filter("CMD_GET_APISMSTATUS_RESPONSE"); + if (keys.size() != 1) { + m_updateStatus = UpdateStatus(UPDATE_STATUS::BACKEND_CHECK_FAILURE, + "CMD_GET_APISMSTATUS_RESPONSE KEY NOT AVAILABLE"); + IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, + QString("#M=APISM#C=CMD_EVENT#J=") + + m_ismasClient.sanityCheckFailed(IsmasClient::RESULT_CODE::INSTALL_ERROR, + m_updateStatus.m_statusDescription)); + emit showErrorMessage("apism response", m_updateStatus.m_statusDescription); + return std::nullopt; + } else { + QString const key = keys.at(0); + QJsonValue v = obj.value(key); + return v.toObject().value("Version").toString(); + } + } else { + QThread::sleep(1); } - - setProgress(100); - - emit replaceLast("Connecting backend", UPDATE_STEP_FAIL); - emit showErrorMessage("Error", "Backend not available"); - - m_updateStatus = UpdateStatus(UPDATE_STATUS::BACKEND_NOT_CONNECTED, - QString("NO BACKEND CONNECTION")); - IsmasClient::sendRequestReceiveResponse(IsmasClient::APISM::DB_PORT, - QString("#M=APISM#C=CMD_EVENT#J=") + - m_ismasClient.errorBackendNotConnected(m_updateStatus.m_statusDescription, "")); } - return false; + return std::nullopt; } #define CHECK_UPDATE_TRIGGER_SET "Check update trigger ..."