fixed some bugs with scanning being too fast to get data and killing the tasks

This commit is contained in:
UpstreamData
2022-05-18 12:13:20 -06:00
parent 85b282740a
commit 7f7964526c
3 changed files with 15 additions and 7 deletions

View File

@@ -1,6 +1,6 @@
get_version_retries = 3 get_version_retries = 2
ping_retries = 3 ping_retries = 2
ping_timeout = 5 # Seconds ping_timeout = 3 # Seconds
scan_threads = 300 scan_threads = 300
config_threads = 300 config_threads = 300
reboot_threads = 300 reboot_threads = 300

View File

@@ -54,6 +54,7 @@ async def _scan_miners(network: MinerNetwork):
# asynchronously get each miner scanned by the generator # asynchronously get each miner scanned by the generator
miners = [] miners = []
data_tasks = []
async for miner in scan_generator: async for miner in scan_generator:
# if the generator yields a miner, add it to our list # if the generator yields a miner, add it to our list
if miner: if miner:
@@ -62,17 +63,24 @@ async def _scan_miners(network: MinerNetwork):
# sort the list of miners by IP # sort the list of miners by IP
miners.sort() miners.sort()
# generate default data for the table manager
_data = {} _data = {}
for key in DEFAULT_DATA: for key in DEFAULT_DATA:
_data[key] = "" _data[key] = ""
_data["IP"] = str(miner.ip) _data["IP"] = str(miner.ip)
TableManager().update_item(_data) TableManager().update_item(_data)
asyncio.create_task(_get_miner_data(miner)) # create a task to get data, and save it to ensure it finishes
data_tasks.append(asyncio.create_task(_get_miner_data(miner)))
# update progress bar to indicate scanned miners
progress_bar_len += 1 progress_bar_len += 1
await update_prog_bar(progress_bar_len) await update_prog_bar(progress_bar_len)
# make sure all getting data has finished
await asyncio.gather(*data_tasks)
# finish updating progress bar
progress_bar_len += network_size - len(miners) progress_bar_len += network_size - len(miners)
await update_prog_bar(progress_bar_len) await update_prog_bar(progress_bar_len)

View File

@@ -69,12 +69,12 @@ class TableManager(metaclass=Singleton):
if not data or data == {} or not data.get("IP"): if not data or data == {} or not data.get("IP"):
return return
if not data.get("Light"):
data["Light"] = False
if not data["IP"] in self.data.keys(): if not data["IP"] in self.data.keys():
self.data[data["IP"]] = {} self.data[data["IP"]] = {}
if not data.get("Light") and not self.data[data["IP"]].get("Light"):
data["Light"] = False
for key in data.keys(): for key in data.keys():
self.data[data["IP"]][key] = data[key] self.data[data["IP"]][key] = data[key]