Fix async start bug(OUI), fix

1. When Glass starting, OUI base not loaded, cause concurency. Therefore the vendor is not defined.

2. When you have failover dhcp cluster, there is many junk records.
This commit is contained in:
mn.albeschenko 2021-05-12 17:01:18 +03:00
parent 10102a6709
commit b590ccfaf9
3 changed files with 42 additions and 31 deletions

17
app.js
View File

@ -125,14 +125,17 @@ let dhcp_log_watcher = require('./core/dhcp-log-watcher');
let app_timers = require('./core/app-timers');
/**
* Run routines
* Run routines in seq order
*/
oui_reader.initOuiDatabase();
dhcp_leases.parseLeasesFileOnce(glass_config);
dhcp_leases.startLeaseListener(glass_config);
dhcp_leases.setLeasesCleanTimer();
glass_config_watcher.init();
dhcp_log_watcher.init(glass_config);
(async () => {
await oui_reader.initOuiDatabase();
dhcp_leases.parseLeasesFileOnce(glass_config);
dhcp_leases.startLeaseListener(glass_config);
dhcp_leases.setLeasesCleanTimer();
glass_config_watcher.init();
dhcp_log_watcher.init(glass_config);
})();
/**
* Timers

View File

@ -77,13 +77,19 @@ module.exports = {
/* Mac OUI Lookup */
var mac_oui = dhcp_lease_data[ip_address].mac.split(":").join("").toUpperCase().slice(0, 6);
dhcp_lease_data[ip_address].mac_oui_vendor = '';
if (typeof oui_data[mac_oui] !== "undefined") {
dhcp_lease_data[ip_address].mac_oui_vendor = oui_data[mac_oui];
}
}
}
if (/binding/i.test(lines[l])) {
/* Need to ignore binding, when it is not first. Cause "next binding state expired" in Leases. */
if (line_data_arg[0] == "binding" && line_data_arg[2] != "active;") {
delete dhcp_lease_data[ip_address];
break;
}
}
if (/hostname/i.test(lines[l])) {
if (typeof line_data_arg[1] !== "undefined")
dhcp_lease_data[ip_address].host = line_data_arg[1].replace(/;/gi, '').replace(/"/gi, '').trim();

View File

@ -1,13 +1,13 @@
var fs = require('fs');
module.exports = {
initOuiDatabase: function () {
initOuiDatabase: async function () {
return new Promise((resolve) => {
var oui_database_file = "bin/oui_table.txt";
if (fs.existsSync(oui_database_file)) {
fs.readFile(oui_database_file, 'utf8', function (err, data) {
if (err) {
return console.log(err);
console.log(err);
}
else {
lines = data.split("\n");
@ -20,8 +20,10 @@ module.exports = {
oui_data[oui_line_data[0].trim()] = oui_line_data[1].trim();
}
console.log("[Glass Server] OUI Database Loaded");
resolve()
}
});
}
},
};
})
}
}