changed MinerFactory to a singleton class to ensure clearing its cache is easier and removed creation of independant miner factories for each utility
This commit is contained in:
@@ -37,9 +37,19 @@ from settings import MINER_FACTORY_GET_VERSION_RETRIES as GET_VERSION_RETRIES
|
||||
|
||||
|
||||
class MinerFactory:
|
||||
_instance = None
|
||||
|
||||
def __init__(self):
|
||||
self.miners = {}
|
||||
|
||||
def __new__(cls):
|
||||
if not cls._instance:
|
||||
cls._instance = super(
|
||||
MinerFactory,
|
||||
cls
|
||||
).__new__(cls)
|
||||
return cls._instance
|
||||
|
||||
async def get_miner_generator(self, ips: list):
|
||||
"""
|
||||
Get Miner objects from ip addresses using an async generator.
|
||||
|
||||
@@ -8,7 +8,6 @@ from settings import NETWORK_PING_RETRIES as PING_RETRIES, NETWORK_PING_TIMEOUT
|
||||
class MinerNetwork:
|
||||
def __init__(self, ip_addr: str or None = None, mask: str or int or None = None) -> None:
|
||||
self.network = None
|
||||
self.miner_factory = MinerFactory()
|
||||
self.ip_addr = ip_addr
|
||||
self.connected_miners = {}
|
||||
self.mask = mask
|
||||
@@ -50,6 +49,9 @@ class MinerNetwork:
|
||||
local_network = self.get_network()
|
||||
print(f"Scanning {local_network} for miners...")
|
||||
|
||||
# clear cached miners
|
||||
MinerFactory().clear_cached_miners()
|
||||
|
||||
# create a list of tasks and miner IPs
|
||||
scan_tasks = []
|
||||
miner_ips = []
|
||||
@@ -79,13 +81,10 @@ class MinerNetwork:
|
||||
# create a list of tasks to get miners
|
||||
create_miners_tasks = []
|
||||
|
||||
# clear cached miners
|
||||
self.miner_factory.clear_cached_miners()
|
||||
|
||||
# try to get each miner found
|
||||
for miner_ip in miner_ips:
|
||||
# append to the list of tasks
|
||||
create_miners_tasks.append(self.miner_factory.get_miner(miner_ip))
|
||||
create_miners_tasks.append(MinerFactory().get_miner(miner_ip))
|
||||
|
||||
# get all miners in the list
|
||||
miners = await asyncio.gather(*create_miners_tasks)
|
||||
|
||||
@@ -16,5 +16,5 @@ whatsminer_pwd = "admin"
|
||||
### DEBUG MODE ###
|
||||
# change this to debug = true
|
||||
# to enable debug mode.
|
||||
# debug = false
|
||||
debug = true
|
||||
debug = false
|
||||
# debug = true
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# TODO: Add Logging
|
||||
|
||||
from tools.bad_board_util.miner_factory import miner_factory
|
||||
from tools.bad_board_util.ui import ui
|
||||
|
||||
import asyncio
|
||||
|
||||
@@ -4,7 +4,7 @@ import warnings
|
||||
|
||||
from tools.bad_board_util.func.ui import update_ui_with_data, update_prog_bar, set_progress_bar_len
|
||||
from tools.bad_board_util.layout import window
|
||||
from tools.bad_board_util.miner_factory import miner_factory
|
||||
from miners.miner_factory import MinerFactory
|
||||
|
||||
|
||||
async def scan_network(network):
|
||||
@@ -24,7 +24,7 @@ async def scan_network(network):
|
||||
asyncio.create_task(update_prog_bar(progress_bar_len))
|
||||
progress_bar_len += network_size - len(miners)
|
||||
asyncio.create_task(update_prog_bar(progress_bar_len))
|
||||
get_miner_genenerator = miner_factory.get_miner_generator(miners)
|
||||
get_miner_genenerator = MinerFactory().get_miner_generator(miners)
|
||||
all_miners = []
|
||||
async for found_miner in get_miner_genenerator:
|
||||
all_miners.append(found_miner)
|
||||
@@ -118,7 +118,7 @@ async def scan_and_get_data(network):
|
||||
asyncio.create_task(update_prog_bar(progress_bar_len))
|
||||
progress_bar_len += network_size - len(miners)
|
||||
asyncio.create_task(update_prog_bar(progress_bar_len))
|
||||
get_miner_genenerator = miner_factory.get_miner_generator(miners)
|
||||
get_miner_genenerator = MinerFactory().get_miner_generator(miners)
|
||||
all_miners = []
|
||||
async for found_miner in get_miner_genenerator:
|
||||
all_miners.append(found_miner)
|
||||
@@ -190,7 +190,7 @@ def split_chips(string, number_of_splits):
|
||||
|
||||
|
||||
async def get_formatted_data(ip: ipaddress.ip_address):
|
||||
miner = await miner_factory.get_miner(ip)
|
||||
miner = await MinerFactory().get_miner(ip)
|
||||
model = await miner.get_model()
|
||||
warnings.filterwarnings('ignore')
|
||||
board_data = await miner.get_board_info()
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
"""
|
||||
This file stores the MinerFactory instance used by the BadBoardUtility for use in other files.
|
||||
"""
|
||||
|
||||
from miners.miner_factory import MinerFactory
|
||||
|
||||
miner_factory = MinerFactory()
|
||||
@@ -8,7 +8,7 @@ from API import APIError
|
||||
from tools.cfg_util.cfg_util_sg.func.parse_data import safe_parse_api_data
|
||||
from tools.cfg_util.cfg_util_sg.func.ui import update_ui_with_data, update_prog_bar, set_progress_bar_len
|
||||
from tools.cfg_util.cfg_util_sg.layout import window
|
||||
from tools.cfg_util.cfg_util_sg.miner_factory import miner_factory
|
||||
from miners.miner_factory import MinerFactory
|
||||
from config.bos import bos_config_convert
|
||||
from tools.cfg_util.cfg_util_sg.func.decorators import disable_buttons
|
||||
from settings import CFG_UTIL_CONFIG_THREADS as CONFIG_THREADS, CFG_UTIL_REBOOT_THREADS as REBOOT_THREADS
|
||||
@@ -17,7 +17,7 @@ from settings import CFG_UTIL_CONFIG_THREADS as CONFIG_THREADS, CFG_UTIL_REBOOT_
|
||||
async def import_config(idx):
|
||||
await update_ui_with_data("status", "Importing")
|
||||
logging.debug(f"{window['ip_table'].Values[idx[0]][0]}: Importing config.")
|
||||
miner = await miner_factory.get_miner(ipaddress.ip_address(window["ip_table"].Values[idx[0]][0]))
|
||||
miner = await MinerFactory().get_miner(ipaddress.ip_address(window["ip_table"].Values[idx[0]][0]))
|
||||
await miner.get_config()
|
||||
config = miner.config
|
||||
await update_ui_with_data("config", str(config))
|
||||
@@ -48,7 +48,7 @@ async def scan_network(network):
|
||||
asyncio.create_task(update_prog_bar(progress_bar_len))
|
||||
progress_bar_len += network_size - len(miners)
|
||||
asyncio.create_task(update_prog_bar(progress_bar_len))
|
||||
get_miner_genenerator = miner_factory.get_miner_generator(miners)
|
||||
get_miner_genenerator = MinerFactory().get_miner_generator(miners)
|
||||
all_miners = []
|
||||
async for found_miner in get_miner_genenerator:
|
||||
all_miners.append(found_miner)
|
||||
@@ -67,7 +67,7 @@ async def miner_light(ips: list):
|
||||
|
||||
async def flip_light(ip):
|
||||
ip_list = window['ip_table'].Widget
|
||||
miner = await miner_factory.get_miner(ip)
|
||||
miner = await MinerFactory().get_miner(ip)
|
||||
index = [item[0] for item in window["ip_table"].Values].index(ip)
|
||||
index_tags = ip_list.item(index + 1)['tags']
|
||||
if "light" not in index_tags:
|
||||
@@ -101,7 +101,7 @@ async def send_ssh_command(miner, command: str):
|
||||
|
||||
|
||||
async def send_miners_ssh_commands(ips: list, command: str, ssh_cmd_window):
|
||||
get_miner_genenerator = miner_factory.get_miner_generator(ips)
|
||||
get_miner_genenerator = MinerFactory().get_miner_generator(ips)
|
||||
all_miners = []
|
||||
async for miner in get_miner_genenerator:
|
||||
all_miners.append(miner)
|
||||
@@ -146,7 +146,7 @@ async def reboot_miners(ips: list):
|
||||
await update_ui_with_data("status", "Rebooting")
|
||||
await set_progress_bar_len(2 * len(ips))
|
||||
progress_bar_len = 0
|
||||
get_miner_genenerator = miner_factory.get_miner_generator(ips)
|
||||
get_miner_genenerator = MinerFactory().get_miner_generator(ips)
|
||||
all_miners = []
|
||||
async for miner in get_miner_genenerator:
|
||||
all_miners.append(miner)
|
||||
@@ -180,7 +180,7 @@ async def restart_miners_backend(ips: list):
|
||||
await update_ui_with_data("status", "Restarting Backends")
|
||||
await set_progress_bar_len(2 * len(ips))
|
||||
progress_bar_len = 0
|
||||
get_miner_genenerator = miner_factory.get_miner_generator(ips)
|
||||
get_miner_genenerator = MinerFactory().get_miner_generator(ips)
|
||||
all_miners = []
|
||||
async for miner in get_miner_genenerator:
|
||||
all_miners.append(miner)
|
||||
@@ -215,7 +215,7 @@ async def send_config(ips: list, config):
|
||||
await set_progress_bar_len(2 * len(ips))
|
||||
progress_bar_len = 0
|
||||
asyncio.create_task(update_prog_bar(progress_bar_len))
|
||||
get_miner_genenerator = miner_factory.get_miner_generator(ips)
|
||||
get_miner_genenerator = MinerFactory().get_miner_generator(ips)
|
||||
all_miners = []
|
||||
async for miner in get_miner_genenerator:
|
||||
all_miners.append(miner)
|
||||
@@ -290,6 +290,7 @@ async def scan_and_get_data(network):
|
||||
await update_ui_with_data("ip_table", [])
|
||||
network_size = len(network)
|
||||
miner_generator = network.scan_network_generator()
|
||||
MinerFactory().clear_cached_miners()
|
||||
|
||||
logging.info(f"Scanning network: {str(network)}")
|
||||
|
||||
@@ -309,7 +310,7 @@ async def scan_and_get_data(network):
|
||||
logging.debug(f"Found miners: {miners}")
|
||||
progress_bar_len += network_size - len(miners)
|
||||
asyncio.create_task(update_prog_bar(progress_bar_len))
|
||||
get_miner_genenerator = miner_factory.get_miner_generator(miners)
|
||||
get_miner_genenerator = MinerFactory().get_miner_generator(miners)
|
||||
all_miners = []
|
||||
async for found_miner in get_miner_genenerator:
|
||||
all_miners.append(found_miner)
|
||||
@@ -346,7 +347,7 @@ async def scan_and_get_data(network):
|
||||
|
||||
|
||||
async def get_formatted_data(ip: ipaddress.ip_address):
|
||||
miner = await miner_factory.get_miner(ip)
|
||||
miner = await MinerFactory().get_miner(ip)
|
||||
logging.debug(f"Getting data for miner: {miner.ip}")
|
||||
warnings.filterwarnings('ignore')
|
||||
miner_data = None
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
"""
|
||||
This file stores the MinerFactory instance used by the ConfigUtility for use in other files.
|
||||
"""
|
||||
|
||||
from miners.miner_factory import MinerFactory
|
||||
|
||||
miner_factory = MinerFactory()
|
||||
@@ -1,6 +1,6 @@
|
||||
import asyncio
|
||||
|
||||
from tools.web_monitor.miner_factory import miner_factory
|
||||
from miners.miner_factory import MinerFactory
|
||||
from tools.web_monitor._settings.func import get_current_settings
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ async def get_miner_data_dashboard(miner_ip):
|
||||
miner_data_timeout = settings["miner_data_timeout"]
|
||||
|
||||
miner_ip = await asyncio.wait_for(
|
||||
miner_factory.get_miner(miner_ip),
|
||||
MinerFactory().get_miner(miner_ip),
|
||||
miner_identify_timeout
|
||||
)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import datetime
|
||||
import websockets.exceptions
|
||||
from fastapi import WebSocket, WebSocketDisconnect, APIRouter
|
||||
|
||||
from tools.web_monitor.miner_factory import miner_factory
|
||||
from miners.miner_factory import MinerFactory
|
||||
from tools.web_monitor._settings.func import get_current_settings
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ async def miner_websocket(websocket: WebSocket, miner_ip):
|
||||
while True:
|
||||
try:
|
||||
cur_miner = await asyncio.wait_for(
|
||||
miner_factory.get_miner(str(miner_ip)),
|
||||
MinerFactory().get_miner(str(miner_ip)),
|
||||
miner_identify_timeout
|
||||
)
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
"""
|
||||
This file stores the MinerFactory instance used by the WebMonitor for use in other files.
|
||||
"""
|
||||
|
||||
from miners.miner_factory import MinerFactory
|
||||
|
||||
miner_factory = MinerFactory()
|
||||
@@ -4,7 +4,7 @@ from fastapi import WebSocket
|
||||
|
||||
from network import MinerNetwork
|
||||
from tools.web_monitor.func import get_current_miner_list
|
||||
from tools.web_monitor.miner_factory import miner_factory
|
||||
from miners.miner_factory import MinerFactory
|
||||
|
||||
|
||||
async def do_websocket_scan(websocket: WebSocket, network_ip: str):
|
||||
@@ -21,7 +21,7 @@ async def do_websocket_scan(websocket: WebSocket, network_ip: str):
|
||||
if miner_ip and str(miner_ip) not in cur_miners:
|
||||
miners.append(miner_ip)
|
||||
|
||||
get_miner_generator = miner_factory.get_miner_generator(miners)
|
||||
get_miner_generator = MinerFactory().get_miner_generator(miners)
|
||||
all_miners = []
|
||||
async for found_miner in get_miner_generator:
|
||||
all_miners.append(
|
||||
|
||||
Reference in New Issue
Block a user