From 4fe0e53a1b68323574088ef8f9ef3b1182cec814 Mon Sep 17 00:00:00 2001 From: Martin Lukas Date: Mon, 28 Oct 2024 11:17:48 +0100 Subject: [PATCH] nymea-plugins-modbus: Fix spaming logs in SMA integration When SMA integration can't join the multicast group it begins spaming the log each 5s. With this commit it logs the joining problem each 5s for the first minute, after that each 10min. Signed-off-by: Martin Lukas --- sma/speedwire/speedwireinterface.cpp | 13 ++++++++++++- sma/speedwire/speedwireinterface.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/sma/speedwire/speedwireinterface.cpp b/sma/speedwire/speedwireinterface.cpp index c4356f8..542a99e 100644 --- a/sma/speedwire/speedwireinterface.cpp +++ b/sma/speedwire/speedwireinterface.cpp @@ -147,10 +147,21 @@ void SpeedwireInterface::reconfigureMulticastGroup() qCDebug(dcSma()) << "Reconfigure multicast interfaces"; if (m_multicast->joinMulticastGroup(Speedwire::multicastAddress())) { qCDebug(dcSma()) << "SpeedwireInterface: Joined successfully multicast group" << Speedwire::multicastAddress().toString(); + m_multicastWarningPrintCount = 0; } else { - qCWarning(dcSma()) << "SpeedwireInterface: Failed to join multicast group" << Speedwire::multicastAddress().toString() << m_multicast->errorString() << "Retrying in 5 seconds..."; // FIXME: It would probably be better to monitor the network interfaces and re-join if necessary + uint mod = m_multicastWarningPrintCount % 120; + + if (m_multicastWarningPrintCount < 12) { + qCWarning(dcSma()) << "SpeedwireInterface: Failed to join multicast group" << Speedwire::multicastAddress().toString() << m_multicast->errorString() << "Retrying in 5 seconds..."; + } + + if (m_multicastWarningPrintCount >= 12 && mod == 0) { + qCWarning(dcSma()) << "SpeedwireInterface: Failed to join multicast group" << Speedwire::multicastAddress().toString() << m_multicast->errorString() << "Retrying in 10 minutes..."; + } + QTimer::singleShot(5000, this, &SpeedwireInterface::reconfigureMulticastGroup); + m_multicastWarningPrintCount++; } // foreach (const QNetworkInterface &interface, QNetworkInterface::allInterfaces()) { diff --git a/sma/speedwire/speedwireinterface.h b/sma/speedwire/speedwireinterface.h index 630883a..c271933 100644 --- a/sma/speedwire/speedwireinterface.h +++ b/sma/speedwire/speedwireinterface.h @@ -70,6 +70,7 @@ private: quint32 m_sourceSerialNumber = 0; bool m_available = false; QTimer m_multicastReconfigureationTimer; + uint m_multicastWarningPrintCount = 0; };