From c57b019b7d91bb89611e037c3abc8b46fc14cf24 Mon Sep 17 00:00:00 2001 From: ytemiloluwa Date: Tue, 17 Sep 2024 08:55:09 +0100 Subject: [PATCH] backends: add _get_pools to BTMiner --- pyasic/miners/backends/btminer.py | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/pyasic/miners/backends/btminer.py b/pyasic/miners/backends/btminer.py index 06bc19f9..51cc1a74 100644 --- a/pyasic/miners/backends/btminer.py +++ b/pyasic/miners/backends/btminer.py @@ -27,6 +27,7 @@ from pyasic.errors import APIError from pyasic.miners.data import DataFunction, DataLocations, DataOptions, RPCAPICommand from pyasic.miners.device.firmware import StockFirmware from pyasic.rpc.btminer import BTMinerRPCAPI +from pyasic.data.pools import PoolMetrics, PoolUrl BTMINER_DATA_LOC = DataLocations( **{ @@ -109,6 +110,10 @@ BTMINER_DATA_LOC = DataLocations( "_get_uptime", [RPCAPICommand("rpc_summary", "summary")], ), + str(DataOptions.POOLS): DataFunction( + "_get_pools", + [RPCAPICommand("rpc_pools", "pools")], + ) } ) @@ -655,6 +660,36 @@ class BTMiner(StockFirmware): except LookupError: pass + async def _get_pools(self, rpc_pools: dict = None) -> List[PoolMetrics]: + if rpc_pools is None: + try: + rpc_pools = await self.rpc.pools() + except APIError: + pass + + pools_data = [] + if rpc_pools is not None: + try: + pools = rpc_pools.get("POOLS", []) + for pool_info in pools: + url = pool_info.get("URL") + pool_url = PoolUrl.from_str(url) if url else None + pool_data = PoolMetrics( + accepted=pool_info.get("Accepted"), + rejected=pool_info.get("Rejected"), + get_failures=pool_info.get("Get Failures"), + remote_failures=pool_info.get("Remote Failures"), + active=pool_info.get("Stratum Active"), + alive=pool_info.get("Status") == "Alive", + url=pool_url, + user=pool_info.get("User"), + index=pool_info.get("POOL"), + ) + pools_data.append(pool_data) + except LookupError: + pass + return pools_data + async def upgrade_firmware(self, file: Path): """ Upgrade the firmware of the Whatsminer device.