Skip to content

Commit 3775e21

Browse files
committed
feat: authoritative plugin fields
Signed-off-by: jokob-sk <jokob.sk@gmail.com>
1 parent 2acc180 commit 3775e21

File tree

11 files changed

+75
-70
lines changed

11 files changed

+75
-70
lines changed

front/deviceDetailsEdit.php

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ function getDeviceData() {
280280
const fieldName = setting.setKey.replace('NEWDEV_', '');
281281
if (trackedFields[fieldName] && fieldName !== "devFQDN" && mac != "new") {
282282
const sourceField = fieldName + "Source";
283+
283284
const currentSource = deviceData[sourceField] || "N/A";
284285
const isLocked = currentSource === "LOCKED";
285286
const lockIcon = isLocked ? "fa-lock" : "fa-lock-open";
@@ -302,12 +303,16 @@ function getDeviceData() {
302303
const fieldName2 = setting.setKey.replace('NEWDEV_', '');
303304
if (trackedFields[fieldName2] && mac != "new") {
304305
const sourceField = fieldName2 + "Source";
305-
const currentSource = deviceData[sourceField] || "N/A";
306-
const sourceTitle = getString("FieldLock_Source_Label") + currentSource;
307-
const sourceColor = currentSource === "USER" ? "text-warning" : (currentSource === "LOCKED" ? "text-danger" : "text-muted");
308-
inlineControl += `<span class="input-group-addon pointer ${sourceColor}" title="${sourceTitle}">
309-
${currentSource}
310-
</span>`;
306+
// only show if data available
307+
if (deviceData[sourceField] != "")
308+
{
309+
const currentSource = deviceData[sourceField] || "N/A";
310+
const sourceTitle = getString("FieldLock_Source_Label") + currentSource;
311+
const sourceColor = currentSource === "USER" ? "text-warning" : (currentSource === "LOCKED" ? "text-danger" : "text-muted");
312+
inlineControl += `<span class="input-group-addon pointer ${sourceColor}" title="${sourceTitle}">
313+
${currentSource}
314+
</span>`;
315+
}
311316
}
312317

313318
// handle devChildrenDynamic or NEWDEV_devChildrenNicsDynamic - selected values and options are the same

server/api_server/graphql_endpoint.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ class Device(ObjectType):
9292
devReqNicsOnline = Int(description="Required NICs online flag")
9393
devMacSource = String(description="Source tracking for devMac (USER, LOCKED, NEWDEV, or plugin prefix)")
9494
devNameSource = String(description="Source tracking for devName (USER, LOCKED, NEWDEV, or plugin prefix)")
95-
devFqdnSource = String(description="Source tracking for devFQDN (USER, LOCKED, NEWDEV, or plugin prefix)")
96-
devLastIpSource = String(description="Source tracking for devLastIP (USER, LOCKED, NEWDEV, or plugin prefix)")
95+
devFQDNSource = String(description="Source tracking for devFQDN (USER, LOCKED, NEWDEV, or plugin prefix)")
96+
devLastIPSource = String(description="Source tracking for devLastIP (USER, LOCKED, NEWDEV, or plugin prefix)")
9797
devVendorSource = String(description="Source tracking for devVendor (USER, LOCKED, NEWDEV, or plugin prefix)")
98-
devSsidSource = String(description="Source tracking for devSSID (USER, LOCKED, NEWDEV, or plugin prefix)")
99-
devParentMacSource = String(description="Source tracking for devParentMAC (USER, LOCKED, NEWDEV, or plugin prefix)")
98+
devSSIDSource = String(description="Source tracking for devSSID (USER, LOCKED, NEWDEV, or plugin prefix)")
99+
devParentMACSource = String(description="Source tracking for devParentMAC (USER, LOCKED, NEWDEV, or plugin prefix)")
100100
devParentPortSource = String(description="Source tracking for devParentPort (USER, LOCKED, NEWDEV, or plugin prefix)")
101101
devParentRelTypeSource = String(description="Source tracking for devParentRelType (USER, LOCKED, NEWDEV, or plugin prefix)")
102102
devVlanSource = String(description="Source tracking for devVlan")

server/api_server/openapi/schemas.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,11 +147,11 @@ class DeviceInfo(BaseModel):
147147
devStatus: Optional[str] = Field(None, description="Online/Offline status")
148148
devMacSource: Optional[str] = Field(None, description="Source of devMac (USER, LOCKED, or plugin prefix)")
149149
devNameSource: Optional[str] = Field(None, description="Source of devName")
150-
devFqdnSource: Optional[str] = Field(None, description="Source of devFQDN")
151-
devLastIpSource: Optional[str] = Field(None, description="Source of devLastIP")
150+
devFQDNSource: Optional[str] = Field(None, description="Source of devFQDN")
151+
devLastIPSource: Optional[str] = Field(None, description="Source of devLastIP")
152152
devVendorSource: Optional[str] = Field(None, description="Source of devVendor")
153-
devSsidSource: Optional[str] = Field(None, description="Source of devSSID")
154-
devParentMacSource: Optional[str] = Field(None, description="Source of devParentMAC")
153+
devSSIDSource: Optional[str] = Field(None, description="Source of devSSID")
154+
devParentMACSource: Optional[str] = Field(None, description="Source of devParentMAC")
155155
devParentPortSource: Optional[str] = Field(None, description="Source of devParentPort")
156156
devParentRelTypeSource: Optional[str] = Field(None, description="Source of devParentRelType")
157157
devVlanSource: Optional[str] = Field(None, description="Source of devVlan")

server/const.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@
9696
IFNULL(devReqNicsOnline, '') AS devReqNicsOnline,
9797
IFNULL(devMacSource, '') AS devMacSource,
9898
IFNULL(devNameSource, '') AS devNameSource,
99-
IFNULL(devFqdnSource, '') AS devFqdnSource,
100-
IFNULL(devLastIpSource, '') AS devLastIpSource,
99+
IFNULL(devFQDNSource, '') AS devFQDNSource,
100+
IFNULL(devLastIPSource, '') AS devLastIPSource,
101101
IFNULL(devVendorSource, '') AS devVendorSource,
102-
IFNULL(devSsidSource, '') AS devSsidSource,
103-
IFNULL(devParentMacSource, '') AS devParentMacSource,
102+
IFNULL(devSSIDSource, '') AS devSSIDSource,
103+
IFNULL(devParentMACSource, '') AS devParentMACSource,
104104
IFNULL(devParentPortSource, '') AS devParentPortSource,
105105
IFNULL(devParentRelTypeSource, '') AS devParentRelTypeSource,
106106
IFNULL(devVlanSource, '') AS devVlanSource,

server/db/authoritative_handler.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@
2424
FIELD_SOURCE_MAP = {
2525
"devMac": "devMacSource",
2626
"devName": "devNameSource",
27-
"devFQDN": "devFqdnSource",
28-
"devLastIP": "devLastIpSource",
27+
"devFQDN": "devFQDNSource",
28+
"devLastIP": "devLastIPSource",
2929
"devVendor": "devVendorSource",
30-
"devSSID": "devSsidSource",
31-
"devParentMAC": "devParentMacSource",
30+
"devSSID": "devSSIDSource",
31+
"devParentMAC": "devParentMACSource",
3232
"devParentPort": "devParentPortSource",
3333
"devParentRelType": "devParentRelTypeSource",
3434
"devVlan": "devVlanSource",

server/db/db_upgrade.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,11 @@
5050
"devSourcePlugin",
5151
"devMacSource",
5252
"devNameSource",
53-
"devFqdnSource",
54-
"devLastIpSource",
53+
"devFQDNSource",
54+
"devLastIPSource",
5555
"devVendorSource",
56-
"devSsidSource",
57-
"devParentMacSource",
56+
"devSSIDSource",
57+
"devParentMACSource",
5858
"devParentPortSource",
5959
"devParentRelTypeSource",
6060
"devVlanSource",

server/scan/device_handling.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ def exclude_ignored_devices(db):
115115
# ==========================================================
116116
"devLastIP": {
117117
"scan_col": "cur_IP",
118-
"source_col": "devLastIpSource",
118+
"source_col": "devLastIPSource",
119119
"empty_values": ["", "null", "(unknown)", "(Unknown)"],
120120
"priority": ["ARPSCAN", "NEWDEV", "N/A"],
121121
"default_value": "0.0.0.0",
@@ -177,7 +177,7 @@ def exclude_ignored_devices(db):
177177
# ==========================================================
178178
"devParentMAC": {
179179
"scan_col": "cur_NetworkNodeMAC",
180-
"source_col": "devParentMacSource",
180+
"source_col": "devParentMACSource",
181181
"empty_values": ["", "null"],
182182
"priority": ["SNMPDSC", "UNIFIAPI", "UNFIMP", "NEWDEV", "N/A"],
183183
},
@@ -801,11 +801,11 @@ def create_new_devices(db):
801801
devSourcePlugin,
802802
devMacSource,
803803
devNameSource,
804-
devFqdnSource,
805-
devLastIpSource,
804+
devFQDNSource,
805+
devLastIPSource,
806806
devVendorSource,
807-
devSsidSource,
808-
devParentMacSource,
807+
devSSIDSource,
808+
devParentMACSource,
809809
devParentPortSource,
810810
devParentRelTypeSource,
811811
devVlanSource,
@@ -1031,7 +1031,7 @@ def resolve_devices(devices, resolve_both_name_and_fqdn=True):
10311031
"devName", "devNameSource", plugin_settings
10321032
)
10331033
fqdn_clause = get_overwrite_sql_clause(
1034-
"devFQDN", "devFqdnSource", plugin_settings
1034+
"devFQDN", "devFQDNSource", plugin_settings
10351035
)
10361036

10371037
sql.executemany(
@@ -1048,9 +1048,9 @@ def resolve_devices(devices, resolve_both_name_and_fqdn=True):
10481048
WHEN {fqdn_clause} THEN ?
10491049
ELSE devFQDN
10501050
END,
1051-
devFqdnSource = CASE
1051+
devFQDNSource = CASE
10521052
WHEN {fqdn_clause} THEN ?
1053-
ELSE devFqdnSource
1053+
ELSE devFQDNSource
10541054
END
10551055
WHERE devMac = ?""",
10561056
plugin_records,
@@ -1079,7 +1079,7 @@ def resolve_devices(devices, resolve_both_name_and_fqdn=True):
10791079
for plugin_label, plugin_records in records_by_plugin.items():
10801080
plugin_settings = get_plugin_authoritative_settings(plugin_label)
10811081
fqdn_clause = get_overwrite_sql_clause(
1082-
"devFQDN", "devFqdnSource", plugin_settings
1082+
"devFQDN", "devFQDNSource", plugin_settings
10831083
)
10841084

10851085
# Apply FQDN-only updates
@@ -1089,9 +1089,9 @@ def resolve_devices(devices, resolve_both_name_and_fqdn=True):
10891089
WHEN {fqdn_clause} THEN ?
10901090
ELSE devFQDN
10911091
END,
1092-
devFqdnSource = CASE
1092+
devFQDNSource = CASE
10931093
WHEN {fqdn_clause} THEN ?
1094-
ELSE devFqdnSource
1094+
ELSE devFQDNSource
10951095
END
10961096
WHERE devMac = ?""",
10971097
plugin_records,

test/authoritative_fields/test_authoritative_handler.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,11 +129,11 @@ def test_all_tracked_fields_have_source_counterpart(self):
129129
expected_fields = {
130130
"devMac": "devMacSource",
131131
"devName": "devNameSource",
132-
"devFQDN": "devFqdnSource",
133-
"devLastIP": "devLastIpSource",
132+
"devFQDN": "devFQDNSource",
133+
"devLastIP": "devLastIPSource",
134134
"devVendor": "devVendorSource",
135-
"devSSID": "devSsidSource",
136-
"devParentMAC": "devParentMacSource",
135+
"devSSID": "devSSIDSource",
136+
"devParentMAC": "devParentMACSource",
137137
"devParentPort": "devParentPortSource",
138138
"devParentRelType": "devParentRelTypeSource",
139139
"devVlan": "devVlanSource",

test/authoritative_fields/test_device_field_lock.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,7 @@ def test_save_without_changes_does_not_mark_user(self, test_mac):
414414
device_data = device_handler.getDeviceData(test_mac)
415415
assert device_data.get("devNameSource") == "NEWDEV"
416416
assert device_data.get("devVendorSource") == "NEWDEV"
417-
assert device_data.get("devSsidSource") == "NEWDEV"
417+
assert device_data.get("devSSIDSource") == "NEWDEV"
418418

419419
# Simulate a UI "save" that resubmits the same values.
420420
update_result = device_handler.setDeviceData(
@@ -430,7 +430,7 @@ def test_save_without_changes_does_not_mark_user(self, test_mac):
430430
device_data = device_handler.getDeviceData(test_mac)
431431
assert device_data.get("devNameSource") == "NEWDEV"
432432
assert device_data.get("devVendorSource") == "NEWDEV"
433-
assert device_data.get("devSsidSource") == "NEWDEV"
433+
assert device_data.get("devSSIDSource") == "NEWDEV"
434434

435435
def test_only_changed_fields_marked_user(self, test_mac):
436436
"""When saving, only fields whose values changed should become USER."""
@@ -461,7 +461,7 @@ def test_only_changed_fields_marked_user(self, test_mac):
461461
device_data = device_handler.getDeviceData(test_mac)
462462
assert device_data.get("devNameSource") == "USER"
463463
assert device_data.get("devVendorSource") == "NEWDEV"
464-
assert device_data.get("devSsidSource") == "NEWDEV"
464+
assert device_data.get("devSSIDSource") == "NEWDEV"
465465

466466

467467
if __name__ == "__main__":

test/authoritative_fields/test_field_lock_scan_integration.py

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,19 @@ def scan_db():
3939
devNameSource TEXT DEFAULT 'NEWDEV',
4040
devVendor TEXT,
4141
devVendorSource TEXT DEFAULT 'NEWDEV',
42-
devLastIpSource TEXT DEFAULT 'NEWDEV',
42+
devLastIPSource TEXT DEFAULT 'NEWDEV',
4343
devType TEXT,
4444
devIcon TEXT,
4545
devParentPort TEXT,
4646
devParentPortSource TEXT DEFAULT 'NEWDEV',
4747
devParentMAC TEXT,
48-
devParentMacSource TEXT DEFAULT 'NEWDEV',
48+
devParentMACSource TEXT DEFAULT 'NEWDEV',
4949
devSite TEXT,
5050
devSiteSource TEXT DEFAULT 'NEWDEV',
5151
devSSID TEXT,
52-
devSsidSource TEXT DEFAULT 'NEWDEV',
52+
devSSIDSource TEXT DEFAULT 'NEWDEV',
5353
devFQDN TEXT,
54-
devFqdnSource TEXT DEFAULT 'NEWDEV',
54+
devFQDNSource TEXT DEFAULT 'NEWDEV',
5555
devParentRelType TEXT,
5656
devParentRelTypeSource TEXT DEFAULT 'NEWDEV',
5757
devVlan TEXT,
@@ -165,11 +165,11 @@ def scan_db_for_new_devices():
165165
devSourcePlugin TEXT,
166166
devMacSource TEXT,
167167
devNameSource TEXT,
168-
devFqdnSource TEXT,
169-
devLastIpSource TEXT,
168+
devFQDNSource TEXT,
169+
devLastIPSource TEXT,
170170
devVendorSource TEXT,
171-
devSsidSource TEXT,
172-
devParentMacSource TEXT,
171+
devSSIDSource TEXT,
172+
devParentMACSource TEXT,
173173
devParentPortSource TEXT,
174174
devParentRelTypeSource TEXT,
175175
devVlanSource TEXT,
@@ -304,12 +304,12 @@ def get_setting_value_side_effect(key):
304304
devMacSource,
305305
devNameSource,
306306
devVendorSource,
307-
devLastIpSource,
308-
devSsidSource,
309-
devParentMacSource,
307+
devLastIPSource,
308+
devSSIDSource,
309+
devParentMACSource,
310310
devParentPortSource,
311311
devParentRelTypeSource,
312-
devFqdnSource,
312+
devFQDNSource,
313313
devVlanSource
314314
FROM Devices WHERE devMac = ?
315315
""",
@@ -319,12 +319,12 @@ def get_setting_value_side_effect(key):
319319
assert row["devMacSource"] == "ARPSCAN"
320320
assert row["devNameSource"] == "ARPSCAN"
321321
assert row["devVendorSource"] == "ARPSCAN"
322-
assert row["devLastIpSource"] == "ARPSCAN"
323-
assert row["devSsidSource"] == "ARPSCAN"
324-
assert row["devParentMacSource"] == "ARPSCAN"
322+
assert row["devLastIPSource"] == "ARPSCAN"
323+
assert row["devSSIDSource"] == "ARPSCAN"
324+
assert row["devParentMACSource"] == "ARPSCAN"
325325
assert row["devParentPortSource"] == "ARPSCAN"
326326
assert row["devParentRelTypeSource"] == "NEWDEV"
327-
assert row["devFqdnSource"] == "NEWDEV"
327+
assert row["devFQDNSource"] == "NEWDEV"
328328
assert row["devVlanSource"] == "NEWDEV"
329329

330330

@@ -337,7 +337,7 @@ def test_scan_updates_newdev_device_name(scan_db, mock_device_handlers):
337337
"""
338338
INSERT INTO Devices (
339339
devMac, devLastConnection, devPresentLastScan, devLastIP,
340-
devName, devNameSource, devVendor, devVendorSource, devLastIpSource,
340+
devName, devNameSource, devVendor, devVendorSource, devLastIPSource,
341341
devType, devIcon, devParentPort, devParentMAC, devSite, devSSID
342342
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
343343
""",
@@ -412,7 +412,7 @@ def test_scan_does_not_update_user_field_name(scan_db, mock_device_handlers):
412412
"""
413413
INSERT INTO Devices (
414414
devMac, devLastConnection, devPresentLastScan, devLastIP,
415-
devName, devNameSource, devVendor, devVendorSource, devLastIpSource,
415+
devName, devNameSource, devVendor, devVendorSource, devLastIPSource,
416416
devType, devIcon, devParentPort, devParentMAC, devSite, devSSID
417417
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
418418
""",
@@ -487,7 +487,7 @@ def test_scan_does_not_update_locked_field(scan_db, mock_device_handlers):
487487
"""
488488
INSERT INTO Devices (
489489
devMac, devLastConnection, devPresentLastScan, devLastIP,
490-
devName, devNameSource, devVendor, devVendorSource, devLastIpSource,
490+
devName, devNameSource, devVendor, devVendorSource, devLastIPSource,
491491
devType, devIcon, devParentPort, devParentMAC, devSite, devSSID
492492
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
493493
""",
@@ -562,7 +562,7 @@ def test_scan_updates_empty_vendor_field(scan_db, mock_device_handlers):
562562
"""
563563
INSERT INTO Devices (
564564
devMac, devLastConnection, devPresentLastScan, devLastIP,
565-
devName, devNameSource, devVendor, devVendorSource, devLastIpSource,
565+
devName, devNameSource, devVendor, devVendorSource, devLastIPSource,
566566
devType, devIcon, devParentPort, devParentMAC, devSite, devSSID
567567
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
568568
""",
@@ -637,7 +637,7 @@ def test_scan_updates_ip_addresses(scan_db, mock_device_handlers):
637637
"""
638638
INSERT INTO Devices (
639639
devMac, devLastConnection, devPresentLastScan, devLastIP,
640-
devName, devNameSource, devVendor, devVendorSource, devLastIpSource,
640+
devName, devNameSource, devVendor, devVendorSource, devLastIPSource,
641641
devType, devIcon, devParentPort, devParentMAC, devSite, devSSID,
642642
devPrimaryIPv4, devPrimaryIPv6
643643
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -717,7 +717,7 @@ def test_scan_updates_ipv6_without_changing_ipv4(scan_db, mock_device_handlers):
717717
"""
718718
INSERT INTO Devices (
719719
devMac, devLastConnection, devPresentLastScan, devLastIP,
720-
devName, devNameSource, devVendor, devVendorSource, devLastIpSource,
720+
devName, devNameSource, devVendor, devVendorSource, devLastIPSource,
721721
devType, devIcon, devParentPort, devParentMAC, devSite, devSSID,
722722
devPrimaryIPv4, devPrimaryIPv6
723723
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
@@ -796,7 +796,7 @@ def test_scan_updates_presence_status(scan_db, mock_device_handlers):
796796
"""
797797
INSERT INTO Devices (
798798
devMac, devLastConnection, devPresentLastScan, devLastIP,
799-
devName, devNameSource, devVendor, devVendorSource, devLastIpSource,
799+
devName, devNameSource, devVendor, devVendorSource, devLastIPSource,
800800
devType, devIcon, devParentPort, devParentMAC, devSite, devSSID
801801
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
802802
""",
@@ -855,7 +855,7 @@ def test_scan_multiple_devices_mixed_sources(scan_db, mock_device_handlers):
855855
"""
856856
INSERT INTO Devices (
857857
devMac, devLastConnection, devPresentLastScan, devLastIP,
858-
devName, devNameSource, devVendor, devVendorSource, devLastIpSource,
858+
devName, devNameSource, devVendor, devVendorSource, devLastIPSource,
859859
devType, devIcon, devParentPort, devParentMAC, devSite, devSSID
860860
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
861861
""",

0 commit comments

Comments
 (0)