From 76ce0f431b867068b0a39ccb46c3aa4ddf0f71bc Mon Sep 17 00:00:00 2001 From: Stephan de Wit Date: Wed, 3 Jul 2024 13:52:19 +0200 Subject: [PATCH] dashboard: fix small issues and introduce dataChanged method --- src/opnsense/www/js/opnsense_widget_manager.js | 4 ++-- src/opnsense/www/js/widgets/BaseWidget.js | 15 +++++++++++++++ src/opnsense/www/js/widgets/Interfaces.js | 4 ++++ src/opnsense/www/js/widgets/Metadata/Core.xml | 4 ++-- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/opnsense/www/js/opnsense_widget_manager.js b/src/opnsense/www/js/opnsense_widget_manager.js index 7c8a1dd99..a250428e5 100644 --- a/src/opnsense/www/js/opnsense_widget_manager.js +++ b/src/opnsense/www/js/opnsense_widget_manager.js @@ -454,8 +454,6 @@ class WidgetManager { `); }); } - - this._updateGrid(); } // Executed for each widget; starts the widget-specific tick routine. @@ -500,8 +498,10 @@ class WidgetManager { // start the widget-specific tick routine let onWidgetTick = widget.onWidgetTick.bind(widget); await onWidgetTick(); + this._updateGrid(this.widgetHTMLElements[widget.id]); const interval = setInterval(async () => { await onWidgetTick(); + this._updateGrid(); }, widget.tickTimeout); // store the reference to the tick routine so we can clear it later on widget removal this.widgetTickRoutines[widget.id] = interval; diff --git a/src/opnsense/www/js/widgets/BaseWidget.js b/src/opnsense/www/js/widgets/BaseWidget.js index 39c3f0b9b..16a69d440 100644 --- a/src/opnsense/www/js/widgets/BaseWidget.js +++ b/src/opnsense/www/js/widgets/BaseWidget.js @@ -34,6 +34,7 @@ export default class BaseWidget { this.eventSource = null; this.eventSourceUrl = null; this.eventSourceOnData = null; + this.cachedData = {}; } /* Public functions */ @@ -97,6 +98,20 @@ export default class BaseWidget { /* Utility/protected functions */ + dataChanged(id, data) { + if (id in this.cachedData) { + if (JSON.stringify(this.cachedData[id]) !== JSON.stringify(data)) { + this.cachedData[id] = data; + return true; + } + } else { + this.cachedData[id] = data; + return true; + } + + return false; + } + setWidgetConfig(config) { this.config['widget'] = config; } diff --git a/src/opnsense/www/js/widgets/Interfaces.js b/src/opnsense/www/js/widgets/Interfaces.js index 25b773675..99cb8a99d 100644 --- a/src/opnsense/www/js/widgets/Interfaces.js +++ b/src/opnsense/www/js/widgets/Interfaces.js @@ -51,6 +51,10 @@ export default class Interfaces extends BaseTableWidget { async onWidgetTick() { await ajaxGet('/api/interfaces/overview/interfacesInfo', {}, (data, status) => { + if (!this.dataChanged('interfaces', data)) { + return; + } + let rows = []; data.rows.map((intf_data) => { if (!intf_data.hasOwnProperty('config') || intf_data.enabled == false) { diff --git a/src/opnsense/www/js/widgets/Metadata/Core.xml b/src/opnsense/www/js/widgets/Metadata/Core.xml index e87c65841..831b403fb 100644 --- a/src/opnsense/www/js/widgets/Metadata/Core.xml +++ b/src/opnsense/www/js/widgets/Metadata/Core.xml @@ -16,7 +16,7 @@ System Information - name + Name Versions Updates Current date/time @@ -153,7 +153,7 @@ - CARP Status + Carp.js /api/diagnostics/interface/get_vip_status