openvibers/openvibe.billing Commits
Listen on the socket systemd hands over, so a restart never answers 502 (#140)
Changes
@@@ -63,7 +63,10 @@ const { createPgTelemetrySink, startTelemetryRetention } = require('openvibe-sdknetworkInternalUrl: config.network.internalUrl, clientId: config.oauth.clientId, clientSecret: config.oauth.clientSecret,});-- const server = app.listen(config.port, config.host, async () => {++ // Socket activation (2026-10-31): systemd's .socket unit holds the listener across restarts, so a deploy++ // queues requests in the kernel instead of answering 502. Without the socket unit, the usual listen.++ const socketActivated = process.env.LISTEN_FDS === '1' && Number(process.env.LISTEN_PID) === process.pid;++ const server = app.listen(...(socketActivated ? [{ fd: 3 }] : [config.port, config.host]), async () => {const enabled = Object.values(adapters).filter((a) => a.enabled).map((a) => a.name);console.log(`[Billing] ${config.nodeEnv} on http://${config.host}:${config.port} → ${config.baseUrl} (PostgreSQL)`);console.log(`[Billing] providers enabled: ${enabled.length ? enabled.join(', ') : 'none'}; economy ${await isFrozen(ctx.db) ? 'FROZEN' : 'open'}; events relay ${(await relay.status()).enabled ? `→ ${config.events.url}` : 'off (outbox accumulates)'}`);
@@ -63,7 +63,10 @@ const { createPgTelemetrySink, startTelemetryRetention } = require('openvibe-sdk
@@ -63,7 +63,10 @@ const { createPgTelemetrySink, startTelemetryRetention } = require('openvibe-sdk
networkInternalUrl: config.network.internalUrl, clientId: config.oauth.clientId, clientSecret: config.oauth.clientSecret,
networkInternalUrl: config.network.internalUrl, clientId: config.oauth.clientId, clientSecret: config.oauth.clientSecret,
});
});
- const server = app.listen(config.port, config.host, async () => {
+ // Socket activation (2026-10-31): systemd's .socket unit holds the listener across restarts, so a deploy
+ // queues requests in the kernel instead of answering 502. Without the socket unit, the usual listen.
+ const socketActivated = process.env.LISTEN_FDS === '1' && Number(process.env.LISTEN_PID) === process.pid;
+ const server = app.listen(...(socketActivated ? [{ fd: 3 }] : [config.port, config.host]), async () => {
const enabled = Object.values(adapters).filter((a) => a.enabled).map((a) => a.name);
const enabled = Object.values(adapters).filter((a) => a.enabled).map((a) => a.name);
console.log(`[Billing] ${config.nodeEnv} on http://${config.host}:${config.port} → ${config.baseUrl} (PostgreSQL)`);
console.log(`[Billing] ${config.nodeEnv} on http://${config.host}:${config.port} → ${config.baseUrl} (PostgreSQL)`);
console.log(`[Billing] providers enabled: ${enabled.length ? enabled.join(', ') : 'none'}; economy ${await isFrozen(ctx.db) ? 'FROZEN' : 'open'}; events relay ${(await relay.status()).enabled ? `→ ${config.events.url}` : 'off (outbox accumulates)'}`);
console.log(`[Billing] providers enabled: ${enabled.length ? enabled.join(', ') : 'none'}; economy ${await isFrozen(ctx.db) ? 'FROZEN' : 'open'}; events relay ${(await relay.status()).enabled ? `→ ${config.events.url}` : 'off (outbox accumulates)'}`);