From b74b803d6c6ddbc60a00283a8a881c7f736f3c64 Mon Sep 17 00:00:00 2001
From: "Jokob @NetAlertX" <96159884+jokob-sk@users.noreply.github.com>
Date: Fri, 27 Feb 2026 23:29:55 +0000
Subject: [PATCH] feat: Add devFlapping attribute to device management and
update related UI components
---
docs/DEVICE_DISPLAY_SETTINGS.md | 10 ++++++----
front/devices.php | 15 +++++++++++----
front/js/network-api.js | 16 +++++++++-------
front/js/network-init.js | 2 +-
front/js/network-tabs.js | 1 +
front/js/network-tree.js | 10 +++++++++-
front/js/ui_components.js | 20 ++++++++++++++++----
front/php/templates/language/ar_ar.json | 1 +
front/php/templates/language/ca_ca.json | 3 ++-
front/php/templates/language/cs_cz.json | 1 +
front/php/templates/language/de_de.json | 1 +
front/php/templates/language/en_us.json | 1 +
front/php/templates/language/es_es.json | 3 ++-
front/php/templates/language/fa_fa.json | 1 +
front/php/templates/language/fr_fr.json | 3 ++-
front/php/templates/language/it_it.json | 3 ++-
front/php/templates/language/ja_jp.json | 3 ++-
front/php/templates/language/nb_no.json | 1 +
front/php/templates/language/pl_pl.json | 1 +
front/php/templates/language/pt_br.json | 1 +
front/php/templates/language/pt_pt.json | 1 +
front/php/templates/language/ru_ru.json | 1 +
front/php/templates/language/sv_sv.json | 1 +
front/php/templates/language/tr_tr.json | 1 +
front/php/templates/language/uk_ua.json | 1 +
front/php/templates/language/vi_vn.json | 1 +
front/php/templates/language/zh_cn.json | 3 ++-
front/plugins/ui_settings/config.json | 3 ++-
server/api_server/graphql_endpoint.py | 2 +-
29 files changed, 82 insertions(+), 29 deletions(-)
diff --git a/docs/DEVICE_DISPLAY_SETTINGS.md b/docs/DEVICE_DISPLAY_SETTINGS.md
index 41eeb4db..e4ae9ba6 100755
--- a/docs/DEVICE_DISPLAY_SETTINGS.md
+++ b/docs/DEVICE_DISPLAY_SETTINGS.md
@@ -1,6 +1,6 @@
# Device Display Settings
-This set of settings allows you to group Devices under different views. The Archived toggle allows you to exclude a Device from most listings and notifications.
+This set of settings allows you to group Devices under different views. The Archived toggle allows you to exclude a Device from most listings and notifications.

