|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>NxDog | Network Monitoring</title> |
|
|
<script src="https://cdn.tailwindcss.com"></script> |
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
|
<style> |
|
|
.nxdog-bg { |
|
|
background-color: #1a1d24; |
|
|
} |
|
|
.panel { |
|
|
background-color: #23272f; |
|
|
border-radius: 4px; |
|
|
box-shadow: 0 1px 3px rgba(0,0,0,0.1); |
|
|
} |
|
|
.graph-container { |
|
|
height: 200px; |
|
|
position: relative; |
|
|
} |
|
|
.metric-card { |
|
|
transition: all 0.2s ease; |
|
|
} |
|
|
.metric-card:hover { |
|
|
transform: translateY(-2px); |
|
|
box-shadow: 0 4px 6px rgba(0,0,0,0.1); |
|
|
} |
|
|
.status-indicator { |
|
|
width: 8px; |
|
|
height: 8px; |
|
|
border-radius: 50%; |
|
|
display: inline-block; |
|
|
} |
|
|
.dropdown-menu { |
|
|
display: none; |
|
|
position: absolute; |
|
|
right: 0; |
|
|
z-index: 10; |
|
|
min-width: 200px; |
|
|
} |
|
|
.dropdown:hover .dropdown-menu { |
|
|
display: block; |
|
|
} |
|
|
.nav-tab { |
|
|
border-bottom: 3px solid transparent; |
|
|
transition: all 0.2s ease; |
|
|
} |
|
|
.nav-tab.active { |
|
|
border-bottom-color: #7746e1; |
|
|
color: white; |
|
|
} |
|
|
.nav-tab:hover:not(.active) { |
|
|
border-bottom-color: #4a5568; |
|
|
} |
|
|
.alert-badge { |
|
|
position: absolute; |
|
|
top: -5px; |
|
|
right: -5px; |
|
|
width: 16px; |
|
|
height: 16px; |
|
|
border-radius: 50%; |
|
|
font-size: 10px; |
|
|
display: flex; |
|
|
align-items: center; |
|
|
justify-content: center; |
|
|
} |
|
|
.tooltip { |
|
|
visibility: hidden; |
|
|
opacity: 0; |
|
|
transition: opacity 0.2s; |
|
|
} |
|
|
.has-tooltip:hover .tooltip { |
|
|
visibility: visible; |
|
|
opacity: 1; |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body class="nxdog-bg text-gray-300 font-sans"> |
|
|
<div class="min-h-screen flex flex-col"> |
|
|
|
|
|
<header class="bg-black py-2 px-4 border-b border-gray-800"> |
|
|
<div class="flex items-center justify-between"> |
|
|
<div class="flex items-center space-x-8"> |
|
|
<div class="flex items-center"> |
|
|
<div class="w-8 h-8 bg-purple-600 rounded-md flex items-center justify-center"> |
|
|
<i class="fas fa-chart-line text-white"></i> |
|
|
</div> |
|
|
<span class="ml-2 font-bold text-white">NxDog</span> |
|
|
</div> |
|
|
<nav class="hidden md:flex space-x-6"> |
|
|
<a href="#" class="text-white hover:text-gray-300">Dashboards</a> |
|
|
<a href="#" class="hover:text-gray-300">Infrastructure</a> |
|
|
<a href="#" class="hover:text-gray-300">Monitors</a> |
|
|
<a href="#" class="hover:text-gray-300">Events</a> |
|
|
<a href="#" class="hover:text-gray-300">Integrations</a> |
|
|
</nav> |
|
|
</div> |
|
|
<div class="flex items-center space-x-4"> |
|
|
<div class="relative"> |
|
|
<input type="text" placeholder="Search..." class="bg-gray-800 text-white px-3 py-1 rounded-md text-sm focus:outline-none focus:ring-1 focus:ring-purple-500 w-64"> |
|
|
<i class="fas fa-search absolute right-3 top-2 text-gray-400"></i> |
|
|
</div> |
|
|
<div class="relative"> |
|
|
<button class="relative p-1 text-gray-400 hover:text-white"> |
|
|
<i class="fas fa-bell text-lg"></i> |
|
|
<span class="alert-badge bg-red-500 text-white">3</span> |
|
|
</button> |
|
|
</div> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<div class="w-8 h-8 rounded-full bg-gray-700 flex items-center justify-center"> |
|
|
<i class="fas fa-user text-sm"></i> |
|
|
</div> |
|
|
<span class="hidden md:inline text-sm">Admin</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</header> |
|
|
|
|
|
|
|
|
<div class="py-4 px-6 border-b border-gray-800"> |
|
|
<div class="flex justify-between items-center"> |
|
|
<div> |
|
|
<h1 class="text-xl font-bold text-white">Network Monitoring Dashboard</h1> |
|
|
<div class="flex items-center space-x-4 mt-1"> |
|
|
<span class="text-sm text-gray-400">SNMP Metrics</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-0.5 rounded text-gray-300">prod-us-west</span> |
|
|
<span class="text-xs bg-gray-700 px-2 py-0.5 rounded text-gray-300">last updated: <span id="last-updated">just now</span></span> |
|
|
</div> |
|
|
</div> |
|
|
<div class="flex space-x-2"> |
|
|
<div class="relative"> |
|
|
<select class="bg-gray-800 border border-gray-700 text-white rounded-md px-3 py-1 text-sm focus:outline-none focus:ring-1 focus:ring-purple-500"> |
|
|
<option>Last 15 minutes</option> |
|
|
<option selected>Last 1 hour</option> |
|
|
<option>Last 4 hours</option> |
|
|
<option>Last 24 hours</option> |
|
|
</select> |
|
|
</div> |
|
|
<button class="bg-gray-800 hover:bg-gray-700 text-white px-3 py-1 rounded-md text-sm flex items-center space-x-1"> |
|
|
<i class="fas fa-sync-alt"></i> |
|
|
<span class="hidden md:inline">Refresh</span> |
|
|
</button> |
|
|
<button class="bg-gray-800 hover:bg-gray-700 text-white px-3 py-1 rounded-md text-sm flex items-center space-x-1"> |
|
|
<i class="fas fa-share-alt"></i> |
|
|
<span class="hidden md:inline">Share</span> |
|
|
</button> |
|
|
<button class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1 rounded-md text-sm flex items-center space-x-1"> |
|
|
<i class="fas fa-plus"></i> |
|
|
<span class="hidden md:inline">New</span> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
<div class="flex space-x-6 mt-4 border-b border-gray-800"> |
|
|
<a href="#" class="nav-tab active pb-2 text-sm font-medium">Overview</a> |
|
|
<a href="#" class="nav-tab pb-2 text-sm font-medium">Routers</a> |
|
|
<a href="#" class="nav-tab pb-2 text-sm font-medium">Switches</a> |
|
|
<a href="#" class="nav-tab pb-2 text-sm font-medium">Firewalls</a> |
|
|
<a href="#" class="nav-tab pb-2 text-sm font-medium">Interfaces</a> |
|
|
<a href="#" class="nav-tab pb-2 text-sm font-medium">Alerts</a> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="flex-1 p-6"> |
|
|
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-6"> |
|
|
|
|
|
<div class="panel metric-card p-4"> |
|
|
<div class="flex justify-between items-start"> |
|
|
<div> |
|
|
<h3 class="text-gray-400 text-xs uppercase tracking-wider">Devices Online</h3> |
|
|
<p class="text-2xl font-bold text-white">42</p> |
|
|
</div> |
|
|
<div class="text-green-500 text-xl"> |
|
|
<i class="fas fa-server"></i> |
|
|
</div> |
|
|
</div> |
|
|
<div class="mt-2 flex items-center"> |
|
|
<span class="status-indicator bg-green-500 mr-1"></span> |
|
|
<span class="text-xs text-gray-400">All systems operational</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="panel metric-card p-4"> |
|
|
<div class="flex justify-between items-start"> |
|
|
<div> |
|
|
<h3 class="text-gray-400 text-xs uppercase tracking-wider">Avg CPU %</h3> |
|
|
<p class="text-2xl font-bold text-white"><span id="avg-cpu">32</span>%</p> |
|
|
</div> |
|
|
<div class="text-yellow-500 text-xl"> |
|
|
<i class="fas fa-microchip"></i> |
|
|
</div> |
|
|
</div> |
|
|
<div class="mt-2 flex items-center"> |
|
|
<span class="status-indicator bg-yellow-500 mr-1"></span> |
|
|
<span class="text-xs text-gray-400">2 devices > 70%</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="panel metric-card p-4"> |
|
|
<div class="flex justify-between items-start"> |
|
|
<div> |
|
|
<h3 class="text-gray-400 text-xs uppercase tracking-wider">Bandwidth Util</h3> |
|
|
<p class="text-2xl font-bold text-white"><span id="avg-bandwidth">45</span>%</p> |
|
|
</div> |
|
|
<div class="text-blue-400 text-xl"> |
|
|
<i class="fas fa-network-wired"></i> |
|
|
</div> |
|
|
</div> |
|
|
<div class="mt-2 flex items-center"> |
|
|
<span class="status-indicator bg-green-500 mr-1"></span> |
|
|
<span class="text-xs text-gray-400">Peak: 78%</span> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="panel metric-card p-4"> |
|
|
<div class="flex justify-between items-start"> |
|
|
<div> |
|
|
<h3 class="text-gray-400 text-xs uppercase tracking-wider">Error Rate</h3> |
|
|
<p class="text-2xl font-bold text-white"><span id="error-rate">0.12</span>%</p> |
|
|
</div> |
|
|
<div class="text-red-400 text-xl"> |
|
|
<i class="fas fa-exclamation-triangle"></i> |
|
|
</div> |
|
|
</div> |
|
|
<div class="mt-2 flex items-center"> |
|
|
<span class="status-indicator bg-yellow-500 mr-1"></span> |
|
|
<span class="text-xs text-gray-400">3 interfaces > 1%</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-4 mb-6"> |
|
|
|
|
|
<div class="panel"> |
|
|
<div class="p-3 border-b border-gray-800 flex justify-between items-center"> |
|
|
<h2 class="font-semibold text-white">Network Traffic (bps)</h2> |
|
|
<div class="flex space-x-2"> |
|
|
<div class="dropdown relative"> |
|
|
<button class="text-gray-400 hover:text-white text-sm"> |
|
|
<i class="fas fa-ellipsis-h"></i> |
|
|
</button> |
|
|
<div class="dropdown-menu mt-1 bg-gray-800 rounded-md shadow-lg py-1"> |
|
|
<a href="#" class="block px-4 py-2 text-sm text-gray-300 hover:bg-gray-700">View in Metrics</a> |
|
|
<a href="#" class="block px-4 py-2 text-sm text-gray-300 hover:bg-gray-700">Edit</a> |
|
|
<a href="#" class="block px-4 py-2 text-sm text-gray-300 hover:bg-gray-700">Export</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="p-3"> |
|
|
<div class="flex items-center space-x-4 mb-2"> |
|
|
<div class="flex items-center"> |
|
|
<span class="w-3 h-3 rounded-full bg-blue-500 mr-1"></span> |
|
|
<span class="text-xs">Inbound</span> |
|
|
</div> |
|
|
<div class="flex items-center"> |
|
|
<span class="w-3 h-3 rounded-full bg-purple-500 mr-1"></span> |
|
|
<span class="text-xs">Outbound</span> |
|
|
</div> |
|
|
</div> |
|
|
<div class="graph-container" id="traffic-graph"></div> |
|
|
<div class="flex justify-between text-xs text-gray-400 mt-2"> |
|
|
<span>Min: 1.2 Gbps</span> |
|
|
<span>Avg: 2.8 Gbps</span> |
|
|
<span>Max: 4.5 Gbps</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="panel"> |
|
|
<div class="p-3 border-b border-gray-800 flex justify-between items-center"> |
|
|
<h2 class="font-semibold text-white">Interface Errors</h2> |
|
|
<div class="flex space-x-2"> |
|
|
<div class="dropdown relative"> |
|
|
<button class="text-gray-400 hover:text-white text-sm"> |
|
|
<i class="fas fa-ellipsis-h"></i> |
|
|
</button> |
|
|
<div class="dropdown-menu mt-1 bg-gray-800 rounded-md shadow-lg py-1"> |
|
|
<a href="#" class="block px-4 py-2 text-sm text-gray-300 hover:bg-gray-700">View in Metrics</a> |
|
|
<a href="#" class="block px-4 py-2 text-sm text-gray-300 hover:bg-gray-700">Edit</a> |
|
|
<a href="#" class="block px-4 py-2 text-sm text-gray-300 hover:bg-gray-700">Export</a> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
<div class="p-3"> |
|
|
<div class="flex items-center space-x-4 mb-2"> |
|
|
<div class="flex items-center"> |
|
|
<span class="w-3 h-3 rounded-full bg-red-400 mr-1"></span> |
|
|
<span class="text-xs">Errors</span> |
|
|
</div> |
|
|
<div class="flex items-center"> |
|
|
<span class="w-3 h-3 rounded-full bg-yellow-500 mr-1"></span> |
|
|
<span class="text-xs">Discards</span> |
|
|
</div> |
|
|
</div> |
|
|
<div class="graph-container" id="errors-graph"></div> |
|
|
<div class="flex justify-between text-xs text-gray-400 mt-2"> |
|
|
<span>Core Switch 1: 12 errors</span> |
|
|
<span>Edge Router 3: 8 errors</span> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="grid grid-cols-1 lg:grid-cols-3 gap-4 mb-6"> |
|
|
|
|
|
<div class="panel"> |
|
|
<div class="p-3 border-b border-gray-800 flex justify-between items-center"> |
|
|
<h2 class="font-semibold text-white">Device CPU Load</h2> |
|
|
<div class="flex space-x-2"> |
|
|
<button class="text-gray-400 hover:text-white text-sm"> |
|
|
<i class="fas fa-ellipsis-h"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
<div class="p-3"> |
|
|
<div class="graph-container" id="cpu-graph"></div> |
|
|
<div class="grid grid-cols-3 gap-2 mt-2"> |
|
|
<div class="text-center"> |
|
|
<div class="text-xs text-gray-400">Core Router 1</div> |
|
|
<div class="font-bold text-sm"><span class="text-yellow-500">78%</span></div> |
|
|
</div> |
|
|
<div class="text-center"> |
|
|
<div class="text-xs text-gray-400">Firewall 2</div> |
|
|
<div class="font-bold text-sm"><span class="text-green-500">42%</span></div> |
|
|
</div> |
|
|
<div class="text-center"> |
|
|
<div class="text-xs text-gray-400">Switch 5</div> |
|
|
<div class="font-bold text-sm"><span class="text-red-500">85%</span></div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="panel"> |
|
|
<div class="p-3 border-b border-gray-800 flex justify-between items-center"> |
|
|
<h2 class="font-semibold text-white">Memory Utilization</h2> |
|
|
<div class="flex space-x-2"> |
|
|
<button class="text-gray-400 hover:text-white text-sm"> |
|
|
<i class="fas fa-ellipsis-h"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
<div class="p-3"> |
|
|
<div class="graph-container" id="memory-graph"></div> |
|
|
<div class="grid grid-cols-3 gap-2 mt-2"> |
|
|
<div class="text-center"> |
|
|
<div class="text-xs text-gray-400">Used</div> |
|
|
<div class="font-bold text-sm">65%</div> |
|
|
</div> |
|
|
<div class="text-center"> |
|
|
<div class="text-xs text-gray-400">Free</div> |
|
|
<div class="font-bold text-sm">35%</div> |
|
|
</div> |
|
|
<div class="text-center"> |
|
|
<div class="text-xs text-gray-400">Peak</div> |
|
|
<div class="font-bold text-sm">82%</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="panel"> |
|
|
<div class="p-3 border-b border-gray-800 flex justify-between items-center"> |
|
|
<h2 class="font-semibold text-white">Top Interfaces by Traffic</h2> |
|
|
<div class="flex space-x-2"> |
|
|
<button class="text-gray-400 hover:text-white text-sm"> |
|
|
<i class="fas fa-ellipsis-h"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
<div class="p-3"> |
|
|
<div class="space-y-3"> |
|
|
<div> |
|
|
<div class="flex justify-between text-xs mb-1"> |
|
|
<span>eth0 - Core Switch 1</span> |
|
|
<span class="font-bold">4.2 Gbps</span> |
|
|
</div> |
|
|
<div class="w-full bg-gray-700 rounded-full h-1.5"> |
|
|
<div class="bg-blue-500 h-1.5 rounded-full" style="width: 84%"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div> |
|
|
<div class="flex justify-between text-xs mb-1"> |
|
|
<span>Gig1/0/24 - Edge Router 2</span> |
|
|
<span class="font-bold">3.8 Gbps</span> |
|
|
</div> |
|
|
<div class="w-full bg-gray-700 rounded-full h-1.5"> |
|
|
<div class="bg-blue-500 h-1.5 rounded-full" style="width: 76%"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div> |
|
|
<div class="flex justify-between text-xs mb-1"> |
|
|
<span Port-channel5 - Dist Switch</span> |
|
|
<span class="font-bold">3.1 Gbps</span> |
|
|
</div> |
|
|
<div class="w-full bg-gray-700 rounded-full h-1.5"> |
|
|
<div class="bg-blue-500 h-1.5 rounded-full" style="width: 62%"></div> |
|
|
</div> |
|
|
</div> |
|
|
<div> |
|
|
<div class="flex justify-between text-xs mb-1"> |
|
|
<span>VLAN100 - Firewall 1</span> |
|
|
<span class="font-bold">2.7 Gbps</span> |
|
|
</div> |
|
|
<div class="w-full bg-gray-700 rounded-full h-1.5"> |
|
|
<div class="bg-blue-500 h-1.5 rounded-full" style="width: 54%"></div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="panel mb-6"> |
|
|
<div class="p-3 border-b border-gray-800 flex justify-between items-center"> |
|
|
<h2 class="font-semibold text-white">Network Device Status</h2> |
|
|
<div class="flex space-x-2"> |
|
|
<button class="text-gray-400 hover:text-white text-sm"> |
|
|
<i class="fas fa-ellipsis-h"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
<div class="p-3 overflow-x-auto"> |
|
|
<table class="min-w-full divide-y divide-gray-800"> |
|
|
<thead> |
|
|
<tr> |
|
|
<th class="px-4 py-2 text-left text-xs font-medium text-gray-400 uppercase tracking-wider">Device</th> |
|
|
<th class="px-4 py-2 text-left text-xs font-medium text-gray-400 uppercase tracking-wider">Type</th> |
|
|
<th class="px-4 py-2 text-left text-xs font-medium text-gray-400 uppercase tracking-wider">Status</th> |
|
|
<th class="px-4 py-2 text-left text-xs font-medium text-gray-400 uppercase tracking-wider">CPU %</th> |
|
|
<th class="px-4 py-2 text-left text-xs font-medium text-gray-400 uppercase tracking-wider">Memory %</th> |
|
|
<th class="px极速赛车开 |
|
|
</html> |