Updated "update" global db strategy, to allow for extra metadata fields to be unchanged
This commit is contained in:
parent
a8b91542fd
commit
5a7f5e7076
32
main.js
32
main.js
@ -21,16 +21,28 @@ function getDbPassword() {
|
||||
return base64Part.slice(-7,-1);
|
||||
}
|
||||
// Insert data into MariaDB
|
||||
async function insertToMariaDB(record) {
|
||||
async function updateMariaDB(record) {
|
||||
if (!['A', 'PTR', 'SRV', 'TXT'].includes(record.Type)) return;
|
||||
|
||||
const host = DB_USER;
|
||||
const { Type, Name } = record;
|
||||
const dataStr = typeof record.Data === 'object' ? JSON.stringify(record.Data) : record.Data;
|
||||
|
||||
try {
|
||||
await dbPool.execute(
|
||||
`REPLACE INTO ${DB_TABLE} (Host, Type, Name, Data) VALUES (?, ?, ?, ?);`,
|
||||
[DB_USER, record.Type, record.Name, dataStr]
|
||||
);
|
||||
// Step 1: Check if a row exists
|
||||
const [rows] = await dbPool.execute(`SELECT Data FROM ${DB_TABLE} WHERE Host = ? AND Type = ? AND Name = ?;`,[host, Type, Name]);
|
||||
|
||||
if (rows.length === 0) {
|
||||
// No existing row → INSERT
|
||||
await dbPool.execute(`INSERT INTO ${DB_TABLE} (Host, Type, Name, Data) VALUES (?, ?, ?, ?);`,[host, Type, Name, dataStr]);
|
||||
} else if (rows[0].Data !== dataStr) {
|
||||
// Row exists but Data is different → UPDATE
|
||||
await dbPool.execute(`UPDATE ${DB_TABLE} SET Data = ? WHERE Host = ? AND Type = ? AND Name = ?;`,[dataStr, host, Type, Name]);
|
||||
}
|
||||
// else: existing data is the same → do nothing
|
||||
|
||||
} catch (err) {
|
||||
console.error("DB Insert Error:", err);
|
||||
console.error("DB Update Error:", err);
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,7 +93,7 @@ function sniffmDNSLocalPackets() {
|
||||
// Add a new DEVICE to this SERVICE TYPE if needed
|
||||
if (!db.local.PTR[answer.name].includes(answer.data))
|
||||
db.local.PTR[answer.name].push(answer.data);
|
||||
await insertToMariaDB({Type: answer.type,Name: answer.name,Data: db.local.PTR[answer.name]});
|
||||
await updateMariaDB({Type: answer.type,Name: answer.name,Data: db.local.PTR[answer.name]});
|
||||
}
|
||||
}
|
||||
// 2. Handle DEVICE IP resolution
|
||||
@ -89,7 +101,7 @@ function sniffmDNSLocalPackets() {
|
||||
// 2.1 Initialize ADDRESSES sub-database
|
||||
if (!db.local.A) db.local.A = {};
|
||||
db.local.A[answer.name] = answer.data;
|
||||
await insertToMariaDB({Type: answer.type,Name: answer.name,Data: db.local.A[answer.name]});
|
||||
await updateMariaDB({Type: answer.type,Name: answer.name,Data: db.local.A[answer.name]});
|
||||
}
|
||||
|
||||
if (answer.type == "SRV") {
|
||||
@ -97,14 +109,14 @@ function sniffmDNSLocalPackets() {
|
||||
if (db.local[answer.name] === undefined) db.local[answer.name] = {"TXT":null,"SRV":null};
|
||||
|
||||
db.local[answer.name][answer.type] = answer.data;
|
||||
await insertToMariaDB({Type: answer.type,Name: answer.name,Data: db.local[answer.name][answer.type]});
|
||||
await updateMariaDB({Type: answer.type,Name: answer.name,Data: db.local[answer.name][answer.type]});
|
||||
}
|
||||
if (answer.type == "TXT") {
|
||||
// Initialize this device / entry, if needed
|
||||
if (db.local[answer.name] === undefined) db.local[answer.name] = {"TXT":null,"SRV":null};
|
||||
|
||||
db.local[answer.name][answer.type] = answer.data;
|
||||
await insertToMariaDB({Type: answer.type,Name: answer.name,Data: db.local[answer.name][answer.type]});
|
||||
await updateMariaDB({Type: answer.type,Name: answer.name,Data: db.local[answer.name][answer.type]});
|
||||
}
|
||||
|
||||
saveDbToFile(db,DB_FILENAME);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user