From 1b20caa33feac639e46a1f078d0d7b244d5de967 Mon Sep 17 00:00:00 2001 From: Mario Bielert Date: Tue, 27 Aug 2024 10:56:28 +0200 Subject: [PATCH] Fixes missing error handling of bacpypes read --- metricq_source_bacpypes/source.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/metricq_source_bacpypes/source.py b/metricq_source_bacpypes/source.py index a9563ce..c7c3758 100755 --- a/metricq_source_bacpypes/source.py +++ b/metricq_source_bacpypes/source.py @@ -134,7 +134,7 @@ def metadata(self) -> JsonDict: def property_parameter(self) -> tuple[ObjectIdentifier, PropertyIdentifier]: return self._property_parameter - async def update( + async def send_update( self, timestamp: Timestamp, response: list[tuple[ObjectIdentifier, PropertyIdentifier, int | None, Any]], @@ -226,17 +226,27 @@ async def _update( app: Application, ) -> None: timestamp = Timestamp.now() - response = await app.read_property_multiple( - self.device.bacnet_address, - list(chain(*[metric.property_parameter for metric in self._metrics])), - ) + + try: + response = await app.read_property_multiple( + self.device.bacnet_address, + list(chain(*[metric.property_parameter for metric in self._metrics])), + ) + except Exception as e: + logger.exception("Failed to read property: {}", e) + return + + if response is None: + logger.error("Failed to read property. Result is None.") + return + duration = Timestamp.now() - timestamp logger.debug(f"Request finished successfully in {duration}") # TODO insert small sleep and see if that helps align stuff await asyncio.gather( - *(metric.update(timestamp, response) for metric in self._metrics) + *(metric.send_update(timestamp, response) for metric in self._metrics) )