From e10f32ae3d289ce83e2f4edcb1165b31c92f4138 Mon Sep 17 00:00:00 2001 From: UpstreamData <75442874+UpstreamData@users.noreply.github.com> Date: Mon, 24 Jul 2023 21:05:07 -0600 Subject: [PATCH] feature: speed up getting older antminer types with concurrent web and api requests. --- pyasic/miners/miner_factory.py | 35 +++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/pyasic/miners/miner_factory.py b/pyasic/miners/miner_factory.py index 0aac9c00..7b0deb57 100644 --- a/pyasic/miners/miner_factory.py +++ b/pyasic/miners/miner_factory.py @@ -691,6 +691,28 @@ class MinerFactory: return UnknownMiner(str(ip)) async def get_miner_model_antminer(self, ip: str): + tasks = [ + asyncio.create_task(self._get_model_antminer_web(ip)), + asyncio.create_task(self._get_model_antminer_sock(ip)), + ] + + return await concurrent_get_first_result(tasks, lambda x: x is not None) + + async def _get_model_antminer_web(self, ip: str): + # last resort, this is slow + auth = httpx.DigestAuth("root", "root") + web_json_data = await self.send_web_command( + ip, "/cgi-bin/get_system_info.cgi", auth=auth + ) + + try: + miner_model = web_json_data["minertype"] + + return miner_model + except (TypeError, LookupError): + pass + + async def _get_model_antminer_sock(self, ip: str): sock_json_data = await self.send_api_command(ip, "version") try: miner_model = sock_json_data["VERSION"][0]["Type"] @@ -715,19 +737,6 @@ class MinerFactory: except (TypeError, LookupError): pass - # last resort, this is slow - auth = httpx.DigestAuth("root", "root") - web_json_data = await self.send_web_command( - ip, "/cgi-bin/get_system_info.cgi", auth=auth - ) - - try: - miner_model = web_json_data["minertype"] - - return miner_model - except (TypeError, LookupError): - pass - async def get_miner_model_goldshell(self, ip: str): json_data = await self.send_web_command(ip, "/mcb/status")