From a71aa6868a52d6c8ac24a748c3bb44447bdf7c86 Mon Sep 17 00:00:00 2001 From: ytemiloluwa Date: Mon, 19 Aug 2024 07:08:22 +0100 Subject: [PATCH] backends: add _get_pools to marathon --- pyasic/miners/backends/marathon.py | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/pyasic/miners/backends/marathon.py b/pyasic/miners/backends/marathon.py index 0c8b1c5f..d043ece0 100644 --- a/pyasic/miners/backends/marathon.py +++ b/pyasic/miners/backends/marathon.py @@ -8,6 +8,7 @@ from pyasic.miners.data import DataFunction, DataLocations, DataOptions, WebAPIC from pyasic.miners.device.firmware import MaraFirmware from pyasic.misc import merge_dicts from pyasic.web.marathon import MaraWebAPI +from pyasic.data.pools import PoolMetrics, PoolUrl MARA_DATA_LOC = DataLocations( **{ @@ -59,6 +60,10 @@ MARA_DATA_LOC = DataLocations( "_get_uptime", [WebAPICommand("web_brief", "brief")], ), + str(DataOptions.POOLS): DataFunction( + "_get_pools", + [WebAPICommand("web_pools", "pools")], + ), } ) @@ -302,3 +307,33 @@ class MaraMiner(MaraFirmware): return web_miner_config["mode"]["concorde"]["power-target"] except LookupError: pass + + async def _get_pools(self, web_pools: dict = None) -> List[PoolMetrics]: + if web_pools is None: + try: + web_pools = await self.web.pools() + except APIError: + pass + + pools_data = [] + if web_pools is not None: + try: + pools = web_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