chore(Merge): branch 'develop' into origin-paglias-bs3

Conflicts:
	views/options/social/tavern.jade
This commit is contained in:
Tyler Renelle
2014-02-07 00:03:33 -07:00
8 changed files with 56 additions and 84 deletions
+19 -1
View File
@@ -7,6 +7,7 @@ var limiter = require('connect-ratelimit');
var logging = require('./logging');
module.exports.apiThrottle = function(app) {
if (nconf.get('NODE_ENV') !== 'production') return;
app.use(limiter({
end:false,
catagories:{
@@ -23,6 +24,23 @@ module.exports.apiThrottle = function(app) {
});
}
module.exports.errorHandler = function(err, req, res, next) {
//res.locals.domain.emit('error', err);
// when we hit an error, send it to admin as an email. If no ADMIN_EMAIL is present, just send it to yourself (SMTP_USER)
var stack = (err.stack ? err.stack : err.message ? err.message : err) +
"\n ----------------------------\n" +
"\n\noriginalUrl: " + req.originalUrl +
"\n\nauth: " + req.headers['x-api-user'] + ' | ' + req.headers['x-api-key'] +
"\n\nheaders: " + JSON.stringify(req.headers) +
"\n\nbody: " + JSON.stringify(req.body) +
(res.locals.ops ? "\n\ncompleted ops: " + JSON.stringify(res.locals.ops) : "");
logging.error(stack);
var message = err.message ? err.message : err;
message = (message.length < 200) ? message : message.substring(0,100) + message.substring(message.length-100,message.length);
res.json(500,{err:message}); //res.end(err.message);
}
module.exports.forceSSL = function(req, res, next){
var baseUrl = nconf.get("BASE_URL");
// Note x-forwarded-proto is used by Heroku & nginx, you'll have to do something different if you're not using those
@@ -194,7 +212,7 @@ module.exports.locals = function(req, res, next) {
if(err) return res.json(500, {err: err});
var isStaticPage = req.url.split('/')[1] === 'static'; // If url contains '/static/'
console.log(isStaticPage)
//console.log(isStaticPage)
// Load moment.js language file only when not on static pages
language.momentLang = ((!isStaticPage && momentLangs[language.code])|| undefined);
+2 -31
View File
@@ -1,5 +1,4 @@
// Only do the minimal amount of work before forking just in case of a dyno restart
var cluster = require("cluster");
var _ = require('lodash');
var nconf = require('nconf');
var utils = require('./utils');
@@ -8,23 +7,10 @@ var logging = require('./logging');
var isProd = nconf.get('NODE_ENV') === 'production';
var isDev = nconf.get('NODE_ENV') === 'development';
if (cluster.isMaster && (isDev || isProd)) {
// Fork workers.
_.times(require('os').cpus().length, function(){
cluster.fork();
});
cluster.on('disconnect', function(worker, code, signal) {
var w = cluster.fork(); // replace the dead worker
logging.info('[%s] [master:%s] worker:%s disconnect! new worker:%s fork', new Date(), process.pid, worker.process.pid, w.process.pid);
});
} else {
require('coffee-script'); // remove this once we've fully converted over
var express = require("express");
var http = require("http");
var path = require("path");
var domainMiddleware = require('domain-middleware');
var swagger = require("swagger-node-express");
var middleware = require('./middleware');
@@ -91,13 +77,7 @@ if (cluster.isMaster && (isDev || isProd)) {
// ------------ Server Configuration ------------
domainMiddleware({
server: server,
killTimeout: 3000
}),
app.set("port", nconf.get('PORT'));
middleware.apiThrottle(app);
if (!isProd) app.use(express.logger("dev"));
app.use(express.compress());
@@ -125,11 +105,6 @@ if (cluster.isMaster && (isDev || isProd)) {
app.use(express['static'](path.join(__dirname, "/../build"), { maxAge: maxAge }));
app.use(express['static'](path.join(__dirname, "/../public")));
// development only
//if ("development" === app.get("env")) {
// app.use(express.errorHandler());
//}
// Custom Directives
app.use(require('./routes/pages').middleware);
app.use(require('./routes/auth').middleware);
@@ -137,16 +112,12 @@ if (cluster.isMaster && (isDev || isProd)) {
app.use('/api/v2', v2);
app.use('/api/v1', require('./routes/apiv1').middleware);
app.use('/export', require('./routes/dataexport').middleware);
app.use(utils.crashWorker(server,mongoose));
app.use(utils.errorHandler);
require('./routes/apiv2.coffee')(swagger, v2);
app.use(middleware.errorHandler);
server.on('request', app);
server.listen(app.get("port"), function() {
return logging.info("Express server listening on port " + app.get("port"));
});
module.exports = server;
}
module.exports = server;
+1 -37
View File
@@ -2,7 +2,6 @@ var nodemailer = require('nodemailer');
var nconf = require('nconf');
var crypto = require('crypto');
var path = require("path");
var cluster = require("cluster");
module.exports.sendEmail = function(mailData) {
var smtpTransport = nodemailer.createTransport("SMTP",{
@@ -46,39 +45,4 @@ module.exports.setupConfig = function(){
Error.stackTraceLimit = Infinity;
if (nconf.get('NODE_ENV') === 'production')
require('newrelic');
};
module.exports.crashWorker = function(server,mongoose) {
return function(err, req, res, next) {
if (!cluster.isMaster) {
// make sure we close down within 30 seconds
var killtimer = setTimeout(function() {
process.exit(1);
}, 30000);
// But don't keep the process open just for that!
killtimer.unref();
// stop taking new requests.
server.close();
mongoose.connection.close();
cluster.worker.disconnect();
}
next(err);
};
}
module.exports.errorHandler = function(err, req, res, next) {
// when we hit an error, send it to admin as an email. If no ADMIN_EMAIL is present, just send it to yourself (SMTP_USER)
var stack = (err.stack ? err.stack : err.message ? err.message : err) +
"\n ----------------------------\n" +
"\n\noriginalUrl: " + req.originalUrl +
"\n\nauth: " + req.headers['x-api-user'] + ' | ' + req.headers['x-api-key'] +
"\n\nheaders: " + JSON.stringify(req.headers) +
"\n\nbody: " + JSON.stringify(req.body) +
(res.locals.ops ? "\n\ncompleted ops: " + JSON.stringify(res.locals.ops) : "");
var logging = require('./logging');
logging.error(stack);
var message = err.message ? err.message : err;
message = (message.length < 200) ? message : message.substring(0,100) + message.substring(message.length-100,message.length);
res.json(500,{err:message}); //res.end(err.message);
}
};