mirror of
https://github.com/kernelkit/infix.git
synced 2026-08-03 22:33:02 +02:00
New Logs page under Maintenance presents the on-disk syslog files (messages, syslog, kern, auth, routing, firewall, upgrade, debug, container, mail) with a tab per source and an (empty) chip for files with no content. The buffer loads the last 250 lines and pins to the bottom on open and on tab change, with keyboard focus on the pane so PageUp/PageDown work immediately. Load earlier pages back 250 lines at a time, preserving the reader's scroll position as older lines fill in above; once the current file is exhausted the button re-labels to "Load previous from <rotation>" and walks back through rotated and gzipped archives. Live tail streams new entries over SSE. The server runs tail -F -n 0 and debounces output; the client follows the bottom unless the reader has scrolled up. A status pill shows connecting/live/disconnected. nginx gets a no-buffering location for the tail stream, mirroring the software progress endpoint. Download returns the full archive — current file plus every rotated and gzipped predecessor — concatenated chronologically. Severity is coloured by a keyword heuristic since sysklogd writes no <PRI> to disk; BSD-format lines are shown unconditionally. Filter is client-side substring or /regex/, focusable with Ctrl/Cmd-F. Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
54 lines
1.9 KiB
Plaintext
54 lines
1.9 KiB
Plaintext
# Must be at server scope, not on an inner location: client_max_body_size
|
|
# does not inherit into a nested location that declares its own proxy_pass,
|
|
# and the http-level 1m default would silently apply and reject bundle
|
|
# uploads with 413.
|
|
client_max_body_size 256m;
|
|
|
|
location / {
|
|
include /etc/nginx/webui-proxy.conf;
|
|
}
|
|
|
|
# burst=3 nodelay: three POSTs land back-to-back; the next needs a
|
|
# fresh token (~12 s at 5r/m) or 429s.
|
|
location = /login {
|
|
limit_req zone=webui_login burst=3 nodelay;
|
|
include /etc/nginx/webui-proxy.conf;
|
|
}
|
|
|
|
# Keep proxy_request_buffering on (the default). Streaming the body races
|
|
# the Go handler's response close, producing RST instead of FIN at
|
|
# Content-Length and a client-visible 502. nginx spools the body to
|
|
# /var/cache/nginx/client-body during the upload instead.
|
|
location = /software/upload {
|
|
proxy_read_timeout 600s;
|
|
include /etc/nginx/webui-proxy.conf;
|
|
}
|
|
|
|
# SSE progress stream: RAUC's Progress D-Bus property doesn't change while
|
|
# it's writing a slot, so the upstream goes minutes without a frame. The
|
|
# default 60 s proxy_read_timeout closes the stream and the browser sees
|
|
# a transient error. Raise to cover a slow image write end-to-end.
|
|
location = /software/progress {
|
|
proxy_read_timeout 1800s;
|
|
proxy_buffering off;
|
|
include /etc/nginx/webui-proxy.conf;
|
|
}
|
|
|
|
# SSE live-tail stream for Maintenance > Logs. Same buffering / timeout
|
|
# concerns as the software progress stream: nginx must not buffer the
|
|
# event frames, and the connection has to stay open through quiet logs.
|
|
# The Go side sends a 15 s heartbeat, so 600 s of read timeout is plenty
|
|
# of safety margin.
|
|
location ~ ^/maintenance/logs/[^/]+/tail$ {
|
|
proxy_read_timeout 600s;
|
|
proxy_buffering off;
|
|
include /etc/nginx/webui-proxy.conf;
|
|
}
|
|
|
|
# Liveness probe — nginx-only, no upstream call. Used by the watchdog
|
|
# div in base.html and the reboot-overlay poller.
|
|
location = /device-status {
|
|
access_log off;
|
|
return 204;
|
|
}
|