30#include <QApplication>
32#include <QStyledItemDelegate>
37#include <ArmarXCore/interface/core/ArmarXManagerInterface.h>
39#include <ArmarXGui/gui-plugins/SystemStateMonitorPlugin/ui_ArmarXManagerRepositoryDialog.h>
55 const QStyleOptionViewItem&
option,
56 const QModelIndex&
index)
const override
58 return new QLineEdit(parent);
64 QLineEdit* lineEdit = qobject_cast<QLineEdit*>(editor);
67 QString propValue =
index.data().toString();
68 propValue.remove(0, propValue.indexOf(
":") + 2);
69 QString propName =
index.data().toString();
71 propName.truncate(propName.indexOf(
":") - 1);
72 lineEdit->setText(propValue);
73 lineEdit->setProperty(
"propertyName", propName);
79 QAbstractItemModel* model,
80 const QModelIndex&
index)
const override
82 QLineEdit* lineEdit = qobject_cast<QLineEdit*>(editor);
86 lineEdit->property(
"propertyName").toString() +
" : " +
88 auto it = managerPrxMap->find(
index.parent().parent().parent().data().toString());
89 if (it != managerPrxMap->end())
91 armarx::ArmarXManagerInterfacePrx prx = it->second;
92 prx->getPropertiesAdmin()->ice_collocationOptimized(
false)->setProperties(
93 {{lineEdit->property(
"propertyName").toString().toStdString(),
94 lineEdit->text().toStdString()}});
107 qRegisterMetaType<StateUpdateMap>(
"StateUpdateMap");
108 qRegisterMetaType<ArmarXManagerItem::ManagerDataMap>(
"ArmarXManagerItem::ManagerDataMap");
109 qRegisterMetaType<ArmarXManagerItem::ManagerData>(
"ArmarXManagerItem::ManagerData");
110 qRegisterMetaType<ManagerPrxMap>(
"ManagerPrxMap");
113 filterExpansionTimer.setSingleShot(
true);
114 connect(&filterExpansionTimer, SIGNAL(timeout()),
this, SLOT(delayedFilterExpansion()));
115 connect(ui.btnProblematicOnly,
116 SIGNAL(toggled(
bool)),
118 SLOT(on_btnProblematicOnly_toggled(
bool)),
119 Qt::UniqueConnection);
121 fillLegendLayout(ui.colorLegendLayout, *monitoredManagerModel);
129 stateUpdateTask->stop();
132 delete managerRepositoryModel;
133 delete monitoredManagerModel;
150 managerRepositoryModel, monitoredManagerModel,
getWidget());
151 managerRepositoryDialog->setModal(
true);
152 connect(managerRepositoryDialog, SIGNAL(accepted()),
this, SLOT(
acceptConfig()));
153 connect(managerRepositoryDialog,
154 SIGNAL(requestedManagerScan()),
157 ui.monitoredManagersTree->setItemDelegate(
160 filterModel->addCustomFilter(
161 [
this](QAbstractItemModel* model,
int source_row,
const QModelIndex& source_parent)
163 QModelIndex index0 = model->index(source_row, 0, source_parent);
164 if (this->ui.btnProblematicOnly->isChecked())
168 auto variantDependency =
170 if (variant.isValid())
173 if (variant.toBool())
179 if (variantDependency.isValid())
181 if (variantDependency.toBool())
186 if (!variant.isValid() && !variantDependency.isValid())
197 filterModel->setSourceModel(monitoredManagerModel);
198 filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
199 ui.monitoredManagersTree->setModel(filterModel);
201 connect(ui.lineEditFilter,
202 SIGNAL(textChanged(QString)),
204 SLOT(setFilterFixedString(QString)));
205 connect(ui.lineEditFilter,
206 SIGNAL(textChanged(QString)),
208 SLOT(expandFilterSelection(QString)),
209 Qt::QueuedConnection);
224 managerRepositoryModel->populate(settings->value(
"ManagerRepository").toStringList());
226 monitoredManagerModel->populate(settings->value(
"MonitoredManagers").toStringList());
227 ui.monitoredManagersTree->expandToDepth(1);
233 settings->setValue(
"ManagerRepository", managerRepositoryModel->toStringList());
235 settings->setValue(
"MonitoredManagers", monitoredManagerModel->toStringList());
253 "SystemStateMonitorUpdate");
254 stateUpdateTask->setDelayWarningTolerance(5000);
255 stateUpdateTask->start();
256 if (monitoredManagerModel->empty())
262 std::unique_lock lock(managerPrxMapMutex);
263 currentManagerPrxMap = monitoredManagerModel->getManagerProxyMap();
272 stateUpdateTask->stop();
281 stateUpdateTask->stop();
291 std::unique_lock lock(monitoredManagerModel->getMutex());
293 monitoredManagerModel->updateManagerDetails(managerData);
294 filterModel->invalidate();
305 managerData.
proxy = prx;
306 prx = prx->ice_timeout(1000);
307 managerData.
name = QString::fromStdString(prx->ice_getIdentity().name);
308 managerData.
appProperties = prx->getApplicationPropertyInfos();
312 managerData.
connection = prx->ice_collocationOptimized(
false)->ice_getConnection();
315 ? QString::fromStdString(managerData.
connection->getEndpoint()->toString())
316 :
"Endpoint: no connection data";
319 catch (
const IceUtil::Exception& ex)
323 QString::fromStdString(
"? (" + std::string(ex.ice_id()) +
")");
325 managerData.
online =
true;
329 managerData.
online =
false;
337 ArmarXManagerInterfacePrx prx,
345 prx->ice_timeout(200)->ice_ping();
354 Ice::StringSeq objectNames = prx->getManagedObjectNames();
356 for (
auto& objectName : objectNames)
359 objEntry.
name = objectName.c_str();
360 objEntry.
state = prx->getObjectState(objectName);
361 objEntry.
connectivity = prx->getObjectConnectivity(objectName);
362 objEntry.
properties = prx->getObjectPropertyInfos(objectName);
365 objEntry.
metaInfoMap = prx->getMetaInfo(objectName);
372 objectStates[objEntry.
name] = (objEntry);
386 decltype(currentManagerPrxMap) proxies;
388 std::unique_lock lock(managerPrxMapMutex);
389 proxies = currentManagerPrxMap;
391 IceUtil::Time start = IceUtil::Time::now();
392 for (
auto it = proxies.begin(); it != proxies.end(); it++)
396 managerDataMap[it->first].online = online;
397 managerDataMap[it->first].name = it->first;
398 managerDataMap[it->first].objects = stateMap;
401 managerDataMap[it->first].appProperties =
402 it->second->getApplicationPropertyInfos();
407 << (IceUtil::Time::now() - start).toMilliSecondsDouble();
416 this->managerRepositoryModel->copyFrom(
417 managerRepositoryDialog->getManagerRepositoryModel());
419 this->monitoredManagerModel->copyFrom(managerRepositoryDialog->getMonitoredManagersModel());
420 ui.monitoredManagersTree->expandToDepth(1);
421 std::unique_lock lock(managerPrxMapMutex);
422 currentManagerPrxMap = monitoredManagerModel->getManagerProxyMap();
426 SystemStateMonitorWidget::fetchOnlineManagers()
429 auto admin =
getIceManager()->getIceGridSession()->getAdmin();
431 IceGrid::ObjectInfoSeq
objects = admin->getAllObjectInfos(
"*Manager");
434 IceGrid::ObjectInfoSeq result;
436 for(
const auto& objectInfo :
objects)
438 Ice::ObjectPrx current = objectInfo.proxy;
440 ArmarXManagerInterfacePrx object;
442 bool isProxySane =
false;
448 const std::string proxyName = current->ice_getIdentity().name;
451 object = ArmarXManagerInterfacePrx::checkedCast(current->ice_timeout(60));
468 const auto identity = current->ice_getIdentity();
469 const std::string proxyName = identity.name;
473 admin->removeObject(identity);
483 qApp->processEvents();
492 result.push_back(objectInfo);
499 QStringList managers;
500 for (
const IceGrid::ObjectInfo& info : result)
502 managers.append(info.proxy->ice_getIdentity().name.c_str());
511 managerRepositoryDialog->addOnlineManagers(fetchOnlineManagers());
517 managerRepositoryDialog->getManagerRepositoryModel()->copyFrom(managerRepositoryModel);
519 managerRepositoryDialog->getMonitoredManagersModel()->copyFrom(monitoredManagerModel);
523 managerRepositoryDialog->show();
527 SystemStateMonitorWidget::prefillView()
529 managerRepositoryModel->clear();
530 monitoredManagerModel->clear();
532 QStringList managers = fetchOnlineManagers();
537 QMetaObject::invokeMethod(ui.monitoredManagersTree,
"expandToDepth", Q_ARG(
int, 0));
538 std::unique_lock lock(managerPrxMapMutex);
543 SystemStateMonitorWidget::addArmarXManagerEntries(
ManagerPrxMap managers)
548 for (
auto& pair : managers)
550 ArmarXManagerItem* item =
new ArmarXManagerItem(pair.first);
551 item->setManagerProxy(pair.second);
552 monitoredManagerModel->appendRow(item);
555 ui.monitoredManagersTree->expandToDepth(1);
562 for (
auto& name : managerNames)
570 getIceManager()->getProxy<ArmarXManagerInterfacePrx>(name.toStdString());
572 QMetaObject::invokeMethod(monitoredManagerModel,
573 "upsertManagerDetails",
585 SystemStateMonitorWidget::expandFilterSelection(QString filterStr)
588 if (filterStr.length() == 0)
590 ui.monitoredManagersTree->collapseAll();
595 filterExpansionTimer.start(500);
600 SystemStateMonitorWidget::delayedFilterExpansion()
608 armarx::SystemStateMonitorWidget::on_btnProblematicOnly_toggled(
bool checked)
613 filterModel->invalidate();
618 SystemStateMonitorWidget::fillLegendLayout(QHBoxLayout* layout,
ArmarXManagerModel& model)
const
620 auto addLegendEntry = [layout, &model](ManagedIceObjectState state,
const QString& text)
622 QLabel* label =
new QLabel(text);
624 QBrush brush = model.getBrush(state);
625 QPalette p = label->palette();
626 p.setColor(label->backgroundRole(), brush.color());
627 label->setPalette(p);
628 label->setAutoFillBackground(
true);
631 QFont font = label->font();
632 font.setPointSize(10);
633 label->setFont(font);
635 layout->addWidget(label);
638 addLegendEntry(armarx::eManagedIceObjectCreated,
"Created");
639 addLegendEntry(armarx::eManagedIceObjectInitializing,
"Initializing");
640 addLegendEntry(armarx::eManagedIceObjectInitialized,
"Initialized");
641 addLegendEntry(armarx::eManagedIceObjectInitializationFailed,
"Initialization Failed");
642 addLegendEntry(armarx::eManagedIceObjectStarting,
"Connecting");
643 addLegendEntry(armarx::eManagedIceObjectStarted,
"Connected");
644 addLegendEntry(armarx::eManagedIceObjectStartingFailed,
"Connecting Failed");
645 addLegendEntry(armarx::eManagedIceObjectExiting,
"Exiting");
646 addLegendEntry(armarx::eManagedIceObjectExited,
"Exited");
SpamFilterDataPtr deactivateSpam(SpamFilterDataPtr const &spamFilter, float deactivationDurationSec, const std::string &identifier, bool deactivate)
#define CHECK_NOT_QT_THREAD(qtObject)
#define CHECK_QT_THREAD(qtObject)
Macro to check whether the current function is executed in the thread of the given Qt object.
std::map< QString, ManagerData > ManagerDataMap
QMap< QString, ManagedIceObjectItem > ObjectMap
ManagerPrxMap getManagerProxyMap() const
This proxy model reimplements the filterAcceptsRow function with a new behavior: All elements that fi...
static void ExpandFilterResults(QTreeView *treeView)
Expands the treeview that all items that match the filterstring are expanded and directly visible.
ObjectPropertyInfos properties
ManagedIceObjectState state
StringVariantBaseMap metaInfoMap
ManagedIceObjectConnectivity connectivity
IceManagerPtr getIceManager() const
Returns the IceManager.
The periodic task executes one thread method repeatedly using the time period specified in the constr...
PropertyEditingDelegate(armarx::ManagerPrxMap *managerPrxMap)
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
QWidget * createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
void setEditorData(QWidget *editor, const QModelIndex &index) const override
bool hideResolvedComponents
bool getHideResolvedComponents() const
void setHideResolvedComponents(bool value)
#define ARMARX_DEBUG_S
The logging level for output that is only interesting while debugging.
#define ARMARX_INFO
The normal logging level.
#define ARMARX_DEBUG
The logging level for output that is only interesting while debugging.
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::string GetHandledExceptionString()
std::map< QString, ArmarXManagerInterfacePrx > ManagerPrxMap
ObjectPropertyInfos appProperties
ArmarXManagerInterfacePrx proxy
Ice::ConnectionPtr connection