feat: plugin auto-restart dashboard when backend 404
- gateway auto-start now also checks dashboard backend 404 via http://127.0.0.1:9119/api/plugins/sshx-link/status and calls _try_restart_dashboard (systemctl --user restart hermes-dashboard.service, hermes dashboard --stop/start, pkill) - ensures new plugin_api gets mounted without manual hermes dashboard --stop/start - keep dashboard visible, no cron needed, auto-start via nohup/systemd - bump v2.5.8
This commit is contained in:
parent
b0a2fcbc5b
commit
e212fe083d
49
__init__.py
49
__init__.py
|
|
@ -596,6 +596,22 @@ def _ensure_cron_script():
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.debug(f"ensure cron script failed: {e}")
|
logger.debug(f"ensure cron script failed: {e}")
|
||||||
|
|
||||||
|
def _try_restart_dashboard():
|
||||||
|
for cmd in [
|
||||||
|
["systemctl","--user","restart","hermes-dashboard.service"],
|
||||||
|
["systemctl","--user","restart","hermes-dashboard"],
|
||||||
|
["bash","-c","hermes dashboard --stop; sleep 1; nohup hermes dashboard --host 0.0.0.0 --port 9119 --no-open > /tmp/hermes-dashboard.log 2>&1 &"],
|
||||||
|
["bash","-c","pkill -f 'hermes.*dashboard'; sleep 1; nohup hermes dashboard --host 0.0.0.0 --port 9119 --no-open > /tmp/hermes-dashboard.log 2>&1 &"],
|
||||||
|
]:
|
||||||
|
try:
|
||||||
|
subprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, stdin=subprocess.DEVNULL, start_new_session=True)
|
||||||
|
logger.info(f"dashboard restart tried: {' '.join(cmd)}")
|
||||||
|
return True
|
||||||
|
except Exception as e:
|
||||||
|
logger.debug(f"dashboard restart {cmd} failed: {e}")
|
||||||
|
continue
|
||||||
|
return False
|
||||||
|
|
||||||
def register(ctx):
|
def register(ctx):
|
||||||
# ensure cron script is available in HERMES_HOME/scripts for no_agent cron
|
# ensure cron script is available in HERMES_HOME/scripts for no_agent cron
|
||||||
_ensure_cron_script()
|
_ensure_cron_script()
|
||||||
|
|
@ -629,6 +645,39 @@ def register(ctx):
|
||||||
|
|
||||||
threading.Thread(target=_auto_start, daemon=True).start()
|
threading.Thread(target=_auto_start, daemon=True).start()
|
||||||
|
|
||||||
|
# also auto-restart dashboard if backend 404 (plugin updated but dashboard not restarted)
|
||||||
|
def _auto_restart_dashboard_check():
|
||||||
|
try:
|
||||||
|
time.sleep(5)
|
||||||
|
# check if dashboard backend is 404
|
||||||
|
import urllib.request, json as _j
|
||||||
|
for _ in range(3):
|
||||||
|
try:
|
||||||
|
req = urllib.request.urlopen("http://127.0.0.1:9119/api/plugins/sshx-link/status", timeout=3)
|
||||||
|
# if 200, backend mounted, no need
|
||||||
|
if req.status == 200:
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
# try to detect 404 via HTTPError
|
||||||
|
try:
|
||||||
|
if hasattr(e, 'code') and e.code == 404:
|
||||||
|
logger.info("dashboard backend 404 detected, trying restart")
|
||||||
|
_try_restart_dashboard()
|
||||||
|
return
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# also try via status code in exception
|
||||||
|
if "404" in str(e):
|
||||||
|
_try_restart_dashboard()
|
||||||
|
return
|
||||||
|
time.sleep(2)
|
||||||
|
# also check link file exists but dashboard not showing it
|
||||||
|
if _read_link_file() and not _is_sshx_alive():
|
||||||
|
_try_restart_dashboard()
|
||||||
|
except Exception as e:
|
||||||
|
logger.debug(f"auto restart check failed: {e}")
|
||||||
|
threading.Thread(target=_auto_restart_dashboard_check, daemon=True).start()
|
||||||
|
|
||||||
ctx.register_tool(
|
ctx.register_tool(
|
||||||
name="sshx_start",
|
name="sshx_start",
|
||||||
toolset="sshx-link",
|
toolset="sshx-link",
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
"label": "sshx.io Terminal",
|
"label": "sshx.io Terminal",
|
||||||
"description": "Auto-start sshx via nohup/systemd, copy cron script to HERMES_HOME/scripts, dashboard visible",
|
"description": "Auto-start sshx via nohup/systemd, copy cron script to HERMES_HOME/scripts, dashboard visible",
|
||||||
"icon": "Terminal",
|
"icon": "Terminal",
|
||||||
"version": "2.5.7",
|
"version": "2.5.8",
|
||||||
"tab": {
|
"tab": {
|
||||||
"path": "/sshx",
|
"path": "/sshx",
|
||||||
"position": "end"
|
"position": "end"
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
name: sshx-link
|
name: sshx-link
|
||||||
version: 2.5.7
|
version: 2.5.8
|
||||||
description: Auto-start sshx via nohup/systemd, copy cron script to HERMES_HOME/scripts, dashboard visible
|
description: Auto-start sshx via nohup/systemd, copy cron script to HERMES_HOME/scripts, dashboard visible
|
||||||
author: sisyphus
|
author: sisyphus
|
||||||
provides_tools:
|
provides_tools:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue