mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
network page refactor
This commit is contained in:
@@ -16,6 +16,7 @@
|
|||||||
--color-green: #00a65a;
|
--color-green: #00a65a;
|
||||||
--color-yellow: #f39c12;
|
--color-yellow: #f39c12;
|
||||||
--color-red: #dd4b39;
|
--color-red: #dd4b39;
|
||||||
|
--color-gray: #8c8c8c;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-group .checkbox
|
.input-group .checkbox
|
||||||
@@ -1729,7 +1730,6 @@ input[readonly] {
|
|||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#hover-box
|
#hover-box
|
||||||
{
|
{
|
||||||
background-color: #ffffff;;
|
background-color: #ffffff;;
|
||||||
@@ -1773,11 +1773,31 @@ input[readonly] {
|
|||||||
right: 0;
|
right: 0;
|
||||||
margin-right: -3px;
|
margin-right: -3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* var(--color-aqua);
|
||||||
|
--color-aqua: #00c0ef;
|
||||||
|
--color-blue: #0060df;
|
||||||
|
--color-green: #00a65a;
|
||||||
|
--color-yellow: #f39c12;
|
||||||
|
--color-red: #dd4b39; */
|
||||||
|
|
||||||
|
#networkTree .node-inner.node-network-device:hover
|
||||||
|
{
|
||||||
|
box-shadow: var(--color-aqua) 0px 0px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#networkTree .node-inner.node-standard-device:hover
|
||||||
|
{
|
||||||
|
box-shadow: var(--color-gray) 0px 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
#networkTree .highlightedNode
|
#networkTree .highlightedNode
|
||||||
{
|
{
|
||||||
/* border: solid; */
|
/* border: solid; */
|
||||||
border-color:#3c8dbc;
|
border-color:#3c8dbc;
|
||||||
|
box-shadow: #3c8dbc 0px 0px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#networkTree .netStatus-Off-line i,
|
#networkTree .netStatus-Off-line i,
|
||||||
#networkTree .netStatus-Off-line svg
|
#networkTree .netStatus-Off-line svg
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -96,7 +96,7 @@
|
|||||||
DevDetail_MainInfo_Network_Title: {
|
DevDetail_MainInfo_Network_Title: {
|
||||||
data: ["devParentMAC", "devParentRelType", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
|
data: ["devParentMAC", "devParentRelType", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
||||||
iconClass: "fa fa-network-wired",
|
iconClass: "fa fa-sitemap fa-rotate-270",
|
||||||
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
inputClasses: "col-sm-8 col-xs-12 input-group"
|
inputClasses: "col-sm-8 col-xs-12 input-group"
|
||||||
|
|||||||
@@ -1209,7 +1209,7 @@ if (eventsList.length > 0) {
|
|||||||
eventIcon = "fa-square-up-right";
|
eventIcon = "fa-square-up-right";
|
||||||
break;
|
break;
|
||||||
case "go_to_node":
|
case "go_to_node":
|
||||||
eventIcon = "fa-network-wired";
|
eventIcon = "fa-sitemap fa-rotate-270";
|
||||||
break;
|
break;
|
||||||
case "run":
|
case "run":
|
||||||
eventIcon = "fa-play";
|
eventIcon = "fa-play";
|
||||||
|
|||||||
@@ -80,9 +80,6 @@
|
|||||||
// Smart TV (leaf) Switch 2 (node (for the PC) and leaf (for Switch 1))
|
// Smart TV (leaf) Switch 2 (node (for the PC) and leaf (for Switch 1))
|
||||||
// \
|
// \
|
||||||
// PC (leaf) <------- leafs are not included in this SQL query
|
// PC (leaf) <------- leafs are not included in this SQL query
|
||||||
|
|
||||||
|
|
||||||
const networkDeviceTypes = getSetting("NETWORK_DEVICE_TYPES").replace("[", "").replace("]", "");
|
|
||||||
const rawSql = `
|
const rawSql = `
|
||||||
SELECT node_name, node_mac, online, node_type, node_ports_count, parent_mac, node_icon, node_alert
|
SELECT node_name, node_mac, online, node_type, node_ports_count, parent_mac, node_icon, node_alert
|
||||||
FROM (
|
FROM (
|
||||||
@@ -162,35 +159,55 @@
|
|||||||
const badgeHtml = `<a href="${badge.url}" class="badge ${badge.cssClass}">${badge.iconHtml} ${badge.status}</a>`;
|
const badgeHtml = `<a href="${badge.url}" class="badge ${badge.cssClass}">${badge.iconHtml} ${badge.status}</a>`;
|
||||||
const parentId = node.parent_mac.replace(/:/g, '_');
|
const parentId = node.parent_mac.replace(/:/g, '_');
|
||||||
|
|
||||||
const paneHtml = `
|
isRootNode = node.parent_mac == "";
|
||||||
<div class="tab-pane box box-aqua box-body ${i === 0 ? 'active' : ''}" id="${id}">
|
|
||||||
<h2 class="page-header"><i class="fa fa-server"></i> ${getString('Network_Node')}</h2>
|
const paneHtml = `
|
||||||
<table class="table table-striped">
|
<div class="tab-pane box box-aqua box-body ${i === 0 ? 'active' : ''}" id="${id}">
|
||||||
<tbody>
|
<h2 class="page-header"><i class="fa fa-server"></i> ${getString('Network_Node')}</h2>
|
||||||
<tr><td><b>${getString('Network_Node')}</b></td><td><a href="./deviceDetails.php?mac=${node.node_mac}" class="anonymize">${node.node_name}</a></td></tr>
|
|
||||||
<tr><td><b>MAC</b></td><td class="anonymize">${node.node_mac}</td></tr>
|
<div class="mb-3 row">
|
||||||
<tr><td><b>${getString('Device_TableHead_Type')}</b></td><td>${node.node_type}</td></tr>
|
<label class="col-sm-3 col-form-label fw-bold">${getString('Network_Node')}</label>
|
||||||
<tr><td><b>${getString('Network_Table_State')}</b></td><td>${badgeHtml}</td></tr>
|
<div class="col-sm-9">
|
||||||
<tr><td><b>${getString('Network_Parent')}</b></td>
|
<a href="./deviceDetails.php?mac=${node.node_mac}" class="anonymize">${node.node_name}</a>
|
||||||
<td>
|
</div>
|
||||||
<a href="./network.php?mac=${parentId}">
|
</div>
|
||||||
<b class="anonymize"><span class="mac-to-name" my-data-mac="${node.parent_mac}">${node.parent_mac}</span>
|
|
||||||
<i class="fa fa-square-up-right"></i></b>
|
<div class="mb-3 row">
|
||||||
</a>
|
<label class="col-sm-3 col-form-label fw-bold">MAC</label>
|
||||||
</td></tr>
|
<div class="col-sm-9 anonymize">${node.node_mac}</div>
|
||||||
</tbody>
|
</div>
|
||||||
</table>
|
|
||||||
<div class=" box box-aqua box-body" id="connected">
|
<div class="mb-3 row">
|
||||||
<h3 class="page-header">
|
<label class="col-sm-3 col-form-label fw-bold">${getString('Device_TableHead_Type')}</label>
|
||||||
<i class="fa fa-sitemap"></i>
|
<div class="col-sm-9">${node.node_type}</div>
|
||||||
${getString('Network_Connected')}
|
</div>
|
||||||
</h3>
|
|
||||||
|
<div class="mb-3 row">
|
||||||
<div id="leafs_${id}">
|
<label class="col-sm-3 col-form-label fw-bold">${getString('Network_Table_State')}</label>
|
||||||
</div>
|
<div class="col-sm-9">${badgeHtml}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3 row">
|
||||||
|
<label class="col-sm-3 col-form-label fw-bold">${getString('Network_Parent')}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
${isRootNode ? '' : `<a class="anonymize" href="#">`}
|
||||||
|
<span my-data-mac="${node.parent_mac}" data-mytreemacmain="${node.parent_mac}" onclick="handleNodeClick(this)">
|
||||||
|
${isRootNode ? getString('Network_Root') : getNameByMacAddress(node.parent_mac)}
|
||||||
|
</span>
|
||||||
|
${isRootNode ? '' : `</a>`}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box box-aqua box-body" id="connected">
|
||||||
|
<h3 class="page-header">
|
||||||
|
<i class="fa fa-sitemap fa-rotate-270"></i>
|
||||||
|
${getString('Network_Connected')}
|
||||||
|
</h3>
|
||||||
|
<div id="leafs_${id}"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
</div>`;
|
|
||||||
|
|
||||||
$('.tab-content').append(paneHtml);
|
$('.tab-content').append(paneHtml);
|
||||||
loadConnectedDevices(node.node_mac);
|
loadConnectedDevices(node.node_mac);
|
||||||
@@ -305,7 +322,7 @@
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
<div id="unassignedDevices" class="box box-aqua box-body">
|
<div id="unassignedDevices" class="box box-aqua box-body">
|
||||||
<section>
|
<section>
|
||||||
<h3><i class="fa fa-laptop"></i> ${getString('Network_UnassignedDevices')}</h3>
|
<h3><i class="fa-solid fa-plug-circle-xmark"></i> ${getString('Network_UnassignedDevices')}</h3>
|
||||||
<table id="unassignedDevicesTable" class="table table-striped" width="100%"></table>
|
<table id="unassignedDevicesTable" class="table table-striped" width="100%"></table>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@@ -348,8 +365,11 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------
|
||||||
// INIT
|
// INIT
|
||||||
|
// -----------------------------------------------------------
|
||||||
|
|
||||||
|
const networkDeviceTypes = getSetting("NETWORK_DEVICE_TYPES").replace("[", "").replace("]", "");
|
||||||
const showArchived = getCache('showArchived') == "true";
|
const showArchived = getCache('showArchived') == "true";
|
||||||
const showOffline = getCache('showOffline') == "true";
|
const showOffline = getCache('showOffline') == "true";
|
||||||
|
|
||||||
@@ -378,7 +398,12 @@
|
|||||||
WHEN devAlertDown != 0 AND devPresentLastScan = 0 THEN "Down"
|
WHEN devAlertDown != 0 AND devPresentLastScan = 0 THEN "Down"
|
||||||
WHEN devPresentLastScan = 1 THEN "On-line"
|
WHEN devPresentLastScan = 1 THEN "On-line"
|
||||||
ELSE "Off-line"
|
ELSE "Off-line"
|
||||||
END as devStatus
|
END as devStatus,
|
||||||
|
CASE
|
||||||
|
WHEN devType IN (${networkDeviceTypes})
|
||||||
|
THEN 1
|
||||||
|
ELSE 0
|
||||||
|
END as devIsNetworkNodeDynamic
|
||||||
FROM Devices a
|
FROM Devices a
|
||||||
${whereClause}
|
${whereClause}
|
||||||
`;
|
`;
|
||||||
@@ -500,6 +525,7 @@ function getChildren(node, list, path, visited = [])
|
|||||||
parentMac: node.devParentMAC,
|
parentMac: node.devParentMAC,
|
||||||
icon: node.devIcon,
|
icon: node.devIcon,
|
||||||
type: node.devType,
|
type: node.devType,
|
||||||
|
devIsNetworkNodeDynamic: node.devIsNetworkNodeDynamic,
|
||||||
vendor: node.devVendor,
|
vendor: node.devVendor,
|
||||||
lastseen: node.devLastConnection,
|
lastseen: node.devLastConnection,
|
||||||
firstseen: node.devFirstConnection,
|
firstseen: node.devFirstConnection,
|
||||||
@@ -623,7 +649,7 @@ function initTree(myHierarchy)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle if only a few nodes
|
// handle canvas and node size if only a few nodes
|
||||||
emSize > 1 ? emSize = 1 : emSize = emSize;
|
emSize > 1 ? emSize = 1 : emSize = emSize;
|
||||||
|
|
||||||
let nodeHeightPx = emToPx(emSize*1);
|
let nodeHeightPx = emToPx(emSize*1);
|
||||||
@@ -671,12 +697,14 @@ function initTree(myHierarchy)
|
|||||||
selectedNodeMac = $(".nav-tabs-custom .active a").attr('data-mytabmac')
|
selectedNodeMac = $(".nav-tabs-custom .active a").attr('data-mytabmac')
|
||||||
|
|
||||||
highlightedCss = nodeData.data.mac == selectedNodeMac ?
|
highlightedCss = nodeData.data.mac == selectedNodeMac ?
|
||||||
" highlightedNode" : "";
|
" highlightedNode " : "";
|
||||||
|
cssNodeType = nodeData.data.devIsNetworkNodeDynamic ?
|
||||||
|
" node-network-device " : " node-standard-device ";
|
||||||
|
|
||||||
const badgeConf = getStatusBadgeParts(nodeData.data.presentLastScan, nodeData.data.alertDown, nodeData.data.mac, statusText = '')
|
const badgeConf = getStatusBadgeParts(nodeData.data.presentLastScan, nodeData.data.alertDown, nodeData.data.mac, statusText = '')
|
||||||
|
|
||||||
return result = `<div
|
return result = `<div
|
||||||
class="node-inner hover-node-info box pointer ${highlightedCss}"
|
class="node-inner hover-node-info box pointer ${highlightedCss} ${cssNodeType}"
|
||||||
style="height:${nodeHeightPx}px;font-size:${nodeHeightPx-5}px;"
|
style="height:${nodeHeightPx}px;font-size:${nodeHeightPx-5}px;"
|
||||||
onclick="handleNodeClick(this)"
|
onclick="handleNodeClick(this)"
|
||||||
data-mytreemacmain="${nodeData.data.mac}"
|
data-mytreemacmain="${nodeData.data.mac}"
|
||||||
@@ -685,6 +713,7 @@ function initTree(myHierarchy)
|
|||||||
data-mac="${nodeData.data.mac}"
|
data-mac="${nodeData.data.mac}"
|
||||||
data-vendor="${nodeData.data.vendor}"
|
data-vendor="${nodeData.data.vendor}"
|
||||||
data-type="${nodeData.data.type}"
|
data-type="${nodeData.data.type}"
|
||||||
|
data-devIsNetworkNodeDynamic="${nodeData.data.devIsNetworkNodeDynamic}"
|
||||||
data-lastseen="${nodeData.data.lastseen}"
|
data-lastseen="${nodeData.data.lastseen}"
|
||||||
data-firstseen="${nodeData.data.firstseen}"
|
data-firstseen="${nodeData.data.firstseen}"
|
||||||
data-relationship="${nodeData.data.relType}"
|
data-relationship="${nodeData.data.relType}"
|
||||||
@@ -769,22 +798,7 @@ function initTab()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
|
||||||
function initDeviceNamesFromMACs()
|
|
||||||
{
|
|
||||||
$('.mac-to-name').each(function() {
|
|
||||||
var dataMacValue = $(this).attr('my-data-mac');
|
|
||||||
|
|
||||||
if(dataMacValue =="" )
|
|
||||||
{
|
|
||||||
$(this).html(getString("Network_Root"))
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$(this).html(getNameByMacAddress(dataMacValue));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
function initSelectedNodeHighlighting()
|
function initSelectedNodeHighlighting()
|
||||||
@@ -835,9 +849,6 @@ function updateLeaf(leafMac, action) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// init device names where macs are used
|
|
||||||
initDeviceNamesFromMACs();
|
|
||||||
|
|
||||||
// init pop up hover boxes for device details
|
// init pop up hover boxes for device details
|
||||||
initHoverNodeInfo();
|
initHoverNodeInfo();
|
||||||
|
|
||||||
|
|||||||
@@ -332,7 +332,7 @@
|
|||||||
|
|
||||||
<!-- Network menu item -->
|
<!-- Network menu item -->
|
||||||
<li class=" <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('network.php') ) ){ echo 'active'; } ?>">
|
<li class=" <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('network.php') ) ){ echo 'active'; } ?>">
|
||||||
<a href="network.php"><i class="fa fa-fw fa-network-wired"></i> <span><?= lang('Navigation_Network');?></span></a>
|
<a href="network.php"><i class="fa fa-fw fa-sitemap fa-rotate-270"></i> <span><?= lang('Navigation_Network');?></span></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Maintenance menu item -->
|
<!-- Maintenance menu item -->
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ echo '<div class="box box-solid">
|
|||||||
// Network Hardware ----------------------------------------------------------
|
// Network Hardware ----------------------------------------------------------
|
||||||
echo '<div class="box box-solid">
|
echo '<div class="box box-solid">
|
||||||
<div class="box-header">
|
<div class="box-header">
|
||||||
<h3 class="box-title sysinfo_headline"><i class="fas fa-network-wired"></i> ' . lang('Systeminfo_Network_Hardware') . '</h3>
|
<h3 class="box-title sysinfo_headline"><i class="fa fa-sitemap fa-rotate-270"></i> ' . lang('Systeminfo_Network_Hardware') . '</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="box-body">
|
<div class="box-body">
|
||||||
<table id="networkTable" class="table table-bordered table-hover">
|
<table id="networkTable" class="table table-bordered table-hover">
|
||||||
|
|||||||
Reference in New Issue
Block a user