@@ -12,9 +12,11 @@ This set of settings allows you to group Devices under different views. The Arch
1. 🔌 Online (Green) = A device that is no longer marked as a "New Device".
2. 🔌 New (Green) = A newly discovered device that is online and is still marked as a "New Device".
-3. ✖ New (Grey) = Same as No.2 but device is now offline.
-4. ✖ Offline (Grey) = A device that was not detected online in the last scan.
-5. ⚠ Down (Red) = A device that has "Alert Down" marked and has been offline for the time set in the Setting `NTFPRCS_alert_down_time`.
+3. 🔌(❕) Online (Orange) - The device is unstable and flapping (3 status changes in the last hour)
+4. ✖ New (Grey) = Same as No.2 but device is now offline.
+5. ✖ Offline (Grey) = A device that was not detected online in the last scan.
+6. ⚠ Down (Red) = A device that has "Alert Down" marked and has been offline for the time set in the Setting `NTFPRCS_alert_down_time`.
+
See also [Notification guide](./NOTIFICATIONS.md).
\ No newline at end of file
diff --git a/front/devices.php b/front/devices.php
index 08da9254..2fd16c46 100755
--- a/front/devices.php
+++ b/front/devices.php
@@ -547,6 +547,7 @@ function mapColumnIndexToFieldName(index, tableColumnVisible) {
"devVlan", // 30
"devPrimaryIPv4", // 31
"devPrimaryIPv6", // 32
+ "devFlapping", // 33
];
// console.log("OrderBy: " + columnNames[tableColumnOrder[index]]);
@@ -666,6 +667,7 @@ function initializeDatatable (status) {
devVlan
devPrimaryIPv4
devPrimaryIPv6
+ devFlapping
}
count
}
@@ -753,6 +755,7 @@ function initializeDatatable (status) {
device.devVlan || "",
device.devPrimaryIPv4 || "",
device.devPrimaryIPv6 || "",
+ device.devFlapping || 0,
];
const newRow = [];
@@ -821,6 +824,7 @@ function initializeDatatable (status) {
data-status="${rowData[mapIndx(10)]}"
data-present="${rowData[mapIndx(24)]}"
data-alert="${rowData[mapIndx(25)]}"
+ data-flapping="${rowData[mapIndx(33)]}"
data-icon="${rowData[mapIndx(3)]}">
${displayedValue}
@@ -964,12 +968,15 @@ function initializeDatatable (status) {
tmp_devPresentLastScan = rowData[mapIndx(24)]
tmp_devAlertDown = rowData[mapIndx(25)]
+ tmp_devMac = rowData[mapIndx(11)]
+ tmp_devFlapping = rowData[mapIndx(33)]
const badge = getStatusBadgeParts(
- rowData[mapIndx(24)], // tmp_devPresentLastScan
- rowData[mapIndx(25)], // tmp_devAlertDown
- rowData[mapIndx(11)], // MAC
- cellData // optional text
+ tmp_devPresentLastScan, // tmp_devPresentLastScan
+ tmp_devAlertDown, // tmp_devAlertDown
+ tmp_devFlapping, // tmp_devFlapping
+ tmp_devMac, // MAC
+ cellData // optional text
);
$(td).html (`${badge.iconHtml} ${badge.text}`);
diff --git a/front/js/network-api.js b/front/js/network-api.js
index ba8f9abe..4ed82e55 100644
--- a/front/js/network-api.js
+++ b/front/js/network-api.js
@@ -23,9 +23,10 @@ function loadNetworkNodes() {
LOWER(parent.devParentMAC) AS parent_mac,
parent.devIcon AS node_icon,
parent.devAlertDown AS node_alert,
+ parent.devFlapping AS node_flapping,
COUNT(child.devMac) AS node_ports_count
- FROM Devices AS parent
- LEFT JOIN Devices AS child
+ FROM DevicesView AS parent
+ LEFT JOIN DevicesView AS child
/* CRITICAL FIX: COLLATE NOCASE ensures the join works
even if devParentMAC is uppercase and devMac is lowercase
*/
@@ -33,7 +34,7 @@ function loadNetworkNodes() {
WHERE parent.devType IN (${networkDeviceTypes})
AND parent.devIsArchived = 0
GROUP BY parent.devMac, parent.devName, parent.devPresentLastScan,
- parent.devType, parent.devParentMAC, parent.devIcon, parent.devAlertDown
+ parent.devType, parent.devParentMAC, parent.devIcon, parent.devAlertDown, parent.devFlapping
ORDER BY parent.devName;
`;
@@ -143,6 +144,7 @@ function loadDeviceTable({ sql, containerSelector, tableId, wrapperHtml = null,
const badge = getStatusBadgeParts(
device.devPresentLastScan,
device.devAlertDown,
+ device.devFlapping,
device.devMac,
device.devStatus
);
@@ -202,8 +204,8 @@ function loadDeviceTable({ sql, containerSelector, tableId, wrapperHtml = null,
*/
function loadUnassignedDevices() {
const sql = `
- SELECT devMac, devPresentLastScan, devName, devLastIP, devVendor, devAlertDown, devParentPort
- FROM Devices
+ SELECT devMac, devPresentLastScan, devName, devLastIP, devVendor, devAlertDown, devParentPort, devFlapping, devStatus
+ FROM DevicesView
WHERE (devParentMAC IS NULL OR devParentMAC IN ("", " ", "undefined", "null"))
AND LOWER(devMac) NOT LIKE "%internet%"
AND devIsArchived = 0
@@ -237,7 +239,7 @@ function loadConnectedDevices(node_mac) {
const normalized_mac = node_mac.toLowerCase();
const sql = `
- SELECT devName, devMac, devLastIP, devVendor, devPresentLastScan, devAlertDown, devParentPort, devVlan,
+ SELECT devName, devMac, devLastIP, devVendor, devPresentLastScan, devAlertDown, devParentPort, devVlan, devFlapping,
CASE
WHEN devIsNew = 1 THEN 'New'
WHEN devPresentLastScan = 1 THEN 'On-line'
@@ -246,7 +248,7 @@ function loadConnectedDevices(node_mac) {
WHEN devPresentLastScan = 0 THEN 'Off-line'
ELSE 'Unknown status'
END AS devStatus
- FROM Devices
+ FROM DevicesView
/* Using COLLATE NOCASE here solves the 'TEXT' vs 'NOCASE' mismatch */
WHERE devParentMac = '${normalized_mac}' COLLATE NOCASE`;
diff --git a/front/js/network-init.js b/front/js/network-init.js
index 474aba27..b61ec9fe 100644
--- a/front/js/network-init.js
+++ b/front/js/network-init.js
@@ -32,7 +32,7 @@ function initNetworkTopology() {
WHEN devType IN (${networkDeviceTypes}) THEN 1
ELSE 0
END AS devIsNetworkNodeDynamic
- FROM Devices a
+ FROM DevicesView a
`;
diff --git a/front/js/network-tabs.js b/front/js/network-tabs.js
index b8907b77..f358a1ce 100644
--- a/front/js/network-tabs.js
+++ b/front/js/network-tabs.js
@@ -54,6 +54,7 @@ function renderNetworkTabContent(nodes) {
const badge = getStatusBadgeParts(
node.online,
node.node_alert,
+ node.node_flapping,
node.node_mac
);
diff --git a/front/js/network-tree.js b/front/js/network-tree.js
index 256fa85d..a20c3a24 100644
--- a/front/js/network-tree.js
+++ b/front/js/network-tree.js
@@ -72,6 +72,7 @@ function getChildren(node, list, path, visited = [])
ip: node.devLastIP,
status: node.devStatus,
presentLastScan: node.devPresentLastScan,
+ flapping: node.devFlapping,
alertDown: node.devAlertDown,
hasChildren: children.length > 0 || hiddenMacs.includes(node.devMac),
relType: node.devParentRelType,
@@ -266,7 +267,13 @@ function initTree(myHierarchy)
` : "";
- const badgeConf = getStatusBadgeParts(nodeData.data.presentLastScan, nodeData.data.alertDown, nodeData.data.mac, statusText = '')
+ const badgeConf = getStatusBadgeParts(
+ nodeData.data.presentLastScan,
+ nodeData.data.alertDown,
+ nodeData.data.flapping,
+ nodeData.data.mac,
+ statusText = ''
+ );
return result = `
${badge.iconHtml} ${badge.status}`
const html = `
diff --git a/front/php/templates/language/ar_ar.json b/front/php/templates/language/ar_ar.json
index 1391389a..d465e076 100644
--- a/front/php/templates/language/ar_ar.json
+++ b/front/php/templates/language/ar_ar.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "اسم النطاق الكامل",
"Device_TableHead_Favorite": "مفضل",
"Device_TableHead_FirstSession": "أول جلسة",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "معرف فريد",
"Device_TableHead_Group": "المجموعة",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/ca_ca.json b/front/php/templates/language/ca_ca.json
index c6d5fe9f..2d98f51c 100644
--- a/front/php/templates/language/ca_ca.json
+++ b/front/php/templates/language/ca_ca.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Favorit",
"Device_TableHead_FirstSession": "Primera Sessió",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Grup",
"Device_TableHead_IPv4": "IPv4",
@@ -790,4 +791,4 @@
"settings_system_label": "Sistema",
"settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. No hi ha validació.",
"test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració."
-}
+}
\ No newline at end of file
diff --git a/front/php/templates/language/cs_cz.json b/front/php/templates/language/cs_cz.json
index 06dd9a15..8d782439 100644
--- a/front/php/templates/language/cs_cz.json
+++ b/front/php/templates/language/cs_cz.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "",
"Device_TableHead_Favorite": "",
"Device_TableHead_FirstSession": "",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "",
"Device_TableHead_Group": "",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/de_de.json b/front/php/templates/language/de_de.json
index 19e1d12f..a4596ef0 100644
--- a/front/php/templates/language/de_de.json
+++ b/front/php/templates/language/de_de.json
@@ -229,6 +229,7 @@
"Device_TableHead_FQDN": "",
"Device_TableHead_Favorite": "Favorit",
"Device_TableHead_FirstSession": "Erste Sitzung",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Gruppe",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/en_us.json b/front/php/templates/language/en_us.json
index 8129a5fc..ce3f8a7f 100755
--- a/front/php/templates/language/en_us.json
+++ b/front/php/templates/language/en_us.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Favorite",
"Device_TableHead_FirstSession": "First Session",
+ "Device_TableHead_Flapping": "Flapping",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Group",
"Device_TableHead_IPv4": "IPv4",
diff --git a/front/php/templates/language/es_es.json b/front/php/templates/language/es_es.json
index 7c1add8f..a2fd036a 100644
--- a/front/php/templates/language/es_es.json
+++ b/front/php/templates/language/es_es.json
@@ -227,6 +227,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Favorito",
"Device_TableHead_FirstSession": "1ra. sesión",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Grupo",
"Device_TableHead_IPv4": "IPv4",
@@ -861,4 +862,4 @@
"settings_system_label": "Sistema",
"settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. O la validación no se realiza.",
"test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes."
-}
+}
\ No newline at end of file
diff --git a/front/php/templates/language/fa_fa.json b/front/php/templates/language/fa_fa.json
index e9e9fc84..62cac6f4 100644
--- a/front/php/templates/language/fa_fa.json
+++ b/front/php/templates/language/fa_fa.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "",
"Device_TableHead_Favorite": "",
"Device_TableHead_FirstSession": "",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "",
"Device_TableHead_Group": "",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/fr_fr.json b/front/php/templates/language/fr_fr.json
index 15070f2b..4aa95a79 100644
--- a/front/php/templates/language/fr_fr.json
+++ b/front/php/templates/language/fr_fr.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "Nom de domaine FQDN",
"Device_TableHead_Favorite": "Favori",
"Device_TableHead_FirstSession": "Première session",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Groupe",
"Device_TableHead_IPv4": "IPv4",
@@ -790,4 +791,4 @@
"settings_system_label": "Système",
"settings_update_item_warning": "Mettre à jour la valeur ci-dessous. Veillez à bien suivre le même format qu'auparavant. Il n'y a pas de pas de contrôle.",
"test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage."
-}
+}
\ No newline at end of file
diff --git a/front/php/templates/language/it_it.json b/front/php/templates/language/it_it.json
index b7ce9221..bb9233dd 100644
--- a/front/php/templates/language/it_it.json
+++ b/front/php/templates/language/it_it.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Preferito",
"Device_TableHead_FirstSession": "Prima sessione",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Gruppo",
"Device_TableHead_IPv4": "IPv4",
@@ -790,4 +791,4 @@
"settings_system_label": "Sistema",
"settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. La convalida non viene eseguita.",
"test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni."
-}
+}
\ No newline at end of file
diff --git a/front/php/templates/language/ja_jp.json b/front/php/templates/language/ja_jp.json
index 513399c5..061bc4d7 100644
--- a/front/php/templates/language/ja_jp.json
+++ b/front/php/templates/language/ja_jp.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "お気に入り",
"Device_TableHead_FirstSession": "初回セッション",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "グループ",
"Device_TableHead_IPv4": "IPv4",
@@ -790,4 +791,4 @@
"settings_system_label": "システム",
"settings_update_item_warning": "以下の値を更新してください。以前のフォーマットに従うよう注意してください。検証は行われません。",
"test_event_tooltip": "設定をテストする前に、まず変更を保存してください。"
-}
+}
\ No newline at end of file
diff --git a/front/php/templates/language/nb_no.json b/front/php/templates/language/nb_no.json
index 21b66914..1bd7b439 100644
--- a/front/php/templates/language/nb_no.json
+++ b/front/php/templates/language/nb_no.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "",
"Device_TableHead_Favorite": "Favoritt",
"Device_TableHead_FirstSession": "Første Økt",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Gruppe",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/pl_pl.json b/front/php/templates/language/pl_pl.json
index a208d6a2..c8160f43 100644
--- a/front/php/templates/language/pl_pl.json
+++ b/front/php/templates/language/pl_pl.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Ulubione",
"Device_TableHead_FirstSession": "Pierwsza sesja",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Grupa",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/pt_br.json b/front/php/templates/language/pt_br.json
index a6ccad5b..f61cc255 100644
--- a/front/php/templates/language/pt_br.json
+++ b/front/php/templates/language/pt_br.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "",
"Device_TableHead_Favorite": "Favorito",
"Device_TableHead_FirstSession": "Primeira sessão",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Grupo",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/pt_pt.json b/front/php/templates/language/pt_pt.json
index d311d2c9..fb0e54bf 100644
--- a/front/php/templates/language/pt_pt.json
+++ b/front/php/templates/language/pt_pt.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Favorito",
"Device_TableHead_FirstSession": "Primeira sessão",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Grupo",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/ru_ru.json b/front/php/templates/language/ru_ru.json
index 67034818..2b58b2d1 100644
--- a/front/php/templates/language/ru_ru.json
+++ b/front/php/templates/language/ru_ru.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Избранное",
"Device_TableHead_FirstSession": "Первый сеанс",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Группа",
"Device_TableHead_IPv4": "IPv4",
diff --git a/front/php/templates/language/sv_sv.json b/front/php/templates/language/sv_sv.json
index f38ce99e..bad46da0 100644
--- a/front/php/templates/language/sv_sv.json
+++ b/front/php/templates/language/sv_sv.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "",
"Device_TableHead_Favorite": "",
"Device_TableHead_FirstSession": "",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "",
"Device_TableHead_Group": "",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/tr_tr.json b/front/php/templates/language/tr_tr.json
index 8f50a7fc..92ed9d7c 100644
--- a/front/php/templates/language/tr_tr.json
+++ b/front/php/templates/language/tr_tr.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "",
"Device_TableHead_Favorite": "Favori",
"Device_TableHead_FirstSession": "İlk Oturum",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Grup",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/uk_ua.json b/front/php/templates/language/uk_ua.json
index 7fe0124e..e77981e6 100644
--- a/front/php/templates/language/uk_ua.json
+++ b/front/php/templates/language/uk_ua.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "Улюблений",
"Device_TableHead_FirstSession": "Перша сесія",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "Група",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/vi_vn.json b/front/php/templates/language/vi_vn.json
index f38ce99e..bad46da0 100644
--- a/front/php/templates/language/vi_vn.json
+++ b/front/php/templates/language/vi_vn.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "",
"Device_TableHead_Favorite": "",
"Device_TableHead_FirstSession": "",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "",
"Device_TableHead_Group": "",
"Device_TableHead_IPv4": "",
diff --git a/front/php/templates/language/zh_cn.json b/front/php/templates/language/zh_cn.json
index 91f28b9d..7e8c4345 100644
--- a/front/php/templates/language/zh_cn.json
+++ b/front/php/templates/language/zh_cn.json
@@ -225,6 +225,7 @@
"Device_TableHead_FQDN": "FQDN",
"Device_TableHead_Favorite": "收藏",
"Device_TableHead_FirstSession": "加入",
+ "Device_TableHead_Flapping": "",
"Device_TableHead_GUID": "GUID",
"Device_TableHead_Group": "组",
"Device_TableHead_IPv4": "IPv4",
@@ -790,4 +791,4 @@
"settings_system_label": "系统",
"settings_update_item_warning": "更新下面的值。请注意遵循先前的格式。未执行验证。",
"test_event_tooltip": "在测试设置之前,请先保存更改。"
-}
+}
\ No newline at end of file
diff --git a/front/plugins/ui_settings/config.json b/front/plugins/ui_settings/config.json
index 18cee2cb..3da0bff2 100755
--- a/front/plugins/ui_settings/config.json
+++ b/front/plugins/ui_settings/config.json
@@ -443,7 +443,8 @@
"Device_TableHead_ReqNicsOnline",
"Device_TableHead_Vlan",
"Device_TableHead_IPv4",
- "Device_TableHead_IPv6"
+ "Device_TableHead_IPv6",
+ "Device_TableHead_Flapping"
],
"localized": ["name", "description"],
"name": [
diff --git a/server/api_server/graphql_endpoint.py b/server/api_server/graphql_endpoint.py
index eab23791..074d601e 100755
--- a/server/api_server/graphql_endpoint.py
+++ b/server/api_server/graphql_endpoint.py
@@ -100,7 +100,7 @@ class Device(ObjectType):
devParentPortSource = String(description="Source tracking for devParentPort (USER, LOCKED, NEWDEV, or plugin prefix)")
devParentRelTypeSource = String(description="Source tracking for devParentRelType (USER, LOCKED, NEWDEV, or plugin prefix)")
devVlanSource = String(description="Source tracking for devVlan")
- devFlapping = String(description="ndicates flapping device (device changing between online/offline states frequently)")
+ devFlapping = Int(description="Indicates flapping device (device changing between online/offline states frequently)")
class DeviceResult(ObjectType):