Heartbeat stuff
This commit is contained in:
parent
16a16d643f
commit
70efdfd732
26
index.js
26
index.js
|
|
@ -73,4 +73,30 @@ loadRoutes(path.join(__dirname, 'routes'));
|
|||
|
||||
app.listen(port, () => {
|
||||
console.log(`Listening on ${port}`);
|
||||
// Heartbeat checks
|
||||
setInterval(() => {
|
||||
const now = Date.now() / 1000;
|
||||
global.db.run('SELECT * FROM analytics WHERE heartbeatCheck <= ?', [now], (err, rows) => {
|
||||
if (err) {
|
||||
return console.error('Failed to run heartbeat check', err);
|
||||
}
|
||||
if (!rows || rows.length === 0) {
|
||||
return; // No missed heartbeats
|
||||
}
|
||||
rows.forEach(row => {
|
||||
console.log(`Server ${row.id} missed heartbeat check. Marking as inactive.`);
|
||||
// Set endTime to last known heartbeatCheck time, shutdownReason "missedHeartbeat"
|
||||
global.db.run(
|
||||
'UPDATE analytics SET endTime = ?, shutdownReason = ? WHERE id = ?',
|
||||
[Math.floor(row.heartbeatCheck), 'missedHeartbeat', row.id],
|
||||
(err) => {
|
||||
if (err) {
|
||||
return console.error(`Failed to mark server ${row.id} as inactive`, err);
|
||||
}
|
||||
console.log(`Server ${row.id} marked as inactive due to missed heartbeat.`);
|
||||
}
|
||||
);
|
||||
});
|
||||
});
|
||||
}, 1000);
|
||||
});
|
||||
|
|
@ -6,5 +6,6 @@ CREATE TABLE IF NOT EXISTS analytics (
|
|||
serverDuration INTEGER NOT NULL DEFAULT 0,
|
||||
endTime INTEGER DEFAULT NULL,
|
||||
shutdownReason TEXT DEFAULT NULL,
|
||||
allPlayers BLOB NOT NULL DEFAULT '{}'
|
||||
allPlayers BLOB NOT NULL DEFAULT '{}',
|
||||
heartbeatCheck INTEGER NOT NULL
|
||||
)
|
||||
|
|
@ -9,9 +9,10 @@ router.post('/', global.auth, async (req, res) => {
|
|||
return res.status(400).json({ error: 'Missing required fields' });
|
||||
}
|
||||
console.log(`Recording startup: ${serverId} at ${serverStartTime} for place ${placeId} rev ${revision}`);
|
||||
const firstHeartbeat = Date.now() + ((parseInt(process.env.MAX_HEARTBEAT, 10) || 60) * 1000);
|
||||
db.run(
|
||||
'INSERT INTO analytics (id, placeId, revision, startupTime) VALUES (?, ?, ?, ?)',
|
||||
[serverId, placeId, revision, serverStartTime],
|
||||
'INSERT INTO analytics (id, placeId, revision, startupTime, heartbeatCheck) VALUES (?, ?, ?, ?, ?)',
|
||||
[serverId, placeId, revision, serverStartTime, firstHeartbeat / 1000],
|
||||
function(err) {
|
||||
if (err) {
|
||||
console.error('Failed to record startup data', err);
|
||||
|
|
|
|||
Loading…
Reference in a new issue