mirror of
https://github.com/Akkadius/glass-isc-dhcp.git
synced 2025-07-27 15:44:32 +02:00
Statistics Page and API - MAC Address OUI Count by Vendor
This commit is contained in:
parent
7f0b98c597
commit
187ffb5f0e
37
api/get_mac_oui_count_by_vendor.js
Normal file
37
api/get_mac_oui_count_by_vendor.js
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
var express = require('express');
|
||||||
|
var router = express.Router();
|
||||||
|
var fs = require('fs');
|
||||||
|
|
||||||
|
router.get('/', function(req, res, next) {
|
||||||
|
|
||||||
|
var stat_data = {};
|
||||||
|
|
||||||
|
var count = 0;
|
||||||
|
for (var key in dhcp_lease_data) {
|
||||||
|
/* Mac OUI Lookup */
|
||||||
|
var mac_oui = dhcp_lease_data[key].mac.split(":").join("").toUpperCase().slice(0,6);
|
||||||
|
|
||||||
|
if(typeof stat_data[mac_oui] === "undefined")
|
||||||
|
stat_data[mac_oui] = {};
|
||||||
|
|
||||||
|
if(typeof stat_data[mac_oui].count === "undefined")
|
||||||
|
stat_data[mac_oui].count = 0;
|
||||||
|
|
||||||
|
stat_data[mac_oui].count++;
|
||||||
|
|
||||||
|
if(stat_data[mac_oui].mac_prefix !== "undefined") {
|
||||||
|
stat_data[mac_oui].mac_prefix = mac_oui;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(stat_data[mac_oui].vendor !== "undefined"){
|
||||||
|
if(typeof oui_data[mac_oui] !== "undefined") {
|
||||||
|
stat_data[mac_oui].vendor = oui_data[mac_oui];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.send(JSON.stringify(stat_data));
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
@ -15,7 +15,7 @@ router.get('/', function(req, res, next) {
|
|||||||
const execSync = require('child_process').execSync;
|
const execSync = require('child_process').execSync;
|
||||||
output = execSync('./bin/dhcpd-pools -c ' + glass_config.config_file + ' -l ' + glass_config.leases_file + ' -f j -A -s e');
|
output = execSync('./bin/dhcpd-pools -c ' + glass_config.config_file + ' -l ' + glass_config.leases_file + ' -f j -A -s e');
|
||||||
|
|
||||||
console.log(JSON.parse(output));
|
// console.log(JSON.parse(output));
|
||||||
|
|
||||||
res.send(JSON.stringify(JSON.parse(output)));
|
res.send(JSON.stringify(JSON.parse(output)));
|
||||||
});
|
});
|
||||||
|
1
app.js
1
app.js
@ -49,6 +49,7 @@ app.use('/glass_settings_save', require('./routes/glass_settings_save'));
|
|||||||
app.use('/api/get_active_leases/', require('./api/get_active_leases'));
|
app.use('/api/get_active_leases/', require('./api/get_active_leases'));
|
||||||
app.use('/api/get_subnet_details/', require('./api/get_subnet_details'));
|
app.use('/api/get_subnet_details/', require('./api/get_subnet_details'));
|
||||||
app.use('/api/get_vendor_count/', require('./api/get_vendor_count'));
|
app.use('/api/get_vendor_count/', require('./api/get_vendor_count'));
|
||||||
|
app.use('/api/get_mac_oui_count_by_vendor/', require('./api/get_mac_oui_count_by_vendor'));
|
||||||
|
|
||||||
app.set('view engine', 'html');
|
app.set('view engine', 'html');
|
||||||
|
|
||||||
|
@ -34,6 +34,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card">
|
||||||
|
<div class="header">
|
||||||
|
<h2>MAC Address OUI Count by Vendor</h2>
|
||||||
|
</div>
|
||||||
|
<div class="body">
|
||||||
|
<table id="device_list_mac" class="table table-bordered table-striped table-hover js-basic-example dataTable dashboard-task-infos">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>MAC Address OUI</th>
|
||||||
|
<th>Vendor</th>
|
||||||
|
<th>Count</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- #END# Donut Chart -->
|
<!-- #END# Donut Chart -->
|
||||||
</div>
|
</div>
|
||||||
@ -41,7 +59,6 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var chart_data = [];
|
var chart_data = [];
|
||||||
$.getJSON( "/api/get_vendor_count", function( data ) {
|
$.getJSON( "/api/get_vendor_count", function( data ) {
|
||||||
|
|
||||||
$.each(data, function(k, v) {
|
$.each(data, function(k, v) {
|
||||||
if(v >= 3)
|
if(v >= 3)
|
||||||
chart_data.push({"label": k, "value": v});
|
chart_data.push({"label": k, "value": v});
|
||||||
@ -59,12 +76,36 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
device_list = $('#device_list_table').DataTable({
|
device_list = $('#device_list_table').DataTable({
|
||||||
dom: 'tip',
|
dom: 'rftip',
|
||||||
responsive: true,
|
responsive: true,
|
||||||
"pageLength": 20,
|
"pageLength": 20,
|
||||||
"aaSorting": [],
|
"aaSorting": [],
|
||||||
"order": [[ 1, "desc" ]]
|
"order": [[ 1, "desc" ]],
|
||||||
|
"searching": true
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$.getJSON( "/api/get_mac_oui_count_by_vendor", function( data ) {
|
||||||
|
$.each(data, function(k, v) {
|
||||||
|
// console.log(k);
|
||||||
|
|
||||||
|
$('#device_list_mac > tbody:last-child').append('<tr>' +
|
||||||
|
'<td>' + data[k].mac_prefix + '</td>' +
|
||||||
|
'<td>' + data[k].vendor + '</td>' +
|
||||||
|
'<td>' + data[k].count.toLocaleString('en') + '</td>' +
|
||||||
|
'</tr>'
|
||||||
|
);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
device_list = $('#device_list_mac').DataTable({
|
||||||
|
dom: 'rftip',
|
||||||
|
responsive: true,
|
||||||
|
"pageLength": 20,
|
||||||
|
"aaSorting": [],
|
||||||
|
"order": [[ 2, "desc" ]]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
Loading…
x
Reference in New Issue
Block a user