diff --git a/app/marznode/base.py b/app/marznode/base.py index 7772ac8..c0db35d 100644 --- a/app/marznode/base.py +++ b/app/marznode/base.py @@ -3,6 +3,9 @@ from abc import ABC class MarzNodeBase(ABC): + async def stop(self): + """stops all operations""" + async def update_user( self, user, inbounds: list[str] | None = None ) -> None: diff --git a/app/marznode/grpcio.py b/app/marznode/grpcio.py index a01afe9..ab11bd1 100644 --- a/app/marznode/grpcio.py +++ b/app/marznode/grpcio.py @@ -48,7 +48,7 @@ class MarzNodeGRPCIO(MarzNodeBase, MarzNodeDB): f"{self._address}:{self._port}", channel_options ) self._stub = MarzServiceStub(self._channel) - asyncio.create_task(self._monitor_channel()) + self._monitor_task = asyncio.create_task(self._monitor_channel()) self._streaming_task = None self._updates_queue = asyncio.Queue(5) @@ -56,6 +56,10 @@ class MarzNodeGRPCIO(MarzNodeBase, MarzNodeDB): self.usage_coefficient = usage_coefficient atexit.register(self._close_channel) + async def stop(self): + await self._channel.close() + self._monitor_task.cancel() + def _close_channel(self): asyncio.run(self._channel.close()) diff --git a/app/marznode/grpclib.py b/app/marznode/grpclib.py index 758ee78..e24ab48 100644 --- a/app/marznode/grpclib.py +++ b/app/marznode/grpclib.py @@ -59,7 +59,7 @@ class MarzNodeGRPCLIB(MarzNodeBase, MarzNodeDB): self._channel = Channel(self._address, self._port, ssl=ctx) self._stub = MarzServiceStub(self._channel) - asyncio.create_task(self._monitor_channel()) + self._monitor_task = asyncio.create_task(self._monitor_channel()) self._streaming_task = None self._updates_queue = asyncio.Queue(1) @@ -67,6 +67,10 @@ class MarzNodeGRPCLIB(MarzNodeBase, MarzNodeDB): self.usage_coefficient = usage_coefficient atexit.register(self._channel.close) + async def stop(self): + self._channel.close() + self._monitor_task.cancel() + async def _monitor_channel(self): while state := self._channel._state: logger.debug("node %i channel state: %s", self.id, state.value) diff --git a/app/marznode/operations.py b/app/marznode/operations.py index 9bf1e16..56b3d7d 100644 --- a/app/marznode/operations.py +++ b/app/marznode/operations.py @@ -51,6 +51,7 @@ async def remove_user(user: "DBUser"): async def remove_node(node_id: int): if node_id in marznode.nodes: + await marznode.nodes[node_id].stop() del marznode.nodes[node_id] diff --git a/dashboard/public/locales/en.json b/dashboard/public/locales/en.json index c82335a..aeb9462 100644 --- a/dashboard/public/locales/en.json +++ b/dashboard/public/locales/en.json @@ -158,8 +158,8 @@ } }, "usage_coefficient": "Usage Coefficient", - "connection_backend": "Backend Connection", - "connection_backend_desc": "Used for remote tls connections", + "connection_backend": "Connection Backend", + "connection_backend_desc": "Used for the remote connection", "certificate-alert": { "title": "Nodes Certificate Configuration", "desc": "If you aim to configure your nodes certificate, checkout settings page.", diff --git a/dashboard/public/locales/fa.json b/dashboard/public/locales/fa.json index 099de54..c528603 100644 --- a/dashboard/public/locales/fa.json +++ b/dashboard/public/locales/fa.json @@ -140,7 +140,7 @@ }, "usage_coefficient": "ضریب مصرف", "connection_backend": "بکند اتصال", - "connection_backend_desc": "برای اتصالات tls به کار می‌رود", + "connection_backend_desc": "نوع اتصال را مشخص می‌کند", "certificate-alert": { "title": "کانفیگ سرتیفیکت نود", "desc": "اگر قصد برداشت سرتیفیکت نود را دارید، صفحه تنظیمات را بررسی کنید", diff --git a/requirements.txt b/requirements.txt index 9f02543..9b1691c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,7 +23,7 @@ aiohttp==3.10.2 xxhash==3.4.1 grpcio==1.65.4 psycopg==3.1.18 -v2share==0.1.0b22 +v2share==0.1.0b23 PyJWT~=2.8.0 PyNaCl==1.5.0 starlette==0.40.0