added listener function to cfg util

This commit is contained in:
UpstreamData
2022-05-30 13:27:56 -06:00
parent 739126935a
commit dd5ccafa1e
4 changed files with 84 additions and 22 deletions

View File

@@ -35,10 +35,12 @@ class MinerListener(metaclass=Singleton):
self.stop = False self.stop = False
async def listen(self): async def listen(self):
self.stop = False
loop = asyncio.get_running_loop() loop = asyncio.get_running_loop()
transport, protocol = await loop.create_datagram_endpoint( transport, protocol = await loop.create_datagram_endpoint(
lambda: _MinerListener(), local_addr=("0.0.0.0", 14235) lambda: _MinerListener(), local_addr=("0.0.0.0", 14235) # noqa
) )
while True: while True:

View File

@@ -1,10 +1,13 @@
from miners.miner_factory import MinerFactory from miners.miner_factory import MinerFactory
from tools.cfg_util.layout import window, update_prog_bar from miners.miner_listener import MinerListener
from tools.cfg_util.layout import window, update_prog_bar, WINDOW_ICON
from tools.cfg_util.tables import TableManager from tools.cfg_util.tables import TableManager
from tools.cfg_util.decorators import disable_buttons from tools.cfg_util.decorators import disable_buttons
from settings import CFG_UTIL_CONFIG_THREADS as COMMAND_THREADS from settings import CFG_UTIL_CONFIG_THREADS as COMMAND_THREADS
from typing import Tuple from typing import Tuple
import PySimpleGUI as sg
import asyncio import asyncio
@@ -118,3 +121,33 @@ async def send_command_generator(miners: list, command: str):
async def _send_ssh_command(miner, command: str): async def _send_ssh_command(miner, command: str):
proc = await miner.send_ssh_command(command) proc = await miner.send_ssh_command(command)
return {"IP": miner.ip, "Status": proc} return {"IP": miner.ip, "Status": proc}
CANCEL_LISTEN_BTNS = [
"cmd_cancel_listen",
"pools_cancel_listen",
"boards_cancel_listen",
"scan_cancel_listen",
"cfg_cancel_listen",
]
@disable_buttons("Listening for Miner")
async def btn_listen():
window["cmd_listen"].update(visible=False)
for btn in CANCEL_LISTEN_BTNS:
window[btn].update(visible=True)
async for miner in MinerListener().listen():
sg.popup(
f"IP: {miner['IP']}, MAC: {miner['MAC']}",
title="Found Miner",
keep_on_top=True,
icon=WINDOW_ICON,
)
async def btn_cancel_listen():
await MinerListener().cancel()
window["cmd_listen"].update(visible=True)
for btn in CANCEL_LISTEN_BTNS:
window[btn].update(visible=False)

View File

