FE+BE: deviceDetials migration to graphQL endpoints

Signed-off-by: jokob-sk <jokob.sk@gmail.com>
This commit is contained in:
jokob-sk
2025-12-25 11:39:28 +11:00
parent d119708538
commit ee5de27413
4 changed files with 382 additions and 465 deletions

View File

@@ -31,7 +31,6 @@
$action = $_REQUEST['action'];
switch ($action) {
// check server/api_server/api_server_start.py for equivalents
case 'getServerDeviceData': getServerDeviceData(); break; // equivalent: get_device_data
case 'deleteDevice': deleteDevice(); break; // equivalent: delete_device(mac)
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break; // equivalent: delete_all_with_empty_macs
@@ -55,150 +54,6 @@
}
//------------------------------------------------------------------------------
// Query Device Data
//------------------------------------------------------------------------------
function getServerDeviceData() {
global $db;
// Request Parameters
$periodDate = getDateFromPeriod();
$mac = $_REQUEST['mac'];
// Check for "new" MAC case
if ($mac === "new") {
$now = date('Y-m-d H:i');
$deviceData = [
"devMac" => "",
"devName" => "",
"devOwner" => "",
"devType" => "",
"devVendor" => "",
"devFavorite" => 0,
"devGroup" => "",
"devComments" => "",
"devFirstConnection" => $now,
"devLastConnection" => $now,
"devLastIP" => "",
"devStaticIP" => 0,
"devScan" => 0,
"devLogEvents" => 0,
"devAlertEvents" => 0,
"devAlertDown" => 0,
"devParentRelType" => "default",
"devReqNicsOnline" => 0,
"devSkipRepeated" => 0,
"devLastNotification" => "",
"devPresentLastScan" => 0,
"devIsNew" => 1,
"devLocation" => "",
"devIsArchived" => 0,
"devParentMAC" => "",
"devParentPort" => "",
"devIcon" => "",
"devGUID" => "",
"devSite" => "",
"devSSID" => "",
"devSyncHubNode" => "",
"devSourcePlugin" => "",
"devCustomProps" => "",
"devStatus" => "Unknown",
"devIsRandomMAC" => false,
"devSessions" => 0,
"devEvents" => 0,
"devDownAlerts" => 0,
"devPresenceHours" => 0,
"devFQDN" => ""
];
echo json_encode($deviceData);
return;
}
// Get current date (used in presence calc)
$currentdate = date("Y-m-d H:i:s");
// Fetch Device Info + Children + Events Stats
$sql =<<<SQL
SELECT
d.rowid,
d.*,
CASE
WHEN d.devAlertDown != 0 AND d.devPresentLastScan = 0 THEN "Down"
WHEN d.devPresentLastScan = 1 THEN "On-line"
ELSE "Off-line"
END AS devStatus,
-- Event counters
(SELECT COUNT(*) FROM Sessions
WHERE ses_MAC = d.devMac AND (
ses_DateTimeConnection >= $periodDate OR
ses_DateTimeDisconnection >= $periodDate OR
ses_StillConnected = 1
)
) AS devSessions,
(SELECT COUNT(*) FROM Events
WHERE eve_MAC = d.devMac AND
eve_DateTime >= $periodDate AND
eve_EventType NOT IN ("Connected", "Disconnected")
) AS devEvents,
(SELECT COUNT(*) FROM Events
WHERE eve_MAC = d.devMac AND
eve_DateTime >= $periodDate AND
eve_EventType = "Device Down"
) AS devDownAlerts,
(SELECT CAST(( MAX (0, SUM (julianday (IFNULL (ses_DateTimeDisconnection,'$currentdate'))
- julianday (CASE WHEN ses_DateTimeConnection < $periodDate
THEN $periodDate
ELSE ses_DateTimeConnection END)) *24 )) AS INT)
FROM Sessions
WHERE ses_MAC = d.devMac AND
ses_DateTimeConnection IS NOT NULL AND
(ses_DateTimeDisconnection IS NOT NULL OR ses_StillConnected = 1) AND
(
ses_DateTimeConnection >= $periodDate OR
ses_DateTimeDisconnection >= $periodDate OR
ses_StillConnected = 1
)
) AS devPresenceHours
FROM Devices d
WHERE d.devMac = "$mac" OR CAST(d.rowid AS TEXT) = "$mac"
SQL;
$row = $db->query($sql)->fetchArray(SQLITE3_ASSOC);
$deviceData = $row;
$mac = $deviceData['devMac'];
$deviceData['devFirstConnection'] = formatDate($deviceData['devFirstConnection']);
$deviceData['devLastConnection'] = formatDate($deviceData['devLastConnection']);
$deviceData['devIsRandomMAC'] = isRandomMAC($mac);
// Fetch children once and split in PHP
$sql = 'SELECT rowid, * FROM Devices WHERE devParentMAC = "' . $mac . '" ORDER BY devPresentLastScan DESC';
$result = $db->query($sql);
$children = [];
$childrenNics = [];
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
$children[] = $row;
if ($row['devParentRelType'] === 'nic') {
$childrenNics[] = $row;
}
}
$deviceData['devChildrenDynamic'] = $children;
$deviceData['devChildrenNicsDynamic'] = $childrenNics;
// Return JSON
echo json_encode($deviceData);
}
//------------------------------------------------------------------------------
// Delete Device
//------------------------------------------------------------------------------