From 5828fe99c713602665d5195e0c23b255c74f9c8b Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Sun, 27 Sep 2026 09:39:21 -0500 Subject: [PATCH] docs: describe the UGC server on the dashboard Co-Authored-By: Claude Opus 5.5 --- docs/Dashboard.md | 31 ++++++++++++++++++++++++------- docs/UgcServer.md | 9 +++++++++ 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/docs/Dashboard.md b/docs/Dashboard.md index a7839067b..b60951ce1 100644 --- a/docs/Dashboard.md +++ b/docs/Dashboard.md @@ -322,6 +322,11 @@ Accounts without `players_view` (players, by default) see no clone IDs: running row per zone with how many properties are open and their players, so nobody can tell who is on which property. The same goes for `/api/status`. +The **Server Status** card shows auth, chat and, while master starts it (`enable_ugc_server`), the UGC server. Staff +with `health_view` also get a **UGC Server** card: whether it is up and for how long, the models and cars and rockets +waiting, made and failed (from the database, the UGC server's work list), its busy workers and the space its files take +(from its last traffic report), with a link to the UGC page. `/api/servers/ugc` returns the same. + ### Announcements and restarts From the home page: @@ -560,18 +565,26 @@ Restoring an older backup is fine: migrations bring it up to date when the serve On the **Webhooks** page (GM 9) add Discord, Slack or generic JSON webhooks and choose which events they get: `bug_report`, `pending_name` (names waiting for approval), `moderation` (bans, locks, mutes, kicks and restrictions, from the dashboard or in game), `security` (GM level and two-factor changes, API keys, recovery code use), -`economy_flag` and `server` (auth or chat going down or coming back, restarts, events). JSON deliveries can be signed: +`economy_flag` and `server` (auth, chat or, while it is enabled, the UGC server going down or coming back, restarts, +events). JSON deliveries can be signed: with a secret set, each request has `X-DLU-Signature: sha256=`. ### Server health and instance load **Server Health** (GM 8+, `health_view`) charts players online, running worlds, memory used by all server -processes, and whether auth and chat were up, over the last day, week or month (sampled once a minute, kept for -`health_days`, 30). +processes, and whether auth, chat and the UGC server were up (the UGC server only while master starts it; grey where it +was off), over the last day, week or month (sampled once a minute, kept for `health_days`, 30). The **Servers** table +lists every server master knows (master, auth, chat, the dashboard, the UGC server, each world) with its state, how +long it has been up, and on Linux, when it runs on the dashboard's machine, its process ID, memory and CPU (of one +core, since the table last refreshed), plus what its last traffic report said: connections, ping, worker threads, and +for the UGC server its queue and storage. Server processes of this build that master doesn't list show as "Not listed". +`/api/servers` returns the table's data. **Prometheus metrics** are off until `metrics_enabled` is switched on (Settings > Dashboard > Metrics). `/metrics` then serves the Prometheus text format: players online (total, per zone and per instance), running worlds per zone, whether -master, auth and chat are up, memory and process count per kind of server, dashboard uptime and WebSocket clients, chat +master, auth, chat and the UGC server are up (`darkflame_ugc_enabled`, `darkflame_ugc_up`), memory and process count +per kind of server, the UGC server's work list (`darkflame_ugc_items`, labels `kind` model or modular and `state` +pending, done or failed), dashboard uptime and WebSocket clients, chat messages by channel (and how many the filter blocked), today's coins, items and map events, moderation queues (names, pet names, properties, bug reports, economy flags, player reports), active strikes, each scheduled task's last run, and how long the database reads behind them took. Labels never contain account or character names or addresses. A scraper @@ -624,7 +637,8 @@ How it is counted: - Every 5 seconds a server sends `SERVER_TRAFFIC` (`dNet/master/ServerTraffic.h`, about 600 bytes) to master with its seconds, its 24 busiest message types each way, its routes, RakNet's statistics for its connections (datagrams, resends, ping) and a few gauges (`http_deferred_pending`, `websocket_clients`, `workers_busy`, `workers_queued`, - `workers_threads`). Master passes them to the dashboard and sends its own there; the dashboard keeps its own. + `workers_threads`; the UGC server adds `ugc_made_total`, `ugc_failed_total` and `ugc_evicted_total` since it started, + `ugc_stored_bytes` and `ugc_max_storage_bytes`). Master passes them to the dashboard and sends its own there; the dashboard keeps its own. - The dashboard keeps the last hour at one second in memory, the busiest message types per minute for an hour and per hour for a day, and writes one row per server and minute to `server_traffic` once a minute (in one batch, on the background thread), kept for `traffic_days` (30; Settings > Data retention, pruned by the Log pruning task). Latency @@ -645,8 +659,11 @@ How it is counted: from the list), says which file you're looking at and when it was last written, and can download it. It also searches the newest log files of one or all servers. -Crash dumps: set `dump_folder` (for example `crash_dumps`, relative to the server binaries) and world servers write a -backtrace file there when they crash (`generate_dump=1` also writes a memory dump on Windows). Server Health lists them +The UGC server's logs are `UgcServer_