From e14bc4040917de525e4133b7c68aafe3181e435c Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 6 Jun 2019 02:56:51 +0200 Subject: [PATCH] NetworkDetector: make grace period a device setting instead of a param --- networkdetector/devicemonitor.cpp | 3 ++- networkdetector/devicepluginnetworkdetector.cpp | 11 +++++++++++ networkdetector/devicepluginnetworkdetector.json | 6 ++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/networkdetector/devicemonitor.cpp b/networkdetector/devicemonitor.cpp index 5caa17bd..4a77e55b 100644 --- a/networkdetector/devicemonitor.cpp +++ b/networkdetector/devicemonitor.cpp @@ -29,6 +29,7 @@ DeviceMonitor::~DeviceMonitor() void DeviceMonitor::setGracePeriod(int minutes) { + log("Setting grace period to " + QString::number(minutes) + " minutes."); m_gracePeriod = minutes; } @@ -193,7 +194,7 @@ void DeviceMonitor::pingFinished(int exitCode) emit seen(); m_lastSeenTime = QDateTime::currentDateTime(); } else { - log("ICMP Ping failed."); + log("ICMP Ping failed. Last seen: " + m_lastSeenTime.toString() + ", grace period: " + QString::number(m_gracePeriod) + " (until " + m_lastSeenTime.addSecs(60 * m_gracePeriod).toString() + ")"); if (m_reachable && m_lastSeenTime.addSecs(m_gracePeriod * 60) < QDateTime::currentDateTime()) { log("Exceeded grace period of " + QString::number(m_gracePeriod) + " minutes. Marking device as offline."); m_reachable = false; diff --git a/networkdetector/devicepluginnetworkdetector.cpp b/networkdetector/devicepluginnetworkdetector.cpp index 68347ae9..4be32485 100644 --- a/networkdetector/devicepluginnetworkdetector.cpp +++ b/networkdetector/devicepluginnetworkdetector.cpp @@ -84,8 +84,19 @@ DeviceManager::DeviceSetupStatus DevicePluginNetworkDetector::setupDevice(Device connect(monitor, &DeviceMonitor::reachableChanged, this, &DevicePluginNetworkDetector::deviceReachableChanged); connect(monitor, &DeviceMonitor::addressChanged, this, &DevicePluginNetworkDetector::deviceAddressChanged); connect(monitor, &DeviceMonitor::seen, this, &DevicePluginNetworkDetector::deviceSeen); + monitor->setGracePeriod(device->setting(networkDeviceSettingsGracePeriodParamTypeId).toInt()); m_monitors.insert(monitor, device); + connect(device, &Device::settingChanged, this, [this, device](const ParamTypeId ¶mTypeId, const QVariant &value){ + if (paramTypeId != networkDeviceSettingsGracePeriodParamTypeId) { + return; + } + DeviceMonitor *monitor = m_monitors.key(device); + if (monitor) { + monitor->setGracePeriod(value.toInt()); + } + }); + if (!m_pluginTimer) { m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(30); connect(m_pluginTimer, &PluginTimer::timeout, m_broadcastPing, &BroadcastPing::run); diff --git a/networkdetector/devicepluginnetworkdetector.json b/networkdetector/devicepluginnetworkdetector.json index 84b06dcb..b6d8ddc9 100644 --- a/networkdetector/devicepluginnetworkdetector.json +++ b/networkdetector/devicepluginnetworkdetector.json @@ -28,9 +28,11 @@ "displayName": "hardware address", "type": "QString", "inputType": "TextLine" - }, + } + ], + "settingsTypes": [ { - "id": "40116f86-e6b3-4a20-b1e9-e1bd4b6d5b70", + "id": "6c1ec0c8-6a02-4b3c-9064-ee33cfd61fbe", "name": "gracePeriod", "displayName": "Grace period (Minutes)", "type": "uint",