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