Add server control (start/stop/restart, live logs, broadcast, kick) to webadmin
Docker SDK drives login/char/worldserver containers via docker.sock (mounted read-only into webadmin); live logs stream over SSE with nginx buffering disabled so lines arrive in real time. Broadcast/kick go through a new admin_queue DB table that the world server polls every ~2s in its existing WorldProcess tick loop, avoiding a second IPC channel to the game server.
This commit is contained in:
1 parent
3554c85f2f
commit
15e562cb04
11 files changed
+331
-2
No files matched your search
@@ -71,6 +71,21 @@
|
||||
.badge.ok { background: #163a26; color: var(--ok); }
|
||||
.badge.off { background: #3a1620; color: var(--danger); }
|
||||
.row-actions a { margin-right: 8px; }
|
||||
.logbox {
|
||||
background: #0a0b10;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 8px;
|
||||
padding: 12px;
|
||||
height: 360px;
|
||||
overflow-y: auto;
|
||||
font-family: "SF Mono", Consolas, Menlo, monospace;
|
||||
font-size: 12px;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
.service-tabs { display: flex; gap: 8px; margin-bottom: 12px; }
|
||||
.service-tabs button.tab { background: #33384a; }
|
||||
.service-tabs button.tab.active { background: var(--accent); }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -80,6 +95,7 @@
|
||||
<nav>
|
||||
<a href="{{ url_for('accounts') }}">Accounts</a>
|
||||
<a href="{{ url_for('characters') }}">Charaktere</a>
|
||||
<a href="{{ url_for('server_control') }}">Server</a>
|
||||
<a href="{{ url_for('logout') }}">Logout ({{ session['username'] }})</a>
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
Reference in new issue
Block a user