@@ -150,6 +150,10 @@ BUTTON_KEYS = [
"scan_all", "scan_all",
"scan_refresh", "scan_refresh",
"scan_web", "scan_web",
"boards_report",
"boards_all",
"boards_refresh",
"boards_web",
"cmd_all", "cmd_all",
"cmd_light", "cmd_light",
"cmd_reboot", "cmd_reboot",
@@ -162,6 +166,7 @@ BUTTON_KEYS = [
"cfg_generate", "cfg_generate",
"cfg_all", "cfg_all",
"cfg_web", "cfg_web",
"cmd_listen",
] ]
TABLE_HEIGHT = 27 TABLE_HEIGHT = 27
@@ -217,7 +222,6 @@ def get_scan_layout():
"Scan", "Scan",
key="btn_scan", key="btn_scan",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
mouseover_colors=BTN_DISABLED, mouseover_colors=BTN_DISABLED,
bind_return_key=True, bind_return_key=True,
), ),
@@ -227,20 +231,23 @@ def get_scan_layout():
"ALL", "ALL",
key="scan_all", key="scan_all",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((0, 5), (1, 1)), pad=((0, 5), (1, 1)),
), ),
sg.Button( sg.Button(
"REFRESH DATA", "REFRESH DATA",
key="scan_refresh", key="scan_refresh",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
), ),
sg.Button( sg.Button(
"OPEN IN WEB", "OPEN IN WEB",
key="scan_web", key="scan_web",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED, ),
sg.Button(
"STOP LISTENING",
key="scan_cancel_listen",
border_width=BTN_BORDER,
visible=False,
), ),
], ],
[ [
@@ -302,20 +309,23 @@ def get_boards_layout():
"ALL", "ALL",
key="boards_all", key="boards_all",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((0, 5), (1, 1)), pad=((0, 5), (1, 1)),
), ),
sg.Button( sg.Button(
"REFRESH DATA", "REFRESH DATA",
key="boards_refresh", key="boards_refresh",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
), ),
sg.Button( sg.Button(
"OPEN IN WEB", "OPEN IN WEB",
key="boards_web", key="boards_web",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED, ),
sg.Button(
"STOP LISTENING",
key="boards_cancel_listen",
border_width=BTN_BORDER,
visible=False,
), ),
], ],
[ [
@@ -370,7 +380,6 @@ def get_command_layout():
"Send Command", "Send Command",
key="btn_cmd", key="btn_cmd",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
), ),
], ],
[ [
@@ -378,26 +387,33 @@ def get_command_layout():
"ALL", "ALL",
key="cmd_all", key="cmd_all",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((0, 5), (1, 1)), pad=((0, 5), (1, 1)),
), ),
sg.Button( sg.Button(
"LIGHT", "LIGHT",
key="cmd_light", key="cmd_light",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
), ),
sg.Button( sg.Button(
"REBOOT", "REBOOT",
key="cmd_reboot", key="cmd_reboot",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
), ),
sg.Button( sg.Button(
"RESTART BACKEND", "RESTART BACKEND",
key="cmd_backend", key="cmd_backend",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED, ),
sg.Button(
"LISTEN",
key="cmd_listen",
border_width=BTN_BORDER,
),
sg.Button(
"STOP LISTENING",
key="cmd_cancel_listen",
border_width=BTN_BORDER,
visible=False,
), ),
], ],
[ [
@@ -447,20 +463,23 @@ def get_pools_layout():
"ALL", "ALL",
key="pools_all", key="pools_all",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((0, 5), (6, 7)), pad=((0, 5), (6, 7)),
), ),
sg.Button( sg.Button(
"REFRESH DATA", "REFRESH DATA",
key="pools_refresh", key="pools_refresh",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
), ),
sg.Button( sg.Button(
"OPEN IN WEB", "OPEN IN WEB",
key="pools_web", key="pools_web",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED, ),
sg.Button(
"STOP LISTENING",
key="pools_cancel_listen",
border_width=BTN_BORDER,
visible=False,
), ),
], ],
[ [
@@ -614,37 +633,39 @@ def get_config_layout():
"IMPORT", "IMPORT",
key="cfg_import", key="cfg_import",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((0, 5), (6, 0)), pad=((0, 5), (6, 0)),
), ),
sg.Button( sg.Button(
"CONFIG", "CONFIG",
key="cfg_config", key="cfg_config",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((0, 5), (6, 0)), pad=((0, 5), (6, 0)),
), ),
sg.Button( sg.Button(
"GENERATE", "GENERATE",
key="cfg_generate", key="cfg_generate",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((0, 5), (6, 0)), pad=((0, 5), (6, 0)),
), ),
sg.Button(
"STOP LISTENING",
key="cfg_cancel_listen",
border_width=BTN_BORDER,
pad=((0, 5), (6, 0)),
visible=False,
),
], ],
[ [
sg.Button( sg.Button(
"ALL", "ALL",
key="cfg_all", key="cfg_all",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((0, 5), (1, 0)), pad=((0, 5), (1, 0)),
), ),
sg.Button( sg.Button(
"OPEN IN WEB", "OPEN IN WEB",
key="cfg_web", key="cfg_web",
border_width=BTN_BORDER, border_width=BTN_BORDER,
disabled_button_color=BTN_DISABLED,
pad=((5, 5), (3, 2)), pad=((5, 5), (3, 2)),
), ),
sg.Push(background_color=MAIN_TABS_BG), sg.Push(background_color=MAIN_TABS_BG),

View File

@@ -9,6 +9,8 @@ from tools.cfg_util.commands import (
btn_reboot, btn_reboot,
btn_backend, btn_backend,
btn_command, btn_command,
btn_cancel_listen,
btn_listen,
) )
from tools.cfg_util.configure import ( from tools.cfg_util.configure import (
generate_config_ui, generate_config_ui,
@@ -193,6 +195,10 @@ async def ui():
_table = "cmd_table" _table = "cmd_table"
_ips = value[_table] _ips = value[_table]
asyncio.create_task(btn_command(_ips, value["cmd_txt"])) asyncio.create_task(btn_command(_ips, value["cmd_txt"]))
if event == "cmd_listen":
asyncio.create_task(btn_listen())
if event.endswith("cancel_listen"):
asyncio.create_task(btn_cancel_listen())
if event == "__TIMEOUT__": if event == "__TIMEOUT__":
await asyncio.sleep(0) await asyncio.sleep(0)