Skip to content

Commit 55df246

Browse files
committed
[mikrotik-dhcp] update lease db on changes
1 parent ef3241d commit 55df246

7 files changed

Lines changed: 49 additions & 3 deletions

File tree

‎src/modules/mikrotik-dhcp/TODO.md‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
- add historical entries to CHANGELOG.md
22
- add dhcp pool number left to mikrotik dhcp module
33
- mikrotik-dhcp should warn when pools are full
4-
- update db on lease changes
54
- add heartbeat status check and worker task

‎src/modules/mikrotik-dhcp/container/services/lease-add.js‎

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use strict";
22

3+
const mongoCollection = require("@core/mongo-collection");
34
const RouterOSApi = require("@core/routeros-api");
45
const configGet = require("@core/config-get");
56
const logger = require("@core/logger")(module);
@@ -39,8 +40,27 @@ module.exports = async (params) => {
3940

4041
logger.debug(`Adding lease with params ${JSON.stringify(params)}`);
4142

42-
await routerOsApi.run("/ip/dhcp-server/lease/add", paramArray);
43+
const result = await routerOsApi.run("/ip/dhcp-server/lease/add", paramArray);
4344
logger.info(`Added lease for address ${params.address}`);
45+
46+
const newId = result?.[0]?.ret;
47+
if (newId) {
48+
const dbLeases = await mongoCollection("leases");
49+
const dbServers = await mongoCollection("servers");
50+
const server = params.server ? await dbServers.findOne({ id: params.server }) : null;
51+
await dbLeases.insertOne({
52+
id: newId,
53+
address: params.address,
54+
"mac-address": params["mac-address"],
55+
disabled: params.disabled ?? false,
56+
dynamic: false,
57+
server: server ? server.name : "all",
58+
"address-lists": params["address-lists"] || [],
59+
comment: params.comment || "",
60+
lastUpdated: new Date(),
61+
});
62+
}
63+
4464
return true;
4565
} catch (err) {
4666
err.message = err.stack || err.message;

‎src/modules/mikrotik-dhcp/container/services/lease-comment.js‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use strict";
22

3+
const mongoCollection = require("@core/mongo-collection");
34
const RouterOSApi = require("@core/routeros-api");
45
const configGet = require("@core/config-get");
56
const logger = require("@core/logger")(module);
@@ -21,7 +22,9 @@ module.exports = async (leaseId, comment) => {
2122

2223
await routerOsApi.run("/ip/dhcp-server/lease/set", [`=numbers=${leaseId}`, `=comment=${comment ? comment : ""}`]);
2324

24-
//TODO update db
25+
const dbLeases = await mongoCollection("leases");
26+
await dbLeases.updateOne({ id: leaseId }, { $set: { comment: comment || "", lastUpdated: new Date() } });
27+
2528
return true;
2629
} catch (err) {
2730
err.message = err.stack || err.message;

‎src/modules/mikrotik-dhcp/container/services/lease-disable.js‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use strict";
22

3+
const mongoCollection = require("@core/mongo-collection");
34
const RouterOSApi = require("@core/routeros-api");
45
const configGet = require("@core/config-get");
56
const logger = require("@core/logger")(module);
@@ -21,6 +22,10 @@ module.exports = async (leaseId) => {
2122

2223
await routerOsApi.run("/ip/dhcp-server/lease/disable", ["=numbers=" + leaseId]);
2324
logger.info(`Disabled lease id ${leaseId}`);
25+
26+
const dbLeases = await mongoCollection("leases");
27+
await dbLeases.updateOne({ id: leaseId }, { $set: { disabled: true, lastUpdated: new Date() } });
28+
2429
return true;
2530
} catch (err) {
2631
err.message = err.stack || err.message;

‎src/modules/mikrotik-dhcp/container/services/lease-enable.js‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use strict";
22

3+
const mongoCollection = require("@core/mongo-collection");
34
const RouterOSApi = require("@core/routeros-api");
45
const configGet = require("@core/config-get");
56
const logger = require("@core/logger")(module);
@@ -21,6 +22,10 @@ module.exports = async (leaseId) => {
2122

2223
await routerOsApi.run("/ip/dhcp-server/lease/enable", ["=numbers=" + leaseId]);
2324
logger.info(`Enabled lease id ${leaseId}`);
25+
26+
const dbLeases = await mongoCollection("leases");
27+
await dbLeases.updateOne({ id: leaseId }, { $set: { disabled: false, lastUpdated: new Date() } });
28+
2429
return true;
2530
} catch (err) {
2631
err.message = err.stack || err.message;

‎src/modules/mikrotik-dhcp/container/services/lease-makestatic.js‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"use strict";
22

3+
const mongoCollection = require("@core/mongo-collection");
34
const RouterOSApi = require("@core/routeros-api");
45
const configGet = require("@core/config-get");
56
const logger = require("@core/logger")(module);
@@ -23,6 +24,9 @@ module.exports = async (leaseId) => {
2324
await routerOsApi.run("/ip/dhcp-server/lease/make-static", ["=numbers=" + leaseId]);
2425
logger.info(`Made lease id ${leaseId} static`);
2526

27+
const dbLeases = await mongoCollection("leases");
28+
await dbLeases.updateOne({ id: leaseId }, { $set: { dynamic: false, lastUpdated: new Date() } });
29+
2630
return true;
2731
} catch (err) {
2832
err.message = err.stack || err.message;

‎src/modules/mikrotik-dhcp/container/services/lease-update.js‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ module.exports = async (leaseId, formData) => {
7373
}
7474
}
7575

76+
const updateFields = { lastUpdated: new Date() };
77+
if (lease.dynamic) updateFields.dynamic = false;
78+
if (formData.address) updateFields.address = formData.address;
79+
if (formData.comment !== undefined) updateFields.comment = formData.comment || "";
80+
if (formData['mac-address']) updateFields['mac-address'] = formData['mac-address'];
81+
if (formData.enabled !== undefined) updateFields.disabled = !formData.enabled;
82+
if (formData['server']) updateFields.server = formData['server'];
83+
if (formData['address-lists'] !== undefined) updateFields['address-lists'] = formData['address-lists'];
84+
await dbLeases.updateOne({ id: leaseId }, { $set: updateFields });
85+
7686
return true;
7787
} catch (err) {
7888
err.message = err.stack || err.message;

0 commit comments

Comments
 (0)