Skip to content

Commit a72479e

Browse files
author
Martii
committed
Implement maxLag for testing
* Rework/revisit *toobusy-js* a little to improve middleware performance... does slow start up time a bit * Some immediate returns added instead of just fallthrough **NOTES** * Discovered VPS memory size change **decrease** :\ Applies to OpenUserJS#944 and OpenUserJS#430
1 parent 5411668 commit a72479e

File tree

1 file changed

+26
-10
lines changed

1 file changed

+26
-10
lines changed

app.js

+26-10
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,26 @@ var sessionStore = new MongoStore({ mongooseConnection: db });
139139
var ensureIntegerOrNull = require('./libs/helpers').ensureIntegerOrNull;
140140

141141
var maxLag = ensureIntegerOrNull(process.env.BUSY_MAXLAG) || 70;
142+
var pollInterval = ensureIntegerOrNull(process.env.BUSY_INTERVAL) || 500;
143+
144+
toobusy.maxLag(maxLag);
145+
toobusy.interval(pollInterval);
146+
147+
if (isDbg) {
148+
toobusy.onLag(function(aCurrentLag) {
149+
console.warn('Event loop lag detected! Latency:', aCurrentLag + 'ms');
150+
});
151+
}
152+
153+
var hostMaxMem = ensureIntegerOrNull(process.env.HOST_MAXMEM_BYTES) || 1073741824; // 1GiB default
154+
var maxMem = ensureIntegerOrNull(process.env.BUSY_MAXMEM) || 50; // 50% default
155+
156+
var forceBusyAbsolute = process.env.FORCE_BUSY_ABSOLUTE === 'true';
157+
var forceBusy = process.env.FORCE_BUSY === 'true';
158+
142159
app.use(function (aReq, aRes, aNext) {
143160
var pathname = aReq._parsedUrl.pathname;
144-
var hostMaxMem = process.env.HOST_MAXMEM_BYTES || 1073741824; // NOTE: Default 1GiB
145161
var usedMem = null;
146-
var maxMem = null;
147162
var isSources = null;
148163

149164
if (
@@ -160,15 +175,15 @@ app.use(function (aReq, aRes, aNext) {
160175
/^\/(?:admin|mod)/.test(pathname)
161176

162177
) {
163-
aNext(); // NOTE: Allow styling to pass through on these routes
178+
aNext(); // NOTE: Allow to pass through on these routes
164179
return;
165180
}
166181

167-
if (process.env.FORCE_BUSY_ABSOLUTE === 'true') { // Always busy
182+
if (forceBusyAbsolute) { // Always busy
168183
aRes.status(503).send(); // NOTE: No UI period just response header
169184
return;
170185

171-
} else if (process.env.FORCE_BUSY === 'true') { // Graceful busy
186+
} else if (forceBusy) { // Graceful busy
172187
statusCodePage(aReq, aRes, aNext, {
173188
statusCode: 503,
174189
statusMessage:
@@ -183,24 +198,25 @@ app.use(function (aReq, aRes, aNext) {
183198
// Calculate current whole percentage of RSS memory used
184199
usedMem = parseInt(process.memoryUsage().rss / hostMaxMem * 100);
185200

186-
// Compare current RSS memory used to maximum
187-
maxMem = ensureIntegerOrNull(process.env.BUSY_MAXMEM);
188-
if (usedMem > (isSources ? (parseInt(maxMem / 3 * 2) || 50) : (maxMem || 75))) {
201+
// Compare current RSS memory percentage used to maximum percentage
202+
if (usedMem > maxMem) {
189203
statusCodePage(aReq, aRes, aNext, {
190204
statusCode: 503,
191-
statusMessage: 'We are very busy right now. Please try again later.'
205+
statusMessage: 'We are very busy right now\u2026 Please try again later.'
192206
});
193207
return;
194208
}
195209
}
196210

197-
if (toobusy()) { // check if we're toobusy
211+
if (toobusy()) { // check if toobusy
198212
statusCodePage(aReq, aRes, aNext, {
199213
statusCode: 503,
200214
statusMessage: 'We are very busy right now. Please try again later.'
201215
});
216+
return;
202217
} else {
203218
aNext(); // not toobusy
219+
// fallthrough
204220
}
205221
}
206222
});

0 commit comments

Comments
 (0)