add feeds updater to startup process

This commit is contained in:
UpstreamData
2022-04-14 09:37:06 -06:00
parent 7ebfdb3f33
commit 3670a02aec
2 changed files with 44 additions and 31 deletions

View File

@@ -145,12 +145,16 @@ class MinerNetwork:
return await ping_miner(ip) return await ping_miner(ip)
async def ping_miner(ip: ipaddress.ip_address, port=4028) -> None or ipaddress.ip_address: async def ping_miner(
ip: ipaddress.ip_address, port=4028
) -> None or ipaddress.ip_address:
for i in range(PING_RETRIES): for i in range(PING_RETRIES):
connection_fut = asyncio.open_connection(str(ip), port) connection_fut = asyncio.open_connection(str(ip), port)
try: try:
# get the read and write streams from the connection # get the read and write streams from the connection
reader, writer = await asyncio.wait_for(connection_fut, timeout=PING_TIMEOUT) reader, writer = await asyncio.wait_for(
connection_fut, timeout=PING_TIMEOUT
)
# immediately close connection, we know connection happened # immediately close connection, we know connection happened
writer.close() writer.close()
# make sure the writer is closed # make sure the writer is closed

View File

@@ -8,34 +8,35 @@ import os
from fastapi.templating import Jinja2Templates from fastapi.templating import Jinja2Templates
from tools.web_testbench import miner_network from tools.web_testbench import miner_network
from tools.web_testbench.feeds import update_installer_files
app = FastAPI() app = FastAPI()
app.mount("/public", StaticFiles( app.mount(
directory=os.path.join(os.path.dirname(__file__), "public")), name="public") "/public",
StaticFiles(directory=os.path.join(os.path.dirname(__file__), "public")),
name="public",
)
templates = Jinja2Templates( templates = Jinja2Templates(
directory=os.path.join(os.path.dirname(__file__), "templates")) directory=os.path.join(os.path.dirname(__file__), "templates")
)
miner_data = { miner_data = {
'IP': '192.168.1.10', "IP": "192.168.1.10",
'Light': 'show', "Light": "show",
'Fans': { "Fans": {
'fan_0': {'RPM': 4620}, "fan_0": {"RPM": 4620},
'fan_1': {'RPM': 4560}, "fan_1": {"RPM": 4560},
'fan_2': {'RPM': 0}, "fan_2": {"RPM": 0},
'fan_3': {'RPM': 0} "fan_3": {"RPM": 0},
}, },
'HR': { "HR": {"board_6": {"HR": 4.85}, "board_7": {"HR": 0.0}, "board_8": {"HR": 0.81}},
'board_6': {'HR': 4.85}, "Temps": {
'board_7': {'HR': 0.0}, "board_6": {"Board": 85.6875, "Chip": 93.0},
'board_8': {'HR': 0.81} "board_7": {"Board": 0.0, "Chip": 0.0},
"board_8": {"Board": 0.0, "Chip": 0.0},
}, },
'Temps': {
'board_6': {'Board': 85.6875, 'Chip': 93.0},
'board_7': {'Board': 0.0, 'Chip': 0.0},
'board_8': {'Board': 0.0, 'Chip': 0.0}
}
} }
@@ -45,15 +46,14 @@ class ConnectionManager:
def __new__(cls): def __new__(cls):
if not cls._instance: if not cls._instance:
cls._instance = super( cls._instance = super(ConnectionManager, cls).__new__(cls)
ConnectionManager,
cls
).__new__(cls)
return cls._instance return cls._instance
async def connect(self, websocket: WebSocket): async def connect(self, websocket: WebSocket):
await websocket.accept() await websocket.accept()
await websocket.send_json({"miners": [str(miner) for miner in miner_network.hosts()]}) await websocket.send_json(
{"miners": [str(miner) for miner in miner_network.hosts()]}
)
ConnectionManager._connections.append(websocket) ConnectionManager._connections.append(websocket)
def disconnect(self, websocket: WebSocket): def disconnect(self, websocket: WebSocket):
@@ -80,22 +80,31 @@ async def ws(websocket: WebSocket):
ConnectionManager().disconnect(websocket) ConnectionManager().disconnect(websocket)
@app.get("/") @app.get("/")
def dashboard(request: Request): def dashboard(request: Request):
return templates.TemplateResponse("index.html", { return templates.TemplateResponse(
"request": request, "index.html",
}) {
"request": request,
},
)
@app.on_event("startup")
async def update_installer():
await update_installer_files()
@app.on_event("startup") @app.on_event("startup")
def start_monitor(): def start_monitor():
asyncio.create_task(monitor()) asyncio.create_task(monitor())
async def monitor(): async def monitor():
while True: while True:
await ConnectionManager().broadcast_json(miner_data) await ConnectionManager().broadcast_json(miner_data)
await asyncio.sleep(5) await asyncio.sleep(5)
if __name__ == '__main__':
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=80) uvicorn.run("app:app", host="0.0.0.0", port=80)