started adding settings page
This commit is contained in:
@@ -13,6 +13,7 @@ from fastapi.templating import Jinja2Templates
|
||||
|
||||
from network import MinerNetwork
|
||||
from tools.web_monitor.miner_factory import miner_factory
|
||||
from tools.web_monitor.web_settings import MINER_DATA_TIMEOUT, MINER_IDENTIFY_TIMEOUT, GRAPH_SLEEP_TIME
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
@@ -49,7 +50,7 @@ async def dashboard_websocket(websocket: WebSocket):
|
||||
await websocket.send_json(
|
||||
{"datetime": datetime.datetime.now().isoformat(),
|
||||
"miners": all_miner_data})
|
||||
await asyncio.sleep(1)
|
||||
await asyncio.sleep(GRAPH_SLEEP_TIME)
|
||||
except WebSocketDisconnect:
|
||||
print("Websocket disconnected.")
|
||||
pass
|
||||
@@ -59,9 +60,9 @@ async def dashboard_websocket(websocket: WebSocket):
|
||||
|
||||
async def get_miner_data_dashboard(miner_ip):
|
||||
try:
|
||||
miner_ip = await asyncio.wait_for(miner_factory.get_miner(miner_ip), 5)
|
||||
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(), 5)
|
||||
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(
|
||||
@@ -106,10 +107,10 @@ async def miner_websocket(websocket: WebSocket, miner_ip):
|
||||
while True:
|
||||
try:
|
||||
cur_miner = await asyncio.wait_for(
|
||||
miner_factory.get_miner(str(miner_ip)), 5)
|
||||
miner_factory.get_miner(str(miner_ip)), MINER_IDENTIFY_TIMEOUT)
|
||||
|
||||
data = await asyncio.wait_for(
|
||||
cur_miner.api.multicommand("summary", "fans", "stats"), 5)
|
||||
cur_miner.api.multicommand("summary", "fans", "stats"), MINER_DATA_TIMEOUT)
|
||||
|
||||
miner_model = await cur_miner.get_model()
|
||||
|
||||
@@ -166,7 +167,7 @@ async def miner_websocket(websocket: WebSocket, miner_ip):
|
||||
"datetime": datetime.datetime.now().isoformat(),
|
||||
"model": miner_model}
|
||||
await websocket.send_json(data)
|
||||
await asyncio.sleep(1)
|
||||
await asyncio.sleep(GRAPH_SLEEP_TIME)
|
||||
except asyncio.exceptions.TimeoutError:
|
||||
data = {"error": "The miner is not responding."}
|
||||
await websocket.send_json(data)
|
||||
@@ -213,6 +214,20 @@ def get_current_miner_list():
|
||||
return cur_miners
|
||||
|
||||
|
||||
@app.get("/settings")
|
||||
async def settings(request: Request):
|
||||
return templates.TemplateResponse("settings.html", {
|
||||
"request": request,
|
||||
"cur_miners": get_current_miner_list(),
|
||||
})
|
||||
|
||||
@app.get("/remove_all_miners")
|
||||
async def remove_all_miners(request: Request):
|
||||
file = open("miner_list.txt", "w")
|
||||
file.close()
|
||||
return RedirectResponse(request.url_for("settings"))
|
||||
|
||||
|
||||
@app.post("/scan/add_miners")
|
||||
async def add_miners_scan(request: Request):
|
||||
miners = await request.json()
|
||||
|
||||
37
tools/web_monitor/templates/settings.html
Normal file
37
tools/web_monitor/templates/settings.html
Normal file
@@ -0,0 +1,37 @@
|
||||
{% extends 'navbar.html'%}
|
||||
{% block content %}
|
||||
<div class="row mt-2">
|
||||
<div class="col">
|
||||
<div class="d-flex flex-row-reverse">
|
||||
<button type="button" class="btn btn-outline-danger mx-1" data-bs-toggle="modal" data-bs-target="#removeModal">
|
||||
Remove All Miners
|
||||
</button>
|
||||
|
||||
<!-- Modal -->
|
||||
<div class="modal fade" id="removeModal" tabindex="-1" aria-labelledby="removeModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="removeModalLabel">Remove Miner</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
Do you really want to remove all miners?
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
||||
<a class="btn btn-danger" href="{{url_for('remove_all_miners')}}" role="button">Remove</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
window.post = function(url, data) {
|
||||
return fetch(url, {method: "POST", headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data)});
|
||||
}
|
||||
</script>
|
||||
{% endblock content %}
|
||||
13
tools/web_monitor/web_settings.py
Normal file
13
tools/web_monitor/web_settings.py
Normal file
@@ -0,0 +1,13 @@
|
||||
import toml
|
||||
import os
|
||||
|
||||
try:
|
||||
with open(os.path.join(os.getcwd(), "web_settings.toml"), "r") as settings_file:
|
||||
settings = toml.loads(settings_file.read())
|
||||
GRAPH_SLEEP_TIME: int = settings["graph_data_sleep_time"]
|
||||
MINER_DATA_TIMEOUT: int = settings["miner_data_timeout"]
|
||||
MINER_IDENTIFY_TIMEOUT: int = settings["miner_identify_timeout"]
|
||||
except:
|
||||
GRAPH_SLEEP_TIME: int = 1
|
||||
MINER_DATA_TIMEOUT: int = 5
|
||||
MINER_IDENTIFY_TIMEOUT: int = 5
|
||||
3
tools/web_monitor/web_settings.toml
Normal file
3
tools/web_monitor/web_settings.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
graph_data_sleep_time = 1
|
||||
miner_data_timeout = 5
|
||||
miner_identify_timeout = 5
|
||||
Reference in New Issue
Block a user