const http = require('http'); const { Server } = require('socket.io'); const express = require('express'); const MongoClient = require('mongodb').MongoClient; // The node-cron module is tiny task scheduler in pure JavaScript for node.js based on GNU crontab. const cron = require('node-cron');
const app = express(); const server = http.createServer(app); const io = new Server(server);
app.get('/', (req, res) => { res.sendFile(__dirname + '/bootstrapRowsColsCron.html'); });
const uri = "mongodb+srv://siteRootAdmin:b23258585@inLaneCatch.yushei.com.tw/YuSheiDBTest?replicaSet=odroid01&authSource=admin&tls=false"
// "mongodb://siteRootAdmin:b23258585@x8664Arch.yushei.com.tw:27017,hc4Jammy.yushei.com.tw:27017,n2Jammy.yushei.com.tw:27017/YuSheiDBTest?replicaSet=odroid01&authSource=admin";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
async function start() { await client.connect(); const adminDb = client.db('admin'); // Connect to the admin database const db = client.db('YuSheiDBTest'); const collection = db.collection('inLaneCapped');
const changeStream = collection.watch();
setInterval(async () => { try { const log = await adminDb.command({ replSetGetStatus: 1 }); // Execute against admin database // console.log("what is in log at line 28", log);
let simpleLog = [];
// console.log("What is log.members[0]", log.members[0]);
for (let i = 0; i < log.members.length; i++){
// console.log("_id: ", log[i]._id, "name: ", log[i].name, "health: ", log[i].health, "state: ", log[i].state, "stateStr: ", log[i].stateStr);
simpleLog[i] = {
"_id": log.members[i]._id,
"name": log.members[i].name,
"health": log.members[i].health,
"state": log.members[i].state,
"stateStr": log.members[i].stateStr
}
}
console.log('\n');
// console.log("simpleLog just log", simpleLog);
// console.table does not work here!
// console.table("simpleLog Table", simpleLog);
console.log(" _id | name | health | state | stateStr ");
console.log("--------------------------------------------------------------------------");
simpleLog.forEach(member => {
console.log( ${String(member._id).padEnd(3)} | ${String(member.name).padEnd(35)} | ${String(member.health).padEnd(3)} | ${String(member.state).padEnd(3)} | ${member.stateStr}
);
});
console.log(Date().toLocaleString());
io.emit('replicationStatus', simpleLog);
// console.log('Replication Status:', simpleLog);
} catch (error) {
console.error('Error fetching replication status:', error);
}
}, 60000); // Fetch replication status every minutes 1 seconds=1000
changeStream.on('change', (change) => {
io.emit('change', change);
if (change.operationType === 'insert') {
const { _id, plateText, cameraSource, inTime, inCarJpg } = change.fullDocument;
console.log(Change ID: ${_id}
);
console.log(plateText: ${plateText}
);
console.log(camerSource: ${cameraSource}
);
console.log(inTime: ${inTime}
);
}
});
// HighPorts ,TCP/43000-48500 defined in munetaka.me
server.listen(48597, () => {
console.log('Server is listening on port 48597');
});
}
const options = { timeZone: 'Asia/Taipei', timeZoneName: 'short' }; // const localTime = now.toLocaleString('en-US', options);
// set io.emit() function saveAndResetPictureCounts() { let now = new Date(); let localTime = now.toLocaleString('en-US', options); io.emit('saveAndResetPictureCounts', localTime) }
// Schedule resetPictureCountsAtMidnight to run at 1:00 AM every day cron.schedule('0 1 * * ', () => { // Schedule the function to run every 5 minutes // cron.schedule('/5 * * * *', () =>{ saveAndResetPictureCounts(); });
// is invoking the start function and handling any potential errors t start().catch(console.error);