Skip to content

Commit 29eb8ca

Browse files
log slow requests to loggly (HabitRPG#15364)
1 parent 8c71ca1 commit 29eb8ca

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

config.json.example

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,5 +93,6 @@
9393
"TRUSTED_DOMAINS": "localhost,https://habitica.com",
9494
"TIME_TRAVEL_ENABLED": "false",
9595
"DEBUG_ENABLED": "false",
96-
"CONTENT_SWITCHOVER_TIME_OFFSET": 8
96+
"CONTENT_SWITCHOVER_TIME_OFFSET": 8,
97+
"SLOW_REQUEST_THRESHOLD": 1000
9798
}

website/server/middlewares/index.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,14 @@ import {
3333
} from './language';
3434
import {
3535
logRequestData,
36+
logSlowRequests,
3637
} from './requestLogHandler';
3738

3839
const IS_PROD = nconf.get('IS_PROD');
3940
const DISABLE_LOGGING = nconf.get('DISABLE_REQUEST_LOGGING') === 'true';
4041
const ENABLE_HTTP_AUTH = nconf.get('SITE_HTTP_AUTH_ENABLED') === 'true';
4142
const LOG_REQUESTS_EXCESSIVE_MODE = nconf.get('LOG_REQUESTS_EXCESSIVE_MODE') === 'true';
43+
const SLOW_REQUEST_THRESHOLD = nconf.get('SLOW_REQUEST_THRESHOLD');
4244
// const PUBLIC_DIR = path.join(__dirname, '/../../client');
4345

4446
const SESSION_SECRET = nconf.get('SESSION_SECRET');
@@ -51,6 +53,10 @@ export default function attachMiddlewares (app, server) {
5153
app.use(logRequestData);
5254
}
5355

56+
if (SLOW_REQUEST_THRESHOLD > 0) {
57+
app.use(logSlowRequests);
58+
}
59+
5460
if (ENABLE_CLUSTER) {
5561
app.use(domainMiddleware(server, mongoose));
5662
}

website/server/middlewares/requestLogHandler.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import nconf from 'nconf';
12
import { v4 as uuid } from 'uuid';
23
import omit from 'lodash/omit';
34
import logger from '../libs/logger';
45

6+
const SLOW_REQUEST_THRESHOLD = nconf.get('SLOW_REQUEST_THRESHOLD');
7+
58
function buildBaseLogData (req) {
69
return {
710
requestId: req.requestIdentifier,
@@ -35,3 +38,18 @@ export const logRequestData = (req, res, next) => {
3538
});
3639
next();
3740
};
41+
42+
export const logSlowRequests = (req, res, next) => {
43+
req.requestStartTime = Date.now();
44+
req.on('close', () => {
45+
const requestTime = Date.now() - req.requestStartTime;
46+
if (requestTime > SLOW_REQUEST_THRESHOLD) {
47+
const data = buildBaseLogData(req);
48+
data.duration = requestTime;
49+
data.endTime = Date.now();
50+
data.statusCode = res.statusCode;
51+
logger.error(Error('Slow request'), data);
52+
}
53+
});
54+
next();
55+
};

0 commit comments

Comments
 (0)