diff --git a/tools/web_monitor/app.py b/tools/web_monitor/app.py index f3f82a8b..5a0ee65b 100644 --- a/tools/web_monitor/app.py +++ b/tools/web_monitor/app.py @@ -43,18 +43,29 @@ async def miner_websocket(websocket: WebSocket, miner_ip): await websocket.accept() try: while True: - miner = await miner_factory.get_miner(str(miner_ip)) - miner_summary = await miner.api.summary() - print(miner_summary) - if 'MHS av' in miner_summary['SUMMARY'][0].keys(): - hashrate = format(round(miner_summary['SUMMARY'][0]['MHS av']/1000000, 2), ".2f") - elif 'GHS av' in miner_summary['summary'][0]['SUMMARY'][0].keys(): - hashrate = format(round(miner_summary['SUMMARY'][0]['GHS av']/1000, 2), ".2f") - else: - hashrate = 0 - data = {"hashrate": hashrate, "datetime": datetime.datetime.now().isoformat()} - await websocket.send_json(data) - await asyncio.sleep(5) + try: + miner = await asyncio.wait_for(miner_factory.get_miner(str(miner_ip)), 5) + miner_summary = await asyncio.wait_for(miner.api.summary(), 5) + if 'MHS av' in miner_summary['SUMMARY'][0].keys(): + hashrate = format( + round(miner_summary['SUMMARY'][0]['MHS av'] / 1000000, + 2), ".2f") + elif 'GHS av' in miner_summary['summary'][0]['SUMMARY'][0].keys(): + hashrate = format( + round(miner_summary['SUMMARY'][0]['GHS av'] / 1000, 2), + ".2f") + else: + hashrate = 0 + data = {"hashrate": hashrate, + "datetime": datetime.datetime.now().isoformat()} + await websocket.send_json(data) + await asyncio.sleep(5) + except asyncio.exceptions.TimeoutError: + data = {"error": "The miner is not responding."} + await websocket.send_json(data) + except KeyError: + data = {"error": "The miner returned incorrect data."} + await websocket.send_json(data) except WebSocketDisconnect: print("Websocket disconnected.") pass diff --git a/tools/web_monitor/templates/miner.html b/tools/web_monitor/templates/miner.html index f90ec811..8c515f18 100644 --- a/tools/web_monitor/templates/miner.html +++ b/tools/web_monitor/templates/miner.html @@ -2,8 +2,25 @@ {% block content %} -