diff options
| author | auric <auric@japegames.com> | 2026-02-22 19:13:06 -0600 |
|---|---|---|
| committer | auric <auric@japegames.com> | 2026-02-22 19:13:06 -0600 |
| commit | 23527346905a2728c418170a155d0c24b10f5b25 (patch) | |
| tree | 5edac5323122cf42b9a1ba5de83e58143b01fe4e /filters/terraria.py | |
| parent | f0baf8f2f3778d21692d377d32bd4e372cef2aae (diff) | |
Add log_filter: pluggable per-unit output filter subprocess
Each unit can specify log_filter: <path> pointing to any executable
that reads stdin and writes filtered output to stdout. The daemon
spawns it once at startup (and on SIGHUP), pipes raw log data through
it before ring-buffering and broadcasting to attached clients.
filter.c handles spawn (fork/exec with pipes), per-chunk apply
(write + poll with 250ms timeout, pass-through on silence/timeout),
and stop (SIGTERM + fd cleanup). Filters are stopped and restarted
cleanly on SIGHUP alongside log_tail.
Bundled filters in filters/:
source.py — TF2, GMod: strips server_cvar/stuck/path_goal spam,
strips the L MM/DD/YYYY - HH:MM:SS: prefix
minecraft.py — vanilla/Paper/Spigot: strips keepAlive, autosave,
internal class logs, strips [HH:MM:SS] [thread] prefix
terraria.py — vanilla/tModLoader: strips blank lines and mod
loading noise during startup
Any executable reading stdin/writing stdout works as a custom filter.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'filters/terraria.py')
| -rw-r--r-- | filters/terraria.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/filters/terraria.py b/filters/terraria.py new file mode 100644 index 0000000..93b5d91 --- /dev/null +++ b/filters/terraria.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +""" +Terraria log filter for Umbrella (vanilla, tModLoader) + +Vanilla and tModLoader produce fairly clean output, so this filter +mostly just strips blank lines and tModLoader's internal loading/debug +noise during startup. + +Vanilla format: plain text, e.g. ": <Player> has joined." +tModLoader format varies; startup emits many mod loading lines. + +Install: /usr/lib/umbrella/filters/terraria.py +Unit YAML: log_filter: /usr/lib/umbrella/filters/terraria.py +""" + +import sys +import re + +SKIP = re.compile( + r'^\s*$' # blank lines + r'|^: $' # bare colon lines (vanilla idle) + r'|\[tML\].*Loading mod' # tModLoader mod loading spam + r'|\[tML\].*Unloading mod' + r'|\[tML\].*Reloading mods' + r'|Received mods from' # mod sync noise in multiplayer + r'|Joining world\.\.\.' +) + +for line in sys.stdin: + if SKIP.search(line): + continue + sys.stdout.write(line) + sys.stdout.flush() |
