From f9cae8017cc47bfbd771daa96fb5974cbd047afd Mon Sep 17 00:00:00 2001 From: UpstreamData Date: Tue, 19 Oct 2021 15:17:42 -0600 Subject: [PATCH] Added current pool username to get data --- API/__init__.py | 8 ++++++-- config_tool.py | 35 +++++++++++++++++------------------ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/API/__init__.py b/API/__init__.py index 96f7839a..0e7a8a38 100644 --- a/API/__init__.py +++ b/API/__init__.py @@ -30,8 +30,12 @@ class BaseMinerAPI: return await self.send_command(command) async def send_command(self, command: str, parameters: str = None) -> dict: - # get reader and writer streams - reader, writer = await asyncio.open_connection(str(self.ip), self.port) + try: + # get reader and writer streams + reader, writer = await asyncio.open_connection(str(self.ip), self.port) + except OSError as e: + if e.winerror == "121": + print("Semaphore Timeout has Expired.") # create the command cmd = {"command": command} diff --git a/config_tool.py b/config_tool.py index 28b20284..587a2aa8 100644 --- a/config_tool.py +++ b/config_tool.py @@ -13,12 +13,12 @@ from miners.miner_factory import MinerFactory from network import MinerNetwork layout = [ - [sg.Text('Network IP: '), sg.InputText(key='miner_network', do_not_clear=True, size=(70, 1)), + [sg.Text('Network IP: '), sg.InputText(key='miner_network', do_not_clear=True, size=(90, 1)), sg.Button('Scan', key='scan'), sg.Text("", key="status")], - [sg.Text('IP List File: '), sg.Input(key="file_iplist", do_not_clear=True, size=(70, 1)), sg.FileBrowse(), + [sg.Text('IP List File: '), sg.Input(key="file_iplist", do_not_clear=True, size=(90, 1)), sg.FileBrowse(), sg.Button('Import', key="import_iplist")], - [sg.Text('Config File: '), sg.Input(key="file_config", do_not_clear=True, size=(70, 1)), sg.FileBrowse(), + [sg.Text('Config File: '), sg.Input(key="file_config", do_not_clear=True, size=(90, 1)), sg.FileBrowse(), sg.Button('Import', key="import_file_config"), sg.Button('Export', key="export_file_config")], [ sg.Column([ @@ -27,8 +27,8 @@ layout = [ [sg.Listbox([], size=(20, 32), key="ip_list", select_mode='extended')] ]), sg.Column([ - [sg.Text("Hashrates: ", pad=(0, 0)), sg.Button('GET', key="get_hashrates")], - [sg.Listbox([], size=(25, 32), key="hr_list")] + [sg.Text("Data: ", pad=(0, 0)), sg.Button('GET', key="get_data")], + [sg.Listbox([], size=(50, 32), key="hr_list")] ]), sg.Column([ [sg.Text("Config"), sg.Button("IMPORT", key="import_config"), sg.Button("CONFIG", key="send_config"), @@ -38,7 +38,7 @@ layout = [ ], ] -window = sg.Window('Test', layout) +window = sg.Window('Upstream Config Util', layout) miner_factory = MinerFactory() @@ -105,10 +105,8 @@ async def import_iplist(file_location): async def send_config(ips: list, config): await update_ui_with_data("status", "Configuring") - config = toml.loads(config) config['format']['generator'] = 'upstream_config_util' config['format']['timestamp'] = int(time.time()) - config = toml.dumps(config) tasks = [] for ip in ips: tasks.append(miner_factory.get_miner(ip)) @@ -142,23 +140,24 @@ async def export_config_file(file_location, config): await update_ui_with_data("status", "") -async def get_hashrates(ip_list: list): - await update_ui_with_data("status", "Getting HR") +async def get_data(ip_list: list): + await update_ui_with_data("status", "Getting Data") ips = [ipaddress.ip_address(ip) for ip in ip_list] ips.sort() - data = await asyncio.gather(*[get_formatted_hashrate(miner) for miner in ips]) + data = await asyncio.gather(*[get_formatted_data(miner) for miner in ips]) window["hr_list"].update(disabled=False) - window["hr_list"].update([item['IP'] + " | " + str(item['TH/s']) + " TH/s" for item in data]) + window["hr_list"].update([item['IP'] + " | " + str(item['TH/s']) + " TH/s | " + item['user'] for item in data]) window["hr_list"].update(disabled=True) await update_ui_with_data("status", "") -async def get_formatted_hashrate(ip: ipaddress.ip_address): +async def get_formatted_data(ip: ipaddress.ip_address): miner = await miner_factory.get_miner(ip) - data = await miner.api.summary() - mh5s = round(data['SUMMARY'][0]['MHS 5s'] / 1000000, 2) - return {'TH/s': mh5s, 'IP': str(miner.ip)} + data = await miner.api.multicommand("summary", "pools") + mh5s = round(data['summary'][0]['SUMMARY'][0]['MHS 5s'] / 1000000, 2) + user = data['pools'][0]['POOLS'][0]['User'] + return {'TH/s': mh5s, 'IP': str(miner.ip), 'user': user} async def generate_config(): @@ -228,8 +227,8 @@ async def ui(): asyncio.create_task(import_config_file(value['file_config'])) if event == "export_file_config": asyncio.create_task(export_config_file(value['file_config'], value["config"])) - if event == "get_hashrates": - asyncio.create_task(get_hashrates(value['ip_list'])) + if event == "get_data": + asyncio.create_task(get_data(value['ip_list'])) if event == "generate_config": asyncio.create_task(generate_config()) if event == "__TIMEOUT__":