reformatted file structure and reformatted for phones, as well as fixed web sockets for remote devices

This commit is contained in:
UpstreamData
2022-03-08 11:39:10 -07:00
parent 7ba8044564
commit 43834203a8
20 changed files with 430 additions and 324 deletions

View File

@@ -0,0 +1,24 @@
from fastapi import Request, APIRouter
from fastapi.responses import RedirectResponse
from tools.web_monitor.template import templates
from tools.web_monitor.func import get_current_miner_list
from .ws import router as ws_router
router = APIRouter()
router.include_router(ws_router)
@router.get("/")
def index(request: Request):
return RedirectResponse(request.url_for('dashboard'))
@router.get("/dashboard")
def dashboard(request: Request):
print()
return templates.TemplateResponse("index.html", {
"request": request,
"cur_miners": get_current_miner_list()
})

View File

@@ -0,0 +1,43 @@
import asyncio
from tools.web_monitor.miner_factory import miner_factory
from tools.web_monitor.settings.func import get_current_settings
async def get_miner_data_dashboard(miner_ip):
try:
settings = get_current_settings()
miner_identify_timeout = settings["miner_identify_timeout"]
miner_data_timeout = settings["miner_data_timeout"]
miner_ip = await asyncio.wait_for(
miner_factory.get_miner(miner_ip),
miner_identify_timeout
)
miner_summary = await asyncio.wait_for(
miner_ip.api.summary(),
miner_data_timeout
)
if 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].keys():
hashrate = format(
round(miner_summary['SUMMARY'][0]['GHS av'] / 1000, 2),
".2f")
else:
hashrate = 0
else:
hashrate = 0
return {"ip": str(miner_ip.ip), "hashrate": hashrate}
except asyncio.exceptions.TimeoutError:
return {"ip": miner_ip, "error": "The miner is not responding."}
except KeyError:
return {"ip": miner_ip,
"error": "The miner returned unusable/unsupported data."}

View File

@@ -0,0 +1,37 @@
import asyncio
import datetime
import websockets.exceptions
from fastapi import WebSocket, WebSocketDisconnect, APIRouter
from tools.web_monitor.func import get_current_miner_list
from tools.web_monitor.settings.func import get_current_settings
from tools.web_monitor.dashboard.func import get_miner_data_dashboard
router = APIRouter()
@router.websocket("/dashboard/ws")
async def dashboard_websocket(websocket: WebSocket):
await websocket.accept()
graph_sleep_time = get_current_settings()["graph_data_sleep_time"]
try:
while True:
miners = get_current_miner_list()
all_miner_data = []
data_gen = asyncio.as_completed(
[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})
await asyncio.sleep(graph_sleep_time)
except WebSocketDisconnect:
print("Websocket disconnected.")
pass
except websockets.exceptions.ConnectionClosedOK:
pass