From db82b27607eab33581f914f72b9013c45954859b Mon Sep 17 00:00:00 2001 From: Fabian Peller <fabian.peller-konrad@kit.edu> Date: Thu, 18 May 2023 17:11:52 +0200 Subject: [PATCH] add sanity checks and refresh button for manager gui --- .../SkillManagerMonitorWidget.ui | 22 +++++- .../SkillManagerMonitorWidgetController.cpp | 16 +++- .../SkillManagerMonitorWidgetController.h | 1 + .../manager/SkillManagerComponentPlugin.cpp | 74 +++++++++++++------ 4 files changed, 84 insertions(+), 29 deletions(-) diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidget.ui b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidget.ui index 1e80202ef..7c25a1b84 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidget.ui +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidget.ui @@ -78,14 +78,17 @@ <string>Manager</string> </property> <layout class="QGridLayout" name="gridLayout"> - <item row="2" column="0"> + <item row="3" column="1"> + <widget class="QDoubleSpinBox" name="doubleSpinBoxUpdateFreq"/> + </item> + <item row="3" column="0"> <widget class="QLabel" name="label"> <property name="text"> <string>Update Frequency:</string> </property> </widget> </item> - <item row="3" column="0" colspan="3"> + <item row="4" column="0" colspan="3"> <widget class="QTreeWidget" name="treeWidgetSkills"> <column> <property name="text"> @@ -104,8 +107,19 @@ </column> </widget> </item> - <item row="2" column="1"> - <widget class="QDoubleSpinBox" name="doubleSpinBoxUpdateFreq"/> + <item row="2" column="0"> + <widget class="QCheckBox" name="autoUpdateCheckBox"> + <property name="text"> + <string>Auto Update</string> + </property> + </widget> + </item> + <item row="2" column="2"> + <widget class="QPushButton" name="refreshNowPushButton"> + <property name="text"> + <string>Refresh Now</string> + </property> + </widget> </item> </layout> </widget> diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp index 85237f794..f9fa41252 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.cpp @@ -99,7 +99,7 @@ namespace armarx connect(refreshSkillsResultTimer, &QTimer::timeout, this, - &SkillManagerMonitorWidgetController::refreshSkills); + &SkillManagerMonitorWidgetController::refreshSkillsPeriodically); connect(widget.pushButtonCopy, &QPushButton::clicked, @@ -123,6 +123,11 @@ namespace armarx &QTreeWidget::currentItemChanged, this, &SkillManagerMonitorWidgetController::skillSelectionChanged); + + connect(widget.refreshNowPushButton, + &QPushButton::clicked, + this, + &SkillManagerMonitorWidgetController::refreshSkills); } SkillManagerMonitorWidgetController::~SkillManagerMonitorWidgetController() @@ -169,6 +174,15 @@ namespace armarx refreshSkillsResultTimer->setInterval(f); } + void + SkillManagerMonitorWidgetController::refreshSkillsPeriodically() + { + if (widget.autoUpdateCheckBox->isChecked()) + { + refreshSkills(); + } + } + void SkillManagerMonitorWidgetController::refreshSkills() { diff --git a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h index e30b00cf0..f1ad1bb72 100644 --- a/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h +++ b/source/RobotAPI/gui-plugins/SkillManagerPlugin/SkillManagerMonitorWidgetController.h @@ -81,6 +81,7 @@ namespace armarx void updateTimerFrequency(); void refreshSkills(); + void refreshSkillsPeriodically(); void copyCurrentConfig(); void pasteCurrentConfig(); diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp index f0171437b..2908d2e77 100644 --- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp +++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp @@ -112,24 +112,32 @@ namespace armarx const auto& n = it->first; const auto& s = it->second; - if (s) + try { - skills::callback::dti::SkillProviderCallbackInterfacePrx myPrx; - getProxy(myPrx, -1); + if (s) + { + skills::callback::dti::SkillProviderCallbackInterfacePrx myPrx; + getProxy(myPrx, -1); - skills::provider::dto::SkillExecutionRequest exInfo; - exInfo.skillName = info.skillId.skillName; - exInfo.executorName = info.executorName; - exInfo.callbackInterface = myPrx; - exInfo.params = info.params; + skills::provider::dto::SkillExecutionRequest exInfo; + exInfo.skillName = info.skillId.skillName; + exInfo.executorName = info.executorName; + exInfo.callbackInterface = myPrx; + exInfo.params = info.params; - return s->executeSkill(exInfo); + return s->executeSkill(exInfo); + } + else + { + remove = true; + } } - else + catch (...) { remove = true; } + if (remove) { std::scoped_lock l(skillProviderMapMutex); @@ -137,8 +145,9 @@ namespace armarx SkillProviderInterfacePrxMap& skillProviderMap = this->skillProviderMap; if (auto it = skillProviderMap.find(providerName); it != skillProviderMap.end()) { - ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '" - << n << "' during execution. Removing it from skills."; + ARMARX_WARNING << __PRETTY_FUNCTION__ + << ": Found disconnected or buggy skill provider '" << n + << "' during execution. Removing it from skills."; it = skillProviderMap.erase(it); } } @@ -170,14 +179,22 @@ namespace armarx { const auto& n = it->first; const auto& s = it->second; - if (s) + try { - s->abortSkill(skillName); + if (s) + { + s->abortSkill(skillName); + } + else + { + ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '" + << n << "'. Removing it from skills on next execute."; + } } - else + catch (...) { - ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '" - << n << "'. Removing it from skills on next execute."; + ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found buggy skill provider '" << n + << "'. Removing it from skills on next execute."; } } } @@ -236,16 +253,25 @@ namespace armarx { const auto& n = it->first; const auto& s = it->second; - if (s) + try { - skills::provider::dto::SkillStatusUpdateMap m = s->getSkillExecutionStatuses(); - ret.insert({n, m}); - it++; + if (s) + { + skills::provider::dto::SkillStatusUpdateMap m = s->getSkillExecutionStatuses(); + ret.insert({n, m}); + it++; + } + else + { + ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '" + << n << "'. Removing it from skills."; + it = skillProviderMap.erase(it); + } } - else + catch (...) { - ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '" - << n << "'. Removing it from skills."; + ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found buggy skill provider '" << n + << "'. Removing it from skills."; it = skillProviderMap.erase(it); } } -- GitLab