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 //const moment = require('moment'); // For time calculations
exports.getMasterSlaveSummary = async (req, reply) => { exports.getMasterSlaveSummary = async (req, reply) => {
try { try {
const { customerId } = req.params; const { customerId } = req.params;
@ -1049,86 +1050,44 @@ exports.getMasterSlaveSummary = async (req, reply) => {
const masters = allDevices.filter(device => device.type === 'master'); const masters = allDevices.filter(device => device.type === 'master');
const slaves = allDevices.filter(device => device.type === 'slave'); const slaves = allDevices.filter(device => device.type === 'slave');
// Update connection status and timestamps const enrichDeviceWithTimestamp = async (device) => {
const updateStatusPromises = allDevices.map(async device => { const hardwareId = device.hardwareId?.trim();
let checkHardwareId; if (!hardwareId) return device.toObject();
if (device.type === 'master') { const latestData = await IotData.findOne({ hardwareId })
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 })
.sort({ date: -1 }) .sort({ date: -1 })
.lean(); .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 enriched = device.toObject();
const enrichedMasters = masters.map(master => {
const masterObj = master.toObject();
// Remove LoRa fields from master response if (latestData?.date) {
delete masterObj.connected_lora_date; const indiaTime = moment.tz(latestData.date, "Asia/Kolkata");
delete masterObj.connected_lora_time; 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 if (device.type === 'slave') {
.filter(slave => slave.connected_to === masterConnectionId) enriched.connected_lora_date = date;
.map(slave => { enriched.connected_lora_time = time;
const slaveObj = slave.toObject(); }
}
// Remove GSM fields from slave response return enriched;
delete slaveObj.connected_gsm_date; };
delete slaveObj.connected_gsm_time;
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 { return {
...masterObj, ...master,
connected_slave_count: connectedSlaves.length, connected_slave_count: connectedSlaves.length,
connected_slaves: connectedSlaves connected_slaves: connectedSlaves
}; };
@ -1137,13 +1096,13 @@ exports.getMasterSlaveSummary = async (req, reply) => {
return reply.send({ return reply.send({
status_code: 200, status_code: 200,
message: "Success", message: "Success",
master_count: masters.length, master_count: enrichedMasters.length,
slave_count: slaves.length, slave_count: enrichedSlaves.length,
data: enrichedMasters data: masterSummary
}); });
} catch (err) { } catch (err) {
console.error("Error:", err); console.error("Error in getMasterSlaveSummary:", err);
return reply.status(500).send({ return reply.status(500).send({
status_code: 500, status_code: 500,
message: "Internal Server Error" message: "Internal Server Error"
@ -1153,6 +1112,7 @@ exports.getMasterSlaveSummary = async (req, reply) => {
// exports.getIotDataByCustomer = async (req, reply) => { // exports.getIotDataByCustomer = async (req, reply) => {
// try { // try {
// const { customerId } = req.params; // const { customerId } = req.params;

Loading…
Cancel
Save