Analytics: Admin-Routen nur auf internem Listener (R5), Transaktion, Duplikat-Check
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f7da79e4b3
commit
cd9aebe4b1
4 files changed
+71
-12
No files matched your search
+17
-2
@@ -2,9 +2,24 @@ import { mkdirSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import { loadConfig } from './config.js';
|
||||
import { openDb } from './db.js';
|
||||
import { createServer } from './server.js';
|
||||
import { createPublicServer, createAdminServer } from './server.js';
|
||||
|
||||
const config = loadConfig(process.env);
|
||||
mkdirSync(config.dataDir, { recursive: true });
|
||||
const db = openDb(join(config.dataDir, 'analytics.db'));
|
||||
createServer({ config, db }).listen(config.port, () => console.log(`Analytics-Dienst auf Port ${config.port}`));
|
||||
|
||||
const servers = [
|
||||
['öffentlich', createPublicServer({ config, db }), config.port],
|
||||
['intern (Admin)', createAdminServer({ config, db }), config.adminPort],
|
||||
];
|
||||
for (const [name, server, port] of servers) {
|
||||
server.on('error', (e) => { console.error(`Analytics-Listener ${name} (Port ${port}):`, e.message); process.exit(1); });
|
||||
server.listen(port, () => console.log(`Analytics-Dienst ${name} auf Port ${port}`));
|
||||
}
|
||||
|
||||
process.on('SIGTERM', () => {
|
||||
let open = servers.length;
|
||||
const done = () => { if (--open === 0) { db.close(); process.exit(0); } };
|
||||
for (const [, server] of servers) { server.close(done); server.closeIdleConnections?.(); }
|
||||
setTimeout(() => process.exit(0), 5000).unref();
|
||||
});
|
||||
Reference in new issue
Block a user