Panou web pe 127.0.0.1:18790, unit systemd separat de al puntii. Server stdlib
(fara dependinte noi), tokenii de design si tiparul de endpoint-uri preluate din
/home/moltbot/echo-core/dashboard (handlers/eco.py) de pe LXC 110.
Arata: starea unitatii (uptime, PID, memoria cgroup, restarturi), firele din
state.json cu tur in zbor si cost, costul zilei fata de plafon, confirmarile
PreToolUse in asteptare (aprobabile direct din pagina), bot.log / infra.log si
opt verificari de diagnostic.
Face: start / stop / restart pe punte, cautarea si curatarea orfanilor prin
cleanup.py, repornirea propriului serviciu.
Garantii, cu teste:
- unitatea controlata e fixa in cod; un {"unit": "ssh.service"} in cerere nu
schimba nimic, altfel panoul ar fi systemctl remote fara parola;
- stop/restart intorc 409 cu lista firelor active si cer force explicit, fiindca
KillMode=control-group taie tururile in desfasurare;
- state.json se citeste fara lock: panoul nu are voie sa blocheze botul;
- diagnosticul pica daca reapare Bash(ssh:*) in deny (regresia de azi).
Uptime-ul se calculeaza din time.monotonic(), nu din /proc/uptime: in LXC acela
e virtualizat de lxcfs si da diferenta negativa fata de monotonic-ul systemd.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01B29CApsP1JkSdjYaGaHpE7
43 lines
1.7 KiB
Desktop File
43 lines
1.7 KiB
Desktop File
# Unit systemd de UTILIZATOR pentru dashboard-ul de control al puntii Discord.
|
|
#
|
|
# Se instaleaza in ~/.config/systemd/user/claude-discord-dashboard.service
|
|
# (vezi ops/install.sh). Ruleaza ca `claude`, ACELASI utilizator ca puntea —
|
|
# de asta poate face `systemctl --user restart claude-discord` fara sudo.
|
|
#
|
|
# systemctl --user daemon-reload
|
|
# systemctl --user enable --now claude-discord-dashboard
|
|
# journalctl --user -u claude-discord-dashboard -f
|
|
|
|
[Unit]
|
|
Description=Dashboard de control pentru puntea Discord (LXC 171 claude-agent)
|
|
Documentation=file:///workspace/romfastsql/proxmox/lxc171-claude-agent/discord-bridge/dashboard/README.md
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
WorkingDirectory=%h/.claude-discord
|
|
EnvironmentFile=%h/.claude-discord/env
|
|
Environment=PYTHONUNBUFFERED=1
|
|
# nvm, ca verificarea `CLI claude` din /api/doctor sa vada acelasi PATH ca botul
|
|
Environment=PATH=%h/bin:%h/.nvm/versions/node/v20.19.6/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
|
|
# Stdlib only: nu are nevoie de venv-ul botului.
|
|
ExecStart=/usr/bin/python3 /workspace/romfastsql/proxmox/lxc171-claude-agent/discord-bridge/dashboard/api.py
|
|
|
|
# NU KillMode=control-group aici: dashboard-ul nu are copii de curatat, iar
|
|
# `/api/restart-self` se bazeaza pe iesirea curata + Restart=always.
|
|
Restart=always
|
|
RestartSec=2
|
|
|
|
# Panou de citit stare, nu proces de lucru: plafon strans, ca sa nu concureze
|
|
# cu puntea pentru memoria containerului (istoric de OOM, 2026-06-24).
|
|
MemoryHigh=192M
|
|
MemoryMax=384M
|
|
|
|
StandardOutput=append:%h/.claude-discord/logs/dashboard.log
|
|
StandardError=append:%h/.claude-discord/logs/dashboard.log
|
|
SyslogIdentifier=claude-discord-dashboard
|
|
|
|
[Install]
|
|
WantedBy=default.target
|