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