Files
pyasic/tools/web_monitor/scan/func.py
2022-05-18 11:39:14 -06:00

30 lines
1.0 KiB
Python

import asyncio
from fastapi import WebSocket
from network import MinerNetwork
from tools.web_monitor.func import get_current_miner_list
import ipaddress
async def do_websocket_scan(websocket: WebSocket, network_ip: str):
cur_miners = get_current_miner_list()
try:
if "/" in network_ip:
network_ip, network_subnet = network_ip.split("/")
network = MinerNetwork(network_ip, mask=network_subnet)
else:
network = MinerNetwork(network_ip)
miner_generator = network.scan_network_generator()
all_miners = []
async for found_miner in miner_generator:
if found_miner and str(found_miner.ip) not in cur_miners:
all_miners.append(
{"ip": str(found_miner.ip), "model": await found_miner.get_model()}
)
all_miners.sort(key=lambda x: ipaddress.ip_address(x["ip"]))
await websocket.send_json(all_miners)
await websocket.send_text("Done")
except asyncio.CancelledError:
raise