diff --git a/tools/web_testbench/__init__.py b/tools/web_testbench/__init__.py index d7b5998a..1fbb7eff 100644 --- a/tools/web_testbench/__init__.py +++ b/tools/web_testbench/__init__.py @@ -7,7 +7,7 @@ from network.net_range import MinerNetworkRange from miners.miner_factory import MinerFactory from miners.antminer.S9.bosminer import BOSMinerS9 -miner_network = MinerNetworkRange("192.168.1.1-192.168.1.38") +miner_network = MinerNetworkRange("192.168.1.10-192.168.1.33") REFERRAL_FILE_S9 = os.path.join(os.path.dirname(__file__), "files", "referral.ipk") UPDATE_FILE_S9 = os.path.join(os.path.dirname(__file__), "files", "update.tar") @@ -15,17 +15,10 @@ CONFIG_FILE = os.path.join(os.path.dirname(__file__), "files", "config.toml") # static states -( - START, - UNLOCK, - INSTALL, - UPDATE, - REFERRAL, - DONE -) = range(6) +(START, UNLOCK, INSTALL, UPDATE, REFERRAL, DONE) = range(6) -class testbenchMiner(): +class testbenchMiner: def __init__(self, host: ip_address): self.host = host self.state = START @@ -66,7 +59,8 @@ class testbenchMiner(): proc = await asyncio.create_subprocess_shell( f'{os.path.join(os.path.dirname(__file__), "files", "asicseer_installer.exe")} -p -f {str(self.host)} root', stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE) + stderr=asyncio.subprocess.PIPE, + ) stdout, stderr = await proc.communicate() if str(stdout).find("webUI") != -1: return False @@ -76,11 +70,12 @@ class testbenchMiner(): proc = await asyncio.create_subprocess_shell( f'{os.path.join(os.path.dirname(__file__), "files", "bos-toolbox", "bos-toolbox.bat")} install {str(self.host)} --no-keep-pools --psu-power-limit 900 --no-nand-backup --feeds-url file:./feeds/', stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE) + stderr=asyncio.subprocess.PIPE, + ) # get stdout of the install while True: - stdout = await proc.stderr.readuntil(b'\r') - if stdout == b'': + stdout = await proc.stderr.readuntil(b"\r") + if stdout == b"": break await proc.wait() while not await ping_miner(self.host): @@ -103,10 +98,12 @@ class testbenchMiner(): miner = await MinerFactory().get_miner(self.host) if os.path.exists(REFERRAL_FILE_S9): try: - await miner.send_file(REFERRAL_FILE_S9, '/tmp/referral.ipk') - await miner.send_file(CONFIG_FILE, '/etc/bosminer.toml') + await miner.send_file(REFERRAL_FILE_S9, "/tmp/referral.ipk") + await miner.send_file(CONFIG_FILE, "/etc/bosminer.toml") - await miner.send_ssh_command('opkg install /tmp/referral.ipk && /etc/init.d/bosminer restart') + await miner.send_ssh_command( + "opkg install /tmp/referral.ipk && /etc/init.d/bosminer restart" + ) except: self.state = START return @@ -124,16 +121,20 @@ class testbenchMiner(): try: all_data = await miner.api.multicommand("devs", "temps", "fans") - devs_raw = all_data['devs'][0] - temps_raw = all_data['temps'][0] - fans_raw = all_data['fans'][0] + devs_raw = all_data["devs"][0] + temps_raw = all_data["temps"][0] + fans_raw = all_data["fans"][0] # parse temperature data temps_data = {} - for board in range(len(temps_raw['TEMPS'])): + for board in range(len(temps_raw["TEMPS"])): temps_data[f"board_{temps_raw['TEMPS'][board]['ID']}"] = {} - temps_data[f"board_{temps_raw['TEMPS'][board]['ID']}"]["Board"] = temps_raw['TEMPS'][board]['Board'] - temps_data[f"board_{temps_raw['TEMPS'][board]['ID']}"]["Chip"] = temps_raw['TEMPS'][board]['Chip'] + temps_data[f"board_{temps_raw['TEMPS'][board]['ID']}"][ + "Board" + ] = temps_raw["TEMPS"][board]["Board"] + temps_data[f"board_{temps_raw['TEMPS'][board]['ID']}"][ + "Chip" + ] = temps_raw["TEMPS"][board]["Chip"] # parse individual board and chip temperature data for board in temps_data.keys(): @@ -144,25 +145,27 @@ class testbenchMiner(): # parse hashrate data hr_data = {} - for board in range(len(devs_raw['DEVS'])): + for board in range(len(devs_raw["DEVS"])): hr_data[f"board_{devs_raw['DEVS'][board]['ID']}"] = {} hr_data[f"board_{devs_raw['DEVS'][board]['ID']}"]["HR"] = round( - devs_raw['DEVS'][board]['MHS 5s'] / 1000000, - 2) + devs_raw["DEVS"][board]["MHS 5s"] / 1000000, 2 + ) # parse fan data fans_data = {} - for fan in range(len(fans_raw['FANS'])): + for fan in range(len(fans_raw["FANS"])): fans_data[f"fan_{fans_raw['FANS'][fan]['ID']}"] = {} - fans_data[f"fan_{fans_raw['FANS'][fan]['ID']}"]['RPM'] = fans_raw['FANS'][fan]['RPM'] + fans_data[f"fan_{fans_raw['FANS'][fan]['ID']}"]["RPM"] = fans_raw[ + "FANS" + ][fan]["RPM"] # set the miner data miner_data = { - 'IP': self.host, + "IP": self.host, "Light": "show", - 'Fans': fans_data, - 'HR': hr_data, - 'Temps': temps_data + "Fans": fans_data, + "HR": hr_data, + "Temps": temps_data, } # return stats diff --git a/tools/web_testbench/templates/index.html b/tools/web_testbench/templates/index.html index 2e750c76..592e63ba 100644 --- a/tools/web_testbench/templates/index.html +++ b/tools/web_testbench/templates/index.html @@ -207,6 +207,7 @@ var ws = new WebSocket("ws://{{request.url.hostname}}:{% if request.url.port %}{ // create miner graph container var miner_graphs = document.createElement('div'); miner_graphs.id = miner + "-graphs" + miner_graphs.hidden = true // append the rows to the column miner_graphs.append(row_hr) @@ -273,9 +274,11 @@ var ws = new WebSocket("ws://{{request.url.hostname}}:{% if request.url.port %}{ }); } - if (data.hasOwnProperty("HR")) { + else if (data.hasOwnProperty("HR")) { var miner_stdout = document.getElementById(data["IP"] + "-stdout") miner_stdout.hidden = true + var miner_graphs = document.getElementById(data["IP"] + "-graphs") + miner_graphs.hidden = false var hr_graph = Chart.getChart(data["IP"] + "-hr") var temp_graph = Chart.getChart(data["IP"] + "-temp") var fan_1_graph = Chart.getChart(data["IP"] + "-fan-1") @@ -326,9 +329,11 @@ var ws = new WebSocket("ws://{{request.url.hostname}}:{% if request.url.port %}{ var fan_2_data = [{label: "Fan Speed", data: [fan_2_rpm, 6000-fan_2_rpm], backgroundColor: ["rgba(103, 0, 221, 1)", secondary_col_2]}] fan_2_graph.data.datasets = fan_2_data; fan_2_graph.update(); - - } else { + var miner_graphs = document.getElementById(data["IP"] + "-graphs") + console.log(data["IP"] + "-graphs"); + console.log(miner_graphs); + // miner_graphs.hidden = true console.log(data) } }