From 7577407a3fd9949a1fb25666421de298daedde87 Mon Sep 17 00:00:00 2001 From: Greelan <53196309+Greelan@users.noreply.github.com> Date: Tue, 7 Apr 2026 09:49:35 +1000 Subject: [PATCH 1/4] widgets: enhance Live Log widget Uses client-side DOM for determining log endpoints, doesn't require any default target access, allows options for severity and search filter and variable log lines to show, which are displayed in summary in widget, and uses true log tailing plus backfill --- .../Diagnostics/Api/LogController.php | 3 +- .../www/js/opnsense_widget_manager.js | 12 + src/opnsense/www/js/widgets/LiveLog.js | 243 +++++++++++++++--- src/opnsense/www/js/widgets/Metadata/Core.xml | 25 +- 4 files changed, 247 insertions(+), 36 deletions(-) diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/LogController.php b/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/LogController.php index 4460f903cf2..538f0625e71 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/LogController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Diagnostics/Api/LogController.php @@ -100,7 +100,8 @@ public function __call($name, $arguments) [$offset, $searchPhrase, $module, $scope, $severities], [ 'Content-Type: text/event-stream', - 'Cache-Control: no-cache' + 'Cache-Control: no-cache', + 'X-Accel-Buffering: no' /* disable nginx reverse proxy buffering for SSE streams to ensure real-time delivery */ ], 60 /* XXX */ ); diff --git a/src/opnsense/www/js/opnsense_widget_manager.js b/src/opnsense/www/js/opnsense_widget_manager.js index 9650c40c75e..6a5768f6f89 100644 --- a/src/opnsense/www/js/opnsense_widget_manager.js +++ b/src/opnsense/www/js/opnsense_widget_manager.js @@ -809,6 +809,15 @@ class WidgetManager { $option.append($(`
${value.title}
`)); $option.append($select); break; + case 'text': + let $textInput = $(``); + $textInput.val(config[key] ?? ''); + if (value.placeholder) { + $textInput.attr('placeholder', value.placeholder); + } + $option.append($(`
${value.title}
`)); + $option.append($textInput); + break; case 'textarea': let $textarea = $(`