Commit Graph
157 Commits
Author SHA1 Message Date
npc0-hue 6985f77963 Keep the recurring SCUM database poll bounded
Each dispatched poll is a durable job with two job log streams, so an
unbounded poll history would grow the platform store by roughly two
thousand jobs a day per server. A new poll now retires older terminal jobs
of the same template together with their job log streams, leaving at most
two rows per template while nothing is in flight.
2026-09-16 18:08:18 +08:00
npc0-hue 300390dc4d Fill the SCUM user and vehicle tables from the plugin-declared database read path
The SCUM 用户管理 list stayed empty because the typed scum_user and
scum_vehicle tables had no producer: the run ingest endpoint is signed-run
only, and the previously registered plugin templates asked for a Run
database capability the endpoint never advertises.

The plugin now declares bounded, read-only SQLite projections for players
and vehicles (sql/scum-db-v57/*.sql with query schemas), and the platform
dispatches those templates as durable remote.run.db.sqlite.query jobs on
run heartbeat and page open, then projects the returned rows into the typed
SCUM tables through the same shared ingest path used by signed run facts.
2026-09-16 18:01:33 +08:00
npc0-hue 05f5a97ba9 Add graceful SCUM stop, restart, and version update flow
SCUM 停止/重启/更新以前只有“结束进程”这一条路,插件没有声明任何优雅关闭方式,
平台也没有把停止后重新启动串起来。现在插件声明自己的关闭脚本,run 先执行它,
平台在停止或更新成功后再自动拉起服务。

run:
- lifecycle stop 支持插件声明的 gracefulStop(可执行文件、参数、环境、超时、
  fallback=report|terminate);关闭命令超时且声明 report 时任务失败,不再默默杀进程。
- 新增 steam.update 依赖探针:调用 steamcmd +app_info_print 获取公开分支 buildid,
  与本地 steamapps/appmanifest_<appid>.acf 的 buildid 比较,输出
  installed/latest/update=yes|no|unknown。

platform:
- 新增 POST /api/v1/server-instances/{id}/restart 与 /update。
- restart 派发插件 stop 动作(走优雅关闭),终态成功后入队 start 作业。
- update 派发插件 install 动作;插件在更新前必须先优雅关闭 SCUM,关闭失败直接拒绝
  SteamCMD 更新,成功后平台再拉起服务。
- 依赖检查输入带上插件声明的服务器安装根目录,供 steam.update 读取 appmanifest。

plugin (SCUM server plugin 0.1.16):
- bin/scum-stop.cmd:解析已声明的可执行文件路径,定位同路径正在运行的 SCUMServer.exe,
  通过本地 RCON 公告并发送关闭命令,等待进程自行退出;不再使用 taskkill。
- bin/scum-rcon.ps1:插件自有的 Source RCON 客户端,从 UE4SS mod config.ini 读取
  密码/端口,密钥不离开本机。
- actions/stop.json 声明 gracefulStop;actions/install.json 更新前先执行同一关闭脚本。

platform_web:
- 服务器详情新增“重启”按钮和“SCUM 版本更新”面板;点“检查更新”查询公开分支版本,
  只有检测到更新时“更新版本”按钮才会置为可用并高亮,点击后先确认再派发更新任务。
2026-09-15 13:30:15 +08:00
npc0-hue a822e9250a Store SCUM facts in typed platform tables
Run pushes typed SCUM facts through POST /api/v1/run/scum/facts, but the
production router rejected that path before the signature middleware because
runServiceRequest listed individual Run channel prefixes, and MySQL kept SCUM
rows inside the whole metadata snapshot instead of platform tables.

- /api/v1/run/ is now the signed machine channel space while
  /api/v1/run/endpoints keeps normal bearer/admin authorization.
- MySQL gets real scum_user, scum_user_trajectory, scum_vehicle,
  scum_vehicle_trajectory and scum_vehicle_lock tables with parameterized
  per-row repositories instead of full snapshot rewrites. Snapshot-shaped
  tables from the unreleased interim build are replaced, and SCUM rows still
  inside a metadata snapshot are migrated once.
- Facts ingest verifies the target server plugin type and converges stale
  online users to offline after SCUMUserOfflineAfter.
- The plugin page and browser read one bounded /scum/surface response instead
  of five list calls per refresh.

Call-count budget for one server: per 5s facts batch, one SELECT plus one
INSERT/UPDATE per reported user and vehicle, one INSERT per moved trajectory
sample or new lock row, one bounded stale-user SELECT, and a trajectory
retention DELETE at most once per hour. One browser refresh issues one surface
request every 15s instead of five list requests.
2026-09-15 12:12:11 +08:00
npc0-hue 63e2340db7 Prune stale plugin metadata 2026-09-14 17:32:51 +08:00
npc0-hue ecdca8e28b Remove SCUM sqlite user projections 2026-09-14 13:41:44 +08:00
npc0-hue 8c924b5928 Reduce log ingest and SCUM page refresh pressure 2026-09-09 16:21:12 +08:00
npc0-hue fd9dbab669 Reduce hot run polling pressure 2026-09-07 20:26:20 +08:00
npc0-hue 4ab7bb820d Reduce server console polling load 2026-09-07 19:49:20 +08:00
npc0-hue 1b583f3ca6 Fix server file list fallback 2026-09-07 18:54:56 +08:00
npc0-hue 86167a3a1b Fix SCUM query port startup input 2026-09-07 14:56:12 +08:00
npc0-hue cf836715e2 fix: prevent loopback Run release URLs 2026-09-05 18:11:58 +08:00
npc0-hue ba36668668 Keep plugin records out of platform projections 2026-09-04 14:29:50 +08:00
npc0-hue 3cfb98ed47 Remove legacy runtime deployment paths 2026-09-04 12:36:21 +08:00
npc0-hue 14cbc63e61 Tighten opaque plugin content boundaries 2026-09-03 18:24:39 +08:00
npc0-hue 80cddbf19d Remove legacy client-manager platform path 2026-09-03 16:40:05 +08:00
npc0-hue ec2462a312 Complete artifact binary transfer streaming 2026-09-03 13:27:22 +08:00
npc0-hue fe09d21a56 Remove legacy client-manager workflows 2026-09-03 13:08:08 +08:00
npc0-hue bf3c382d15 Make log payloads opaque pass-through 2026-09-03 12:40:17 +08:00
npc0-hue 5b82a42cc4 Remove file log store memory mirror 2026-09-03 12:21:07 +08:00
npc0-hue 6311eb72ba Speed up artifact downloads 2026-09-03 11:27:19 +08:00
npc0-hue a82f1ff01a Remove SCUM server-management client path 2026-09-02 17:56:49 +08:00
npc0-hue 6e614d3fa3 Keep Run and Platform logs opaque 2026-09-02 12:23:16 +08:00
npc0-hue a027ca70eb Align runtime profiles with plugin-owned records 2026-09-02 10:22:14 +08:00
npc0-hue 6018d8f0fc Restore durable log ingest and typed plugin projections 2026-09-02 10:20:30 +08:00
npc0-hue 40ac46ba17 Move game log processing into SCUM companion 2026-09-02 10:18:27 +08:00
npc0-hue 7d9c1b7e9e Make SCUM logs live relay only 2026-09-01 14:26:00 +08:00
npc0-hue ea4e780562 Fix SCUM companion trajectory storage 2026-08-31 15:42:16 +08:00
npc0-hue 4e9a2bfeaa Implement browser control skill integration 2026-08-31 04:52:56 +08:00
npc0-hue fa2ce17ce3 Fix generated run lifecycle profile scope 2026-08-31 01:20:36 +08:00
npc0-hue 8194671656 Fix run package profile and log ingestion 2026-08-30 23:59:18 +08:00
npc0-hue 8686419fb2 Keep generated Run component key empty 2026-08-29 12:38:32 +08:00
npc0-hue 35a272ce23 Accept sessioned autonomous run logs 2026-08-29 10:36:32 +08:00
npc0-hue bc10cd7400 Remove legacy plugin query projections 2026-08-28 18:00:03 +08:00
npc0-hue aafbec4c96 Move SCUM trajectories to plugin SQL storage 2026-08-28 17:50:45 +08:00
npc0-hue dcbeb33dfc Normalize legacy file list job results 2026-08-27 17:48:51 +08:00
npc0-hue a0e7ae362b Add SCUM trade catalog projections 2026-08-27 16:14:59 +08:00
npc0-hue 316efbe780 Add SCUM log sessions and trajectory projections 2026-08-27 12:34:07 +08:00
npc0-hue 55a5d6de80 Add Run control event stream 2026-08-26 23:06:06 +08:00
npc0-hue 6369a8099a Fix server file browse flow 2026-08-26 22:00:23 +08:00
npc0-hue 35f1eb0844 Reduce server file refresh latency 2026-08-26 15:47:34 +08:00
npc0-hue e269311c07 Fix server file workspace root 2026-08-26 11:04:43 +08:00
npc0-hue 84146924c1 fix: locate run module before build 2026-08-26 09:00:28 +08:00
npc0-hue 31eda4f67f fix: prepare run build config directory 2026-08-26 08:55:13 +08:00
npc0-hue 3f493bb78c Fix Run file capability negotiation 2026-08-25 23:16:02 +08:00
npc0-hue a90474f896 fix: preserve platform builder failure diagnostics 2026-08-25 22:48:57 +08:00
npc0-hue 321bda3f2f Filter stale batches from live terminal logs 2026-08-25 22:34:33 +08:00
npc0-hue 7ebe3bb3dd Remove terminal log replay 2026-08-25 22:25:09 +08:00
npc0-hue 725b71b6b6 Make terminal log stream live-only by default 2026-08-25 09:42:24 +08:00
npc0-hue 199fa8b41d Fix SCUM file list capability fallback 2026-08-25 09:32:25 +08:00