From ed0d9f73e4fc6c7e53540053f3e7d4139d047ad6 Mon Sep 17 00:00:00 2001 From: ytemiloluwa Date: Thu, 19 Sep 2024 09:05:29 +0100 Subject: [PATCH] backends: add _get_pools method to bfgminer --- pyasic/miners/backends/bfgminer.py | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/pyasic/miners/backends/bfgminer.py b/pyasic/miners/backends/bfgminer.py index c3855d57..ff6d31b6 100644 --- a/pyasic/miners/backends/bfgminer.py +++ b/pyasic/miners/backends/bfgminer.py @@ -22,6 +22,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.bfgminer import BFGMinerRPCAPI +from pyasic.data.pools import PoolMetrics, PoolUrl BFGMINER_DATA_LOC = DataLocations( **{ @@ -49,6 +50,10 @@ BFGMINER_DATA_LOC = DataLocations( "_get_fans", [RPCAPICommand("rpc_stats", "stats")], ), + str(DataOptions.POOLS): DataFunction( + "_get_pools", + [RPCAPICommand("rpc_pools", "pools")], + ), } ) @@ -207,6 +212,36 @@ class BFGMiner(StockFirmware): return fans + 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 _get_expected_hashrate( self, rpc_stats: dict = None ) -> Optional[AlgoHashRate]: