diff --git a/docker/dev/docker-compose.yaml b/docker/dev/docker-compose.yaml index 292d0b1d5..f0b193b2d 100755 --- a/docker/dev/docker-compose.yaml +++ b/docker/dev/docker-compose.yaml @@ -44,4 +44,4 @@ services: timeout: 30s start_period: 0s start_interval: 1s - retries: 30 + retries: 30 \ No newline at end of file diff --git a/server/src/db/models/HardwareCheck.js b/server/src/db/models/HardwareCheck.js index bda9f693c..5b7d56213 100755 --- a/server/src/db/models/HardwareCheck.js +++ b/server/src/db/models/HardwareCheck.js @@ -40,6 +40,20 @@ const captureSchema = mongoose.Schema({ mode: { type: String, default: "" }, }); +const networkInterfaceSchema = mongoose.Schema({ + name: { type: String }, + 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 HardwareCheckSchema = mongoose.Schema( { ...BaseCheckSchema.obj, @@ -69,6 +83,12 @@ const HardwareCheckSchema = mongoose.Schema( type: captureSchema, default: () => ({}), }, + + net: { + type: [networkInterfaceSchema], + default: () => [], + required: false, + }, }, { timestamps: true } ); diff --git a/server/src/db/mongo/modules/monitorModuleQueries.js b/server/src/db/mongo/modules/monitorModuleQueries.js index d96e128fa..f7283c8e9 100755 --- a/server/src/db/mongo/modules/monitorModuleQueries.js +++ b/server/src/db/mongo/modules/monitorModuleQueries.js @@ -220,6 +220,7 @@ const buildHardwareDetailsPipeline = (monitor, dates, dateString) => { diskCount: { $size: "$disk", }, + netCount: { $size: "$net" }, }, }, { @@ -227,6 +228,7 @@ const buildHardwareDetailsPipeline = (monitor, dates, dateString) => { from: "hardwarechecks", let: { diskCount: "$diskCount", + netCount: "$netCount", }, pipeline: [ { @@ -258,6 +260,9 @@ const buildHardwareDetailsPipeline = (monitor, dates, dateString) => { disks: { $push: "$disk", }, + net: { + $push: "$net", + }, }, }, { @@ -371,6 +376,92 @@ const buildHardwareDetailsPipeline = (monitor, dates, dateString) => { }, }, }, + net: { + $map: { + input: { $range: [0, "$$netCount"] }, + as: "netIndex", + in: { + name: { + $arrayElemAt: [ + { + $map: { + input: "$net", + as: "netArray", + in: { $arrayElemAt: ["$$netArray.name", "$$netIndex"] }, + }, + }, + 0, + ], + }, + avgBytesSent: { + $avg: { + $map: { + input: "$net", + as: "netArray", + in: { + $arrayElemAt: ["$$netArray.bytes_sent", "$$netIndex"], + }, + }, + }, + }, + avgBytesRecv: { + $avg: { + $map: { + input: "$net", + as: "netArray", + in: { + $arrayElemAt: ["$$netArray.bytes_recv", "$$netIndex"], + }, + }, + }, + }, + avgPacketsSent: { + $avg: { + $map: { + input: "$net", + as: "netArray", + in: { + $arrayElemAt: ["$$netArray.packets_sent", "$$netIndex"], + }, + }, + }, + }, + avgPacketsRecv: { + $avg: { + $map: { + input: "$net", + as: "netArray", + in: { + $arrayElemAt: ["$$netArray.packets_recv", "$$netIndex"], + }, + }, + }, + }, + avgErrIn: { + $avg: { + $map: { + input: "$net", + as: "netArray", + in: { + $arrayElemAt: ["$$netArray.err_in", "$$netIndex"], + }, + }, + }, + }, + avgErrOut: { + $avg: { + $map: { + input: "$net", + as: "netArray", + in: { + $arrayElemAt: ["$$netArray.err_out", "$$netIndex"], + }, + }, + }, + }, + }, + }, + }, }, }, ], diff --git a/server/src/service/infrastructure/statusService.js b/server/src/service/infrastructure/statusService.js index 672eb55fc..72916a0ce 100755 --- a/server/src/service/infrastructure/statusService.js +++ b/server/src/service/infrastructure/statusService.js @@ -236,7 +236,7 @@ class StatusService { } if (type === "hardware") { - const { cpu, memory, disk, host } = payload?.data ?? {}; + const { cpu, memory, disk, host, net } = payload?.data ?? {}; const { errors } = payload?.errors ?? []; check.cpu = cpu ?? {}; check.memory = memory ?? {}; @@ -244,6 +244,7 @@ class StatusService { check.host = host ?? {}; check.errors = errors ?? []; check.capture = payload?.capture ?? {}; + check.net = net ?? {}; } return check; };