1
0
forked from BRT/arc

Integrate TaskDumpRecorder into scripts for enhanced error tracking and proper handling of nested scopes.

This commit is contained in:
slava 2026-05-11 20:16:05 +07:00
parent afe83e17c2
commit 52d261a060
11 changed files with 52 additions and 4 deletions

View File

@ -9,6 +9,7 @@
#include "dao/MaterialDAO.h"
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "net/NetworkService.h"
namespace Black {
@ -35,6 +36,9 @@ void GetCardInfoScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("black", "FETCH_CARDS", m_deviceId, dumpMeta, &m_error);
// Читаем текущий экран
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));

View File

@ -8,6 +8,7 @@
#include "dao/MaterialDAO.h"
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "net/NetworkService.h"
namespace Black {
@ -34,6 +35,9 @@ void GetProfileInfoScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("black", "FETCH_PROFILE_INFO", m_deviceId, dumpMeta, &m_error);
// Читаем текущий экран
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));

View File

@ -5,6 +5,7 @@
#include "adb/AdbUtils.h"
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "AppLogger.h"
#include "GetProfileInfoScript.h"
@ -35,6 +36,9 @@ void LoginAndCheckAccountsScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("black", "FETCH_PROFILE", m_deviceId, dumpMeta, &m_error);
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode, device.screenWidth, device.screenHeight)) {

View File

@ -289,10 +289,18 @@ void TaskDumpRecorder::finishInternal(const QString &errorMessage) {
TaskDumpRecorder::Scope::Scope(const QString &bank, const QString &taskKind,
const QString &adbDeviceId, const TaskDumpMeta &meta,
const QString *errorPtr)
: m_errorPtr(errorPtr) {
: m_errorPtr(errorPtr), m_owned(false) {
// Вложенные скоупы не перетирают рекордер родителя — иначе внутренний
// скрипт прервал бы запись внешней задачи и сгенерировал ложный дамп
// с пометкой "interrupted".
if (TaskDumpRecorder::current() == nullptr) {
TaskDumpRecorder::begin(bank, taskKind, adbDeviceId, meta);
m_owned = true;
}
}
TaskDumpRecorder::Scope::~Scope() {
if (m_owned) {
TaskDumpRecorder::finish(m_errorPtr ? *m_errorPtr : QString());
}
}

View File

@ -29,6 +29,9 @@ public:
// RAII-скоуп: при создании регистрирует рекордер на текущий поток,
// при разрушении — финализирует (успех/ошибка определяются по errorPtr).
// Если в текущем потоке уже есть активный рекордер (вложенный вызов из
// другого скрипта), новый скоуп становится no-op — родитель остаётся
// владельцем дампа, а внутренние скрины пишутся в его папку.
class Scope {
public:
Scope(const QString &bank, const QString &taskKind,
@ -39,6 +42,7 @@ public:
Scope &operator=(const Scope &) = delete;
private:
const QString *m_errorPtr;
bool m_owned;
};
// Сохраняет XML-дамп в папку задачи. Имя файла: NNNN_<screenTag>.xml.

View File

@ -8,6 +8,7 @@
#include "dao/MaterialDAO.h"
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "net/NetworkService.h"
namespace Dushanbe {
@ -34,6 +35,9 @@ void GetCardInfoScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("dushanbe", "FETCH_CARDS", m_deviceId, dumpMeta, &m_error);
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
if (!xmlScreenParser.isHomeScreen()) {

View File

@ -9,6 +9,7 @@
#include "dao/MaterialDAO.h"
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "net/NetworkService.h"
namespace Dushanbe {
@ -35,6 +36,9 @@ void GetProfileInfoScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("dushanbe", "FETCH_PROFILE_INFO", m_deviceId, dumpMeta, &m_error);
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
if (!xmlScreenParser.isHomeScreen()) {

View File

@ -5,6 +5,7 @@
#include "adb/AdbUtils.h"
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "AppLogger.h"
#include "GetProfileInfoScript.h"
@ -40,6 +41,9 @@ void LoginAndCheckAccountsScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("dushanbe", "FETCH_PROFILE", m_deviceId, dumpMeta, &m_error);
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode, device.screenWidth, device.screenHeight)) {

View File

@ -11,6 +11,7 @@
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dao/SettingsDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "net/NetworkService.h"
#include "AppLogger.h"
@ -40,6 +41,9 @@ void GetCardInfoScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("ozon", "FETCH_CARDS", m_deviceId, dumpMeta, &m_error);
// Читаем текущий экран
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
@ -526,7 +530,7 @@ void GetCardInfoScript::doStart() {
QJsonObject materialBody;
materialBody["bank_profile_id"] = updatedApp.bankProfileId;
materialBody["card_number"] = dbCard.cardNumber;
materialBody["account_number"] = dbCard.accountNumber;
// materialBody["account_number"] = dbCard.accountNumber;
materialBody["name"] = updatedApp.fullName;
materialBody["state"] = materialStatusToString(dbCard.status) == "active" ? "enabled" : "disabled";
materialBody["currency"] = currencyCodes.value(dbCard.currency.toUpper(), 643);

View File

@ -10,6 +10,7 @@
#include "dao/MaterialDAO.h"
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "net/NetworkService.h"
#include "AppLogger.h"
@ -36,6 +37,9 @@ void GetProfileInfoScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("ozon", "FETCH_PROFILE_INFO", m_deviceId, dumpMeta, &m_error);
// Читаем текущий экран
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));

View File

@ -6,6 +6,7 @@
#include "dao/MaterialDAO.h"
#include "dao/BankProfileDAO.h"
#include "dao/DeviceDAO.h"
#include "dump/TaskDumpRecorder.h"
#include "AppLogger.h"
#include "GetCardInfoScript.h"
@ -39,6 +40,9 @@ void LoginAndCheckAccountsScript::doStart() {
return;
}
const TaskDumpMeta dumpMeta{};
TaskDumpRecorder::Scope dumpScope("ozon", "FETCH_PROFILE", m_deviceId, dumpMeta, &m_error);
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
if (!runAppAndGoToHomeScreen(m_deviceId, app.package, app.pinCode, device.screenWidth, device.screenHeight)) {