Fix: таймаут с диагностикой PG (URL + статус БД). Версия 0.1.25
This commit is contained in:
@@ -57,11 +57,25 @@ app.use(cookieParser());
|
|||||||
async function start() {
|
async function start() {
|
||||||
const auth = await initAuth();
|
const auth = await initAuth();
|
||||||
|
|
||||||
// ── Стоп-кран: если запрос висит > 10 сек — обрываем с ошибкой ───────
|
// ── Стоп-кран: если запрос висит > 10 сек — проверяем PG и показываем детали
|
||||||
app.use((req, res, next) => {
|
app.use((req, res, next) => {
|
||||||
const timer = setTimeout(() => {
|
const timer = setTimeout(async () => {
|
||||||
if (!res.headersSent) {
|
if (!res.headersSent) {
|
||||||
res.status(503).type('html').send('<h2>Сервис временно недоступен</h2><p>Превышено время ожидания</p>');
|
let diag = '';
|
||||||
|
try {
|
||||||
|
const { pool } = require('./src/db');
|
||||||
|
const start = Date.now();
|
||||||
|
await pool.query('SELECT 1');
|
||||||
|
diag = 'PG OK (' + (Date.now() - start) + 'ms)';
|
||||||
|
} catch (e) {
|
||||||
|
diag = 'PG ERROR: ' + e.message;
|
||||||
|
}
|
||||||
|
res.status(503).type('html').send(
|
||||||
|
'<h2>Сервис временно недоступен</h2>'
|
||||||
|
+ '<p>Таймаут запроса: 10 сек</p>'
|
||||||
|
+ '<p>URL: ' + req.method + ' ' + req.url + '</p>'
|
||||||
|
+ '<p>' + diag + '</p>'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}, 10000);
|
}, 10000);
|
||||||
res.on('finish', () => clearTimeout(timer));
|
res.on('finish', () => clearTimeout(timer));
|
||||||
|
|||||||
Reference in New Issue
Block a user