diff --git a/services/arbiter-3.0/src/routes/admin/servers.js b/services/arbiter-3.0/src/routes/admin/servers.js index 2f0f9b5..fb8cb7f 100644 --- a/services/arbiter-3.0/src/routes/admin/servers.js +++ b/services/arbiter-3.0/src/routes/admin/servers.js @@ -108,4 +108,50 @@ router.post('/:identifier/toggle-whitelist', async (req, res) => { res.send(`⚠️ Requires Restart`); }); +// Sync all servers on a specific node +router.post('/sync-all/:node', async (req, res) => { + const { node } = req.params; + const nodeId = node === 'tx1' ? 3 : node === 'nc1' ? 2 : null; + + if (!nodeId) { + return res.send(`Invalid node`); + } + + try { + const discovered = await getMinecraftServers(); + const nodeServers = discovered.filter(s => s.nodeId === nodeId); + + const { rows: players } = await db.query( + `SELECT minecraft_username as name, minecraft_uuid as uuid FROM users + JOIN subscriptions ON users.discord_id = subscriptions.discord_id + WHERE subscriptions.status IN ('active', 'grace_period', 'lifetime')` + ); + + let synced = 0; + let errors = 0; + + for (const srv of nodeServers) { + try { + await writeWhitelistFile(srv.identifier, players); + await reloadWhitelistCommand(srv.identifier); + await db.query( + "INSERT INTO server_sync_log (server_identifier, last_successful_sync, is_online, last_error) VALUES ($1, NOW(), true, NULL) ON CONFLICT (server_identifier) DO UPDATE SET last_successful_sync = NOW(), is_online = true, last_error = NULL", + [srv.identifier] + ); + synced++; + } catch (err) { + await db.query( + "INSERT INTO server_sync_log (server_identifier, last_error, is_online) VALUES ($1, $2, false) ON CONFLICT (server_identifier) DO UPDATE SET last_error = $2, is_online = false", + [srv.identifier, err.message] + ); + errors++; + } + } + + res.send(`✅ ${synced} synced${errors > 0 ? ` (${errors} errors)` : ''}`); + } catch (error) { + res.send(`❌ ${error.message}`); + } +}); + module.exports = router; diff --git a/services/arbiter-3.0/src/views/admin/servers/index.ejs b/services/arbiter-3.0/src/views/admin/servers/index.ejs index f4ee9ee..fb3a085 100644 --- a/services/arbiter-3.0/src/views/admin/servers/index.ejs +++ b/services/arbiter-3.0/src/views/admin/servers/index.ejs @@ -4,12 +4,19 @@

Real-time status and whitelist controls

- - +