master^2
Bhaskar 6 months ago
parent d6ea747138
commit a1dd52f072

@ -1036,6 +1036,7 @@ exports.mastrerList = async (req, reply) => {
//const moment = require('moment'); // For time calculations
exports.getMasterSlaveSummary = async (req, reply) => {
try {
const { customerId } = req.params;
@ -1049,86 +1050,44 @@ exports.getMasterSlaveSummary = async (req, reply) => {
const masters = allDevices.filter(device => device.type === 'master');
const slaves = allDevices.filter(device => device.type === 'slave');
// Update connection status and timestamps
const updateStatusPromises = allDevices.map(async device => {
let checkHardwareId;
if (device.type === 'master') {
checkHardwareId = device.hardwareId?.trim();
} else if (device.type === 'slave') {
checkHardwareId = device.hardwareId?.trim(); // Use slave's own hardwareId
}
if (!checkHardwareId) return;
const latestData = await IotData.findOne({ hardwareId: checkHardwareId })
const enrichDeviceWithTimestamp = async (device) => {
const hardwareId = device.hardwareId?.trim();
if (!hardwareId) return device.toObject();
const latestData = await IotData.findOne({ hardwareId })
.sort({ date: -1 })
.lean();
let status = "disconnected";
const updateFields = {};
if (latestData?.date) {
const now = moment();
const lastSeen = moment(latestData.date);
const diff = now.diff(lastSeen, 'minutes');
if (diff <= 10) {
status = "connected";
const indiaTime = moment.tz(latestData.date, "Asia/Kolkata");
const date = indiaTime.format("YYYY-MM-DD");
const time = indiaTime.format("HH:mm:ss");
if (device.type === 'master') {
updateFields.connected_gsm_date = date;
updateFields.connected_gsm_time = time;
device.connected_gsm_date = date;
device.connected_gsm_time = time;
}
if (device.type === 'slave') {
updateFields.connected_lora_date = date;
updateFields.connected_lora_time = time;
device.connected_lora_date = date;
device.connected_lora_time = time;
}
}
}
updateFields.connected_status = status;
await Insensors.updateOne({ _id: device._id }, { $set: updateFields });
device.connected_status = status;
});
await Promise.all(updateStatusPromises);
// Build enriched masters and exclude irrelevant fields
const enrichedMasters = masters.map(master => {
const masterObj = master.toObject();
const enriched = device.toObject();
// Remove LoRa fields from master response
delete masterObj.connected_lora_date;
delete masterObj.connected_lora_time;
if (latestData?.date) {
const indiaTime = moment.tz(latestData.date, "Asia/Kolkata");
const date = indiaTime.format("DD-MM-YYYY");
const time = indiaTime.format("HH:mm:ss");
const masterConnectionId = master.connected_to;
if (device.type === 'master') {
enriched.connected_gsm_date = date;
enriched.connected_gsm_time = time;
}
const connectedSlaves = slaves
.filter(slave => slave.connected_to === masterConnectionId)
.map(slave => {
const slaveObj = slave.toObject();
if (device.type === 'slave') {
enriched.connected_lora_date = date;
enriched.connected_lora_time = time;
}
}
// Remove GSM fields from slave response
delete slaveObj.connected_gsm_date;
delete slaveObj.connected_gsm_time;
return enriched;
};
return slaveObj;
});
// Enrich all devices
const enrichedMasters = await Promise.all(masters.map(enrichDeviceWithTimestamp));
const enrichedSlaves = await Promise.all(slaves.map(enrichDeviceWithTimestamp));
// Match slaves to their masters
const masterSummary = enrichedMasters.map(master => {
const connectedSlaves = enrichedSlaves.filter(slave => slave.connected_to === master.connected_to);
return {
...masterObj,
...master,
connected_slave_count: connectedSlaves.length,
connected_slaves: connectedSlaves
};
@ -1137,13 +1096,13 @@ exports.getMasterSlaveSummary = async (req, reply) => {
return reply.send({
status_code: 200,
message: "Success",
master_count: masters.length,
slave_count: slaves.length,
data: enrichedMasters
master_count: enrichedMasters.length,
slave_count: enrichedSlaves.length,
data: masterSummary
});
} catch (err) {
console.error("Error:", err);
console.error("Error in getMasterSlaveSummary:", err);
return reply.status(500).send({
status_code: 500,
message: "Internal Server Error"
@ -1153,6 +1112,7 @@ exports.getMasterSlaveSummary = async (req, reply) => {
// exports.getIotDataByCustomer = async (req, reply) => {
// try {
// const { customerId } = req.params;

Loading…
Cancel
Save