From: Benjamin Braatz Date: Wed, 21 May 2025 11:29:24 +0000 (+0200) Subject: Count connections in _open() and _close(). X-Git-Url: http://git.graph-it.com/?a=commitdiff_plain;h=c1d04f403705912df19e27f579b57bfc1f9cbe8f;p=graphit%2Fcontrolpi-graph.git Count connections in _open() and _close(). Only open on first and close on last. --- diff --git a/controlpi_plugins/graph.py b/controlpi_plugins/graph.py index 4b65035..025dbd1 100644 --- a/controlpi_plugins/graph.py +++ b/controlpi_plugins/graph.py @@ -34,6 +34,7 @@ class Graph(BasePlugin): f"'{self.conf['crt']}'.") self._ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) self._ssl_ctx.load_cert_chain(self.conf['crt']) + self._open_connections = 0 self._messages: List[Message] = [] self.bus.register(self.name, 'Graph', [], @@ -79,20 +80,21 @@ class Graph(BasePlugin): self._messages.append(message) async def _open(self) -> None: - self._reader = None - self._writer = None - (reader, writer) = await asyncio.open_connection(self._host, - self._port, - ssl=self._ssl_ctx) - self._reader = reader - self._writer = writer - if self._writer and self._reader: - # Read banner: - banner_size_bytes = await self._reader.readexactly(4) - banner_size_int = struct.unpack(' Any: if self._writer and self._reader: @@ -123,11 +125,14 @@ class Graph(BasePlugin): return None async def _close(self) -> None: - if self._writer: - # Close connection: - self._writer.close() - self._reader = None - self._writer = None + if self._open_connections > 0: + self.open_connections -= 1 + if self._open_connections == 0: + if self._writer: + # Close connection: + self._writer.close() + self._reader = None + self._writer = None async def run(self) -> None: """Get coroot instance for name and send connection opened event."""