reformatted all files to use the Black formatting style
This commit is contained in:
@@ -11,19 +11,22 @@ router = APIRouter()
|
||||
|
||||
@router.route("/", methods=["GET", "POST"])
|
||||
async def settings(request: Request):
|
||||
return templates.TemplateResponse("settings.html", {
|
||||
"request": request,
|
||||
"cur_miners": get_current_miner_list(),
|
||||
"settings": get_current_settings()
|
||||
})
|
||||
return templates.TemplateResponse(
|
||||
"settings.html",
|
||||
{
|
||||
"request": request,
|
||||
"cur_miners": get_current_miner_list(),
|
||||
"settings": get_current_settings(),
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@router.post("/update")
|
||||
async def update_settings_page(request: Request):
|
||||
data = await request.form()
|
||||
graph_data_sleep_time = data.get('graph_data_sleep_time')
|
||||
miner_data_timeout = data.get('miner_data_timeout')
|
||||
miner_identify_timeout = data.get('miner_identify_timeout')
|
||||
graph_data_sleep_time = data.get("graph_data_sleep_time")
|
||||
miner_data_timeout = data.get("miner_data_timeout")
|
||||
miner_identify_timeout = data.get("miner_identify_timeout")
|
||||
new_settings = {
|
||||
"graph_data_sleep_time": int(graph_data_sleep_time),
|
||||
"miner_data_timeout": int(miner_data_timeout),
|
||||
|
||||
@@ -4,7 +4,9 @@ import os
|
||||
|
||||
def get_current_settings():
|
||||
try:
|
||||
with open(os.path.join(os.getcwd(), "settings/web_settings.toml"), "r") as settings_file:
|
||||
with open(
|
||||
os.path.join(os.getcwd(), "settings/web_settings.toml"), "r"
|
||||
) as settings_file:
|
||||
settings = toml.loads(settings_file.read())
|
||||
except:
|
||||
settings = {
|
||||
@@ -16,5 +18,7 @@ def get_current_settings():
|
||||
|
||||
|
||||
def update_settings(settings):
|
||||
with open(os.path.join(os.getcwd(), "settings/web_settings.toml"), "w") as settings_file:
|
||||
with open(
|
||||
os.path.join(os.getcwd(), "settings/web_settings.toml"), "w"
|
||||
) as settings_file:
|
||||
settings_file.write(toml.dumps(settings))
|
||||
|
||||
@@ -12,8 +12,11 @@ from tools.web_monitor._settings import router as settings_router
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
app.mount("/static", StaticFiles(
|
||||
directory=os.path.join(os.path.dirname(__file__), "static")), name="static")
|
||||
app.mount(
|
||||
"/static",
|
||||
StaticFiles(directory=os.path.join(os.path.dirname(__file__), "static")),
|
||||
name="static",
|
||||
)
|
||||
|
||||
app.include_router(dashboard_router, tags=["dashboard"])
|
||||
app.include_router(miner_router, tags=["miner"], prefix="/miner")
|
||||
|
||||
@@ -12,7 +12,7 @@ router.include_router(ws_router)
|
||||
|
||||
@router.get("/")
|
||||
def index(request: Request):
|
||||
return RedirectResponse(request.url_for('dashboard'))
|
||||
return RedirectResponse(request.url_for("dashboard"))
|
||||
|
||||
|
||||
@router.get("/dashboard")
|
||||
|
||||
@@ -11,23 +11,21 @@ async def get_miner_data_dashboard(miner_ip):
|
||||
miner_data_timeout = settings["miner_data_timeout"]
|
||||
|
||||
miner_ip = await asyncio.wait_for(
|
||||
MinerFactory().get_miner(miner_ip),
|
||||
miner_identify_timeout
|
||||
MinerFactory().get_miner(miner_ip), miner_identify_timeout
|
||||
)
|
||||
|
||||
miner_summary = await asyncio.wait_for(
|
||||
miner_ip.api.summary(),
|
||||
miner_data_timeout
|
||||
miner_ip.api.summary(), miner_data_timeout
|
||||
)
|
||||
if miner_summary:
|
||||
if 'MHS av' in miner_summary['SUMMARY'][0].keys():
|
||||
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].keys():
|
||||
round(miner_summary["SUMMARY"][0]["MHS av"] / 1000000, 2), ".2f"
|
||||
)
|
||||
elif "GHS av" in miner_summary["SUMMARY"][0].keys():
|
||||
hashrate = format(
|
||||
round(miner_summary['SUMMARY'][0]['GHS av'] / 1000, 2),
|
||||
".2f")
|
||||
round(miner_summary["SUMMARY"][0]["GHS av"] / 1000, 2), ".2f"
|
||||
)
|
||||
else:
|
||||
hashrate = 0
|
||||
else:
|
||||
@@ -39,5 +37,7 @@ async def get_miner_data_dashboard(miner_ip):
|
||||
return {"ip": miner_ip, "error": "The miner is not responding."}
|
||||
|
||||
except KeyError:
|
||||
return {"ip": miner_ip,
|
||||
"error": "The miner returned unusable/unsupported data."}
|
||||
return {
|
||||
"ip": miner_ip,
|
||||
"error": "The miner returned unusable/unsupported data.",
|
||||
}
|
||||
|
||||
@@ -21,14 +21,18 @@ async def dashboard_websocket(websocket: WebSocket):
|
||||
miners = get_current_miner_list()
|
||||
all_miner_data = []
|
||||
data_gen = asyncio.as_completed(
|
||||
[get_miner_data_dashboard(miner_ip) for miner_ip in miners])
|
||||
[get_miner_data_dashboard(miner_ip) for miner_ip in miners]
|
||||
)
|
||||
for all_data in data_gen:
|
||||
data_point = await all_data
|
||||
all_miner_data.append(data_point)
|
||||
all_miner_data.sort(key=lambda x: x["ip"])
|
||||
await websocket.send_json(
|
||||
{"datetime": datetime.datetime.now().isoformat(),
|
||||
"miners": all_miner_data})
|
||||
{
|
||||
"datetime": datetime.datetime.now().isoformat(),
|
||||
"miners": all_miner_data,
|
||||
}
|
||||
)
|
||||
await asyncio.sleep(graph_sleep_time)
|
||||
except WebSocketDisconnect:
|
||||
print("Websocket disconnected.")
|
||||
|
||||
@@ -16,8 +16,7 @@ def miner(_request: Request, _miner_ip):
|
||||
|
||||
@router.get("/{miner_ip}")
|
||||
def get_miner(request: Request, miner_ip):
|
||||
return templates.TemplateResponse("miner.html", {
|
||||
"request": request,
|
||||
"cur_miners": get_current_miner_list(),
|
||||
"miner": miner_ip
|
||||
})
|
||||
return templates.TemplateResponse(
|
||||
"miner.html",
|
||||
{"request": request, "cur_miners": get_current_miner_list(), "miner": miner_ip},
|
||||
)
|
||||
|
||||
@@ -13,4 +13,4 @@ def get_miner(request: Request, miner_ip):
|
||||
for miner_ip in miners:
|
||||
file.write(miner_ip + "\n")
|
||||
|
||||
return RedirectResponse(request.url_for('dashboard'))
|
||||
return RedirectResponse(request.url_for("dashboard"))
|
||||
|
||||
@@ -22,13 +22,14 @@ async def miner_websocket(websocket: WebSocket, miner_ip):
|
||||
while True:
|
||||
try:
|
||||
cur_miner = await asyncio.wait_for(
|
||||
MinerFactory().get_miner(str(miner_ip)),
|
||||
miner_identify_timeout
|
||||
MinerFactory().get_miner(str(miner_ip)), miner_identify_timeout
|
||||
)
|
||||
|
||||
data = await asyncio.wait_for(
|
||||
cur_miner.api.multicommand("summary", "fans", "stats", "devs", "temps"),
|
||||
miner_data_timeout
|
||||
cur_miner.api.multicommand(
|
||||
"summary", "fans", "stats", "devs", "temps"
|
||||
),
|
||||
miner_data_timeout,
|
||||
)
|
||||
miner_model = await cur_miner.get_model()
|
||||
|
||||
@@ -42,7 +43,8 @@ async def miner_websocket(websocket: WebSocket, miner_ip):
|
||||
for item in ["Fan Speed In", "Fan Speed Out"]:
|
||||
if item in miner_summary["SUMMARY"][0].keys():
|
||||
miner_fans["FANS"].append(
|
||||
{"RPM": miner_summary["SUMMARY"][0][item]})
|
||||
{"RPM": miner_summary["SUMMARY"][0][item]}
|
||||
)
|
||||
|
||||
if "fans" in data.keys():
|
||||
miner_fans = data["fans"][0]
|
||||
@@ -50,30 +52,52 @@ async def miner_websocket(websocket: WebSocket, miner_ip):
|
||||
miner_temp_list = []
|
||||
if "temps" in data.keys():
|
||||
miner_temps = data["temps"][0]
|
||||
for board in miner_temps['TEMPS']:
|
||||
for board in miner_temps["TEMPS"]:
|
||||
if board["Chip"] is not None and not board["Chip"] == 0.0:
|
||||
miner_temp_list.append(board["Chip"])
|
||||
|
||||
if "devs" in data.keys() and not len(miner_temp_list) > 0:
|
||||
if not data["devs"][0].get('DEVS') == []:
|
||||
if "Chip Temp Avg" in data["devs"][0]['DEVS'][0].keys():
|
||||
for board in data["devs"][0]['DEVS']:
|
||||
if board['Chip Temp Avg'] is not None and not board['Chip Temp Avg'] == 0.0:
|
||||
miner_temp_list.append(board['Chip Temp Avg'])
|
||||
if not data["devs"][0].get("DEVS") == []:
|
||||
if "Chip Temp Avg" in data["devs"][0]["DEVS"][0].keys():
|
||||
for board in data["devs"][0]["DEVS"]:
|
||||
if (
|
||||
board["Chip Temp Avg"] is not None
|
||||
and not board["Chip Temp Avg"] == 0.0
|
||||
):
|
||||
miner_temp_list.append(board["Chip Temp Avg"])
|
||||
|
||||
if "stats" in data.keys() and not len(miner_temp_list) > 0:
|
||||
if not data["stats"][0]['STATS'] == []:
|
||||
if not data["stats"][0]["STATS"] == []:
|
||||
for temp in ["temp2", "temp1", "temp3"]:
|
||||
if temp in data["stats"][0]['STATS'][1].keys():
|
||||
if data["stats"][0]['STATS'][1][temp] is not None and not data["stats"][0]['STATS'][1][temp] == 0.0:
|
||||
miner_temp_list.append(data["stats"][0]['STATS'][1][temp])
|
||||
data["stats"][0]['STATS'][0].keys()
|
||||
if any("MM ID" in string for string in
|
||||
data["stats"][0]['STATS'][0].keys()):
|
||||
if temp in data["stats"][0]["STATS"][1].keys():
|
||||
if (
|
||||
data["stats"][0]["STATS"][1][temp] is not None
|
||||
and not data["stats"][0]["STATS"][1][temp] == 0.0
|
||||
):
|
||||
miner_temp_list.append(
|
||||
data["stats"][0]["STATS"][1][temp]
|
||||
)
|
||||
data["stats"][0]["STATS"][0].keys()
|
||||
if any(
|
||||
"MM ID" in string
|
||||
for string in data["stats"][0]["STATS"][0].keys()
|
||||
):
|
||||
temp_all = []
|
||||
for key in [string for string in data["stats"][0]['STATS'][0].keys() if "MM ID" in string]:
|
||||
for value in [string for string in data["stats"][0]['STATS'][0][key].split(" ") if "TMax" in string]:
|
||||
temp_all.append(int(value.split("[")[1].replace("]", "")))
|
||||
for key in [
|
||||
string
|
||||
for string in data["stats"][0]["STATS"][0].keys()
|
||||
if "MM ID" in string
|
||||
]:
|
||||
for value in [
|
||||
string
|
||||
for string in data["stats"][0]["STATS"][0][key].split(
|
||||
" "
|
||||
)
|
||||
if "TMax" in string
|
||||
]:
|
||||
temp_all.append(
|
||||
int(value.split("[")[1].replace("]", ""))
|
||||
)
|
||||
miner_temp_list.append(round(sum(temp_all) / len(temp_all)))
|
||||
|
||||
if "stats" in data.keys() and not miner_fans:
|
||||
@@ -82,19 +106,26 @@ async def miner_websocket(websocket: WebSocket, miner_ip):
|
||||
for item in ["fan1", "fan2", "fan3", "fan4"]:
|
||||
if item in miner_stats["STATS"][1].keys():
|
||||
miner_fans["FANS"].append(
|
||||
{"RPM": miner_stats["STATS"][1][item]})
|
||||
{"RPM": miner_stats["STATS"][1][item]}
|
||||
)
|
||||
|
||||
if miner_summary:
|
||||
if 'MHS av' in miner_summary['SUMMARY'][0].keys():
|
||||
hashrate = float(format(
|
||||
round(
|
||||
miner_summary['SUMMARY'][0]['MHS av'] / 1000000,
|
||||
2), ".2f"))
|
||||
elif 'GHS av' in miner_summary['SUMMARY'][0].keys():
|
||||
hashrate = float(format(
|
||||
round(miner_summary['SUMMARY'][0]['GHS av'] / 1000,
|
||||
2),
|
||||
".2f"))
|
||||
if "MHS av" in miner_summary["SUMMARY"][0].keys():
|
||||
hashrate = float(
|
||||
format(
|
||||
round(
|
||||
miner_summary["SUMMARY"][0]["MHS av"] / 1000000, 2
|
||||
),
|
||||
".2f",
|
||||
)
|
||||
)
|
||||
elif "GHS av" in miner_summary["SUMMARY"][0].keys():
|
||||
hashrate = float(
|
||||
format(
|
||||
round(miner_summary["SUMMARY"][0]["GHS av"] / 1000, 2),
|
||||
".2f",
|
||||
)
|
||||
)
|
||||
else:
|
||||
hashrate = 0
|
||||
else:
|
||||
@@ -111,24 +142,25 @@ async def miner_websocket(websocket: WebSocket, miner_ip):
|
||||
if len(miner_temp_list) == 0:
|
||||
miner_temps_list = [0]
|
||||
|
||||
data = {"hashrate": hashrate,
|
||||
"fans": fan_speeds,
|
||||
"temp": round(sum(miner_temp_list)/len(miner_temp_list), 2),
|
||||
"datetime": datetime.datetime.now().isoformat(),
|
||||
"model": miner_model}
|
||||
data = {
|
||||
"hashrate": hashrate,
|
||||
"fans": fan_speeds,
|
||||
"temp": round(sum(miner_temp_list) / len(miner_temp_list), 2),
|
||||
"datetime": datetime.datetime.now().isoformat(),
|
||||
"model": miner_model,
|
||||
}
|
||||
print(data)
|
||||
await websocket.send_json(data)
|
||||
await asyncio.sleep(settings["graph_data_sleep_time"])
|
||||
except asyncio.exceptions.TimeoutError:
|
||||
data = {"error": "The miner is not responding."}
|
||||
await websocket.send_json(data)
|
||||
await asyncio.sleep(.5)
|
||||
await asyncio.sleep(0.5)
|
||||
except KeyError as e:
|
||||
print(e)
|
||||
data = {
|
||||
"error": "The miner returned unusable/unsupported data."}
|
||||
data = {"error": "The miner returned unusable/unsupported data."}
|
||||
await websocket.send_json(data)
|
||||
await asyncio.sleep(.5)
|
||||
await asyncio.sleep(0.5)
|
||||
except WebSocketDisconnect:
|
||||
print("Websocket disconnected.")
|
||||
except websockets.exceptions.ConnectionClosedOK:
|
||||
|
||||
@@ -11,10 +11,9 @@ router.include_router(ws_router)
|
||||
|
||||
@router.get("/")
|
||||
def scan(request: Request):
|
||||
return templates.TemplateResponse("scan.html", {
|
||||
"request": request,
|
||||
"cur_miners": get_current_miner_list()
|
||||
})
|
||||
return templates.TemplateResponse(
|
||||
"scan.html", {"request": request, "cur_miners": get_current_miner_list()}
|
||||
)
|
||||
|
||||
|
||||
@router.post("/add_miners")
|
||||
|
||||
@@ -25,12 +25,14 @@ async def do_websocket_scan(websocket: WebSocket, network_ip: str):
|
||||
all_miners = []
|
||||
async for found_miner in get_miner_generator:
|
||||
all_miners.append(
|
||||
{"ip": found_miner.ip, "model": await found_miner.get_model()})
|
||||
{"ip": found_miner.ip, "model": await found_miner.get_model()}
|
||||
)
|
||||
all_miners.sort(key=lambda x: x["ip"])
|
||||
send_miners = []
|
||||
for miner_ip in all_miners:
|
||||
send_miners.append(
|
||||
{"ip": str(miner_ip["ip"]), "model": miner_ip["model"]})
|
||||
{"ip": str(miner_ip["ip"]), "model": miner_ip["model"]}
|
||||
)
|
||||
await websocket.send_json(send_miners)
|
||||
await websocket.send_text("Done")
|
||||
except asyncio.CancelledError:
|
||||
|
||||
@@ -26,8 +26,7 @@ async def websocket_scan(websocket: WebSocket):
|
||||
cur_task = None
|
||||
await websocket.send_text("Cancelled")
|
||||
else:
|
||||
cur_task = asyncio.create_task(
|
||||
do_websocket_scan(websocket, ws_data))
|
||||
cur_task = asyncio.create_task(do_websocket_scan(websocket, ws_data))
|
||||
if cur_task and cur_task.done():
|
||||
cur_task = None
|
||||
except WebSocketDisconnect:
|
||||
|
||||
@@ -3,4 +3,5 @@ from fastapi.templating import Jinja2Templates
|
||||
|
||||
|
||||
templates = Jinja2Templates(
|
||||
directory=os.path.join(os.path.dirname(__file__), "templates"))
|
||||
directory=os.path.join(os.path.dirname(__file__), "templates")
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user