mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-06-30 09:52:14 -04:00

This change is only cosmetic. Its aim is do make it easier to understand the async changes that are going to be merged later on. It was extracted from the original work from Ray Bellis. To verify that nothing has changed, you can run the following command on each file touched by this commit: npm install uglify-es diff --unified <(uglify-js --beautify bracketize <BEFORE.js>) <(uglify-js --beautify bracketize <AFTER.js>) This is a complete script that does the same automatically (works from a mercurial clone): ```bash #!/usr/bin/env bash set -eu REVISION=<THIS_REVISION> PARENT_REV=$(hg identify --rev "${REVISION}" --template '{p1rev}') FILE_LIST=$(hg status --no-status --change ${REVISION}) UGLIFYJS="node_modules/uglify-es/bin/uglifyjs" for FILE_NAME in ${FILE_LIST[@]}; do echo "Checking ${FILE_NAME}" diff --unified \ <("${UGLIFYJS}" --beautify bracketize <(hg cat --rev "${PARENT_REV}" "${FILE_NAME}")) \ <("${UGLIFYJS}" --beautify bracketize <(hg cat --rev "${REVISION}" "${FILE_NAME}")) done ```
73 lines
2.2 KiB
JavaScript
73 lines
2.2 KiB
JavaScript
var os = require("os");
|
|
var db = require('../../db/DB');
|
|
var stats = require('ep_etherpad-lite/node/stats')
|
|
|
|
|
|
exports.onShutdown = false;
|
|
exports.gracefulShutdown = function(err) {
|
|
if(err && err.stack) {
|
|
console.error(err.stack);
|
|
} else if(err) {
|
|
console.error(err);
|
|
}
|
|
|
|
// ensure there is only one graceful shutdown running
|
|
if (exports.onShutdown) {
|
|
return;
|
|
}
|
|
|
|
exports.onShutdown = true;
|
|
|
|
console.log("graceful shutdown...");
|
|
|
|
// do the db shutdown
|
|
db.db.doShutdown(function() {
|
|
console.log("db sucessfully closed.");
|
|
|
|
process.exit(0);
|
|
});
|
|
|
|
setTimeout(function() {
|
|
process.exit(1);
|
|
}, 3000);
|
|
}
|
|
|
|
process.on('uncaughtException', exports.gracefulShutdown);
|
|
|
|
exports.expressCreateServer = function (hook_name, args, cb) {
|
|
exports.app = args.app;
|
|
|
|
// Handle errors
|
|
args.app.use(function(err, req, res, next) {
|
|
// if an error occurs Connect will pass it down
|
|
// through these "error-handling" middleware
|
|
// allowing you to respond however you like
|
|
res.status(500).send({ error: 'Sorry, something bad happened!' });
|
|
console.error(err.stack? err.stack : err.toString());
|
|
stats.meter('http500').mark()
|
|
});
|
|
|
|
/*
|
|
* Connect graceful shutdown with sigint and uncaught exception
|
|
*
|
|
* Until Etherpad 1.7.5, process.on('SIGTERM') and process.on('SIGINT') were
|
|
* not hooked up under Windows, because old nodejs versions did not support
|
|
* them.
|
|
*
|
|
* According to nodejs 6.x documentation, it is now safe to do so. This
|
|
* allows to gracefully close the DB connection when hitting CTRL+C under
|
|
* Windows, for example.
|
|
*
|
|
* Source: https://nodejs.org/docs/latest-v6.x/api/process.html#process_signal_events
|
|
*
|
|
* - SIGTERM is not supported on Windows, it can be listened on.
|
|
* - SIGINT from the terminal is supported on all platforms, and can usually
|
|
* be generated with <Ctrl>+C (though this may be configurable). It is not
|
|
* generated when terminal raw mode is enabled.
|
|
*/
|
|
process.on('SIGINT', exports.gracefulShutdown);
|
|
|
|
// when running as PID1 (e.g. in docker container)
|
|
// allow graceful shutdown on SIGTERM c.f. #3265
|
|
process.on('SIGTERM', exports.gracefulShutdown);
|
|
}
|