diff --git a/server/db/models/NetworkCheck.js b/server/db/models/NetworkCheck.js new file mode 100644 index 000000000..a6f204b12 --- /dev/null +++ b/server/db/models/NetworkCheck.js @@ -0,0 +1,46 @@ +import mongoose from "mongoose"; +import { BaseCheckSchema } from "./Check.js"; + +const networkInterfaceSchema = mongoose.Schema({ + name: { type: String, required: true }, + bytes_sent: { type: Number, default: 0 }, + bytes_recv: { type: Number, default: 0 }, + packets_sent: { type: Number, default: 0 }, + packets_recv: { type: Number, default: 0 }, + err_in: { type: Number, default: 0 }, + err_out: { type: Number, default: 0 }, + drop_in: { type: Number, default: 0 }, + drop_out: { type: Number, default: 0 }, + fifo_in: { type: Number, default: 0 }, + fifo_out: { type: Number, default: 0 } +}); + +const captureSchema = mongoose.Schema({ + version: { type: String, default: "" }, + mode: { type: String, default: "" } +}); + +const NetworkCheckSchema = mongoose.Schema( + { + ...BaseCheckSchema.obj, + data: { + type: [networkInterfaceSchema], + default: () => [] + }, + capture: { + type: captureSchema, + default: () => ({}) + }, + errors: { + type: mongoose.Schema.Types.Mixed, + default: null + } + }, + { timestamps: true } +); + +NetworkCheckSchema.index({ createdAt: 1 }); +NetworkCheckSchema.index({ monitorId: 1, createdAt: 1 }); +NetworkCheckSchema.index({ monitorId: 1, createdAt: -1 }); + +export default mongoose.model("NetworkCheck", NetworkCheckSchema); \ No newline at end of file diff --git a/server/db/mongo/modules/networkCheckModule.js b/server/db/mongo/modules/networkCheckModule.js new file mode 100644 index 000000000..9aa860302 --- /dev/null +++ b/server/db/mongo/modules/networkCheckModule.js @@ -0,0 +1,49 @@ +import NetworkCheck from "../../models/NetworkCheck.js"; +import logger from "../../../utils/logger.js"; + +const SERVICE_NAME = "networkCheckModule"; + +const createNetworkCheck = async (networkCheckData) => { + try { + const { monitorId, status } = networkCheckData; + const n = (await NetworkCheck.countDocuments({ monitorId })) + 1; + + const networkCheck = await new NetworkCheck({ + ...networkCheckData, + n, + }); + + await networkCheck.save(); + return networkCheck; + } catch (error) { + logger.error({ + message: error.message, + service: SERVICE_NAME, + method: "createNetworkCheck", + stack: error.stack, + }); + throw error; + } +}; + +const getNetworkChecksByMonitorId = async (monitorId, limit = 100) => { + try { + const networkChecks = await NetworkCheck.find({ monitorId }) + .sort({ createdAt: -1 }) + .limit(limit); + return networkChecks; + } catch (error) { + logger.error({ + message: error.message, + service: SERVICE_NAME, + method: "getNetworkChecksByMonitorId", + stack: error.stack, + }); + throw error; + } +}; + +export { + createNetworkCheck, + getNetworkChecksByMonitorId, +}; \ No newline at end of file