Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
res.redirect(location)
break
case 'render':
console.log(`[${requestId}][render] Rendering ISO response (took ${new Date() - startTime}ms)`)
librato.measure('webapp.server.render.success', 1)
res.send(body)
saveResponseToCache(cacheKey, body, postIds, postTokens, streamKind, streamId)
break
case 'error':
console.log(`[${requestId}][render] Rendering error response (took ${new Date() - startTime}ms)`)
librato.measure('webapp.server.render.error', 1)
res.status(500).end()
break
case '404':
console.log(`[${requestId}][render] Rendering 404 response (took ${new Date() - startTime}ms)`)
librato.measure('webapp.server.render.404', 1)
res.status(404).end()
break
default:
console.log(`[${requestId}][render] Received unrecognized response (took ${new Date() - startTime}ms)`)
console.log(JSON.stringify(result))
librato.measure('webapp.server.render.error', 1)
// Fall through
res.status(500).end()
}
clearTimeout(renderTimeout)
}
const jobFailedCallback = (errorMessage) => {
saveResponseToCache(cacheKey, body, postIds, postTokens, streamKind, streamId)
break
case 'error':
console.log(`[${requestId}][render] Rendering error response (took ${new Date() - startTime}ms)`)
librato.measure('webapp.server.render.error', 1)
res.status(500).end()
break
case '404':
console.log(`[${requestId}][render] Rendering 404 response (took ${new Date() - startTime}ms)`)
librato.measure('webapp.server.render.404', 1)
res.status(404).end()
break
default:
console.log(`[${requestId}][render] Received unrecognized response (took ${new Date() - startTime}ms)`)
console.log(JSON.stringify(result))
librato.measure('webapp.server.render.error', 1)
// Fall through
res.status(500).end()
}
clearTimeout(renderTimeout)
}
const jobFailedCallback = (errorMessage) => {
import { updateStrings as updateTimeAgoStrings } from './../lib/time_ago_in_words'
updateTimeAgoStrings({ about: '' })
// Fire up queue worker
const queue = kue.createQueue({ redis: process.env[process.env.REDIS_PROVIDER] })
const clusterWorkerSize = parseInt(process.env.CLUSTER_WORKERS, 10) || 1
const simultaneousWorkerRenders = parseInt(process.env.SIMULTANEOUS_RENDERS, 10) || 1
const renderProcessTimeout = parseInt(process.env.RENDER_PROCESS_TIMEOUT, 10) || 60
const renderJobTtl = (parseInt(process.env.RENDER_JOB_TTL, 10) || 30) * 1000
// Periodically clear stuck jobs
queue.watchStuckJobs()
// Report Kue stats to Librato
librato.configure({
email: process.env.LIBRATO_EMAIL,
token: process.env.LIBRATO_TOKEN,
source: process.env.DYNO,
})
librato.start()
librato.on('error', (err) => {
Honeybadger.notify(err)
console.error(err)
})
const libratoReporter = setInterval(() => {
queue.inactiveCount((err, total) => {
if (!err) {
librato.measure('kue.inactive.count', total)
}
})
// Honeybadger "before everything" middleware
app.use(Honeybadger.requestHandler);
// Log requests with Heroku's logfmt
app.use(logfmt.requestLogger({ immediate: false }, (req, res) => {
const data = logfmt.requestLogger.commonFormatter(req, res)
data.useragent = req.headers['user-agent']
return data
}))
// Parse cookies (for determining to pre-render or not)
app.use(cookieParser())
// Send stats to Librato
librato.configure({
email: process.env.LIBRATO_EMAIL,
token: process.env.LIBRATO_TOKEN,
source: process.env.DYNO,
})
librato.start()
app.use(librato.middleware())
librato.on('error', (err) => {
console.log('[librato] ERROR', err)
})
// Use Helmet to lock things down
app.use(helmet())
const indexStr = fs.readFileSync(path.join(__dirname, './../../public/index.html'), 'utf-8')
const stats = JSON.parse(fs.readFileSync(path.join(__dirname, './../../webpack-stats/server.json'), 'utf-8'))
const clusterWorkerSize = parseInt(process.env.CLUSTER_WORKERS, 10) || 1
const simultaneousWorkerRenders = parseInt(process.env.SIMULTANEOUS_RENDERS, 10) || 1
const renderProcessTimeout = parseInt(process.env.RENDER_PROCESS_TIMEOUT, 10) || 60
const renderJobTtl = (parseInt(process.env.RENDER_JOB_TTL, 10) || 30) * 1000
// Periodically clear stuck jobs
queue.watchStuckJobs()
// Report Kue stats to Librato
librato.configure({
email: process.env.LIBRATO_EMAIL,
token: process.env.LIBRATO_TOKEN,
source: process.env.DYNO,
})
librato.start()
librato.on('error', (err) => {
Honeybadger.notify(err)
console.error(err)
})
const libratoReporter = setInterval(() => {
queue.inactiveCount((err, total) => {
if (!err) {
librato.measure('kue.inactive.count', total)
}
})
queue.activeCount((err, total) => {
if (!err) {
librato.measure('kue.active.count', total)
}
})
queue.failedCount((err, total) => {
return data
}))
// Parse cookies (for determining to pre-render or not)
app.use(cookieParser())
// Send stats to Librato
librato.configure({
email: process.env.LIBRATO_EMAIL,
token: process.env.LIBRATO_TOKEN,
source: process.env.DYNO,
})
librato.start()
app.use(librato.middleware())
librato.on('error', (err) => {
console.log('[librato] ERROR', err)
})
// Use Helmet to lock things down
app.use(helmet())
const indexStr = fs.readFileSync(path.join(__dirname, './../../public/index.html'), 'utf-8')
const stats = JSON.parse(fs.readFileSync(path.join(__dirname, './../../webpack-stats/server.json'), 'utf-8'))
// Wire up OAuth route
addOauthRoute(app)
// Assets
app.use(express.static('public', { index: false, redirect: false }))
app.use('/static', express.static('public/static', { maxAge: '1y', index: false, redirect: false, fallthrough: false }))
app.use(logfmt.requestLogger({ immediate: false }, (req, res) => {
const data = logfmt.requestLogger.commonFormatter(req, res)
data.useragent = req.headers['user-agent']
return data
}))
// Parse cookies (for determining to pre-render or not)
app.use(cookieParser())
// Send stats to Librato
librato.configure({
email: process.env.LIBRATO_EMAIL,
token: process.env.LIBRATO_TOKEN,
source: process.env.DYNO,
})
librato.start()
app.use(librato.middleware())
librato.on('error', (err) => {
console.log('[librato] ERROR', err)
})
// Use Helmet to lock things down
app.use(helmet())
const indexStr = fs.readFileSync(path.join(__dirname, './../../public/index.html'), 'utf-8')
const stats = JSON.parse(fs.readFileSync(path.join(__dirname, './../../webpack-stats/server.json'), 'utf-8'))
// Wire up OAuth route
addOauthRoute(app)
// Assets
const queue = kue.createQueue({ redis: process.env[process.env.REDIS_PROVIDER] })
const clusterWorkerSize = parseInt(process.env.CLUSTER_WORKERS, 10) || 1
const simultaneousWorkerRenders = parseInt(process.env.SIMULTANEOUS_RENDERS, 10) || 1
const renderProcessTimeout = parseInt(process.env.RENDER_PROCESS_TIMEOUT, 10) || 60
const renderJobTtl = (parseInt(process.env.RENDER_JOB_TTL, 10) || 30) * 1000
// Periodically clear stuck jobs
queue.watchStuckJobs()
// Report Kue stats to Librato
librato.configure({
email: process.env.LIBRATO_EMAIL,
token: process.env.LIBRATO_TOKEN,
source: process.env.DYNO,
})
librato.start()
librato.on('error', (err) => {
Honeybadger.notify(err)
console.error(err)
})
const libratoReporter = setInterval(() => {
queue.inactiveCount((err, total) => {
if (!err) {
librato.measure('kue.inactive.count', total)
}
})
queue.activeCount((err, total) => {
if (!err) {
librato.measure('kue.active.count', total)
}
})
const data = logfmt.requestLogger.commonFormatter(req, res)
data.useragent = req.headers['user-agent']
return data
}))
// Parse cookies (for determining to pre-render or not)
app.use(cookieParser())
// Send stats to Librato
librato.configure({
email: process.env.LIBRATO_EMAIL,
token: process.env.LIBRATO_TOKEN,
source: process.env.DYNO,
})
librato.start()
app.use(librato.middleware())
librato.on('error', (err) => {
console.log('[librato] ERROR', err)
})
// Use Helmet to lock things down
app.use(helmet())
const indexStr = fs.readFileSync(path.join(__dirname, './../../public/index.html'), 'utf-8')
const stats = JSON.parse(fs.readFileSync(path.join(__dirname, './../../webpack-stats/server.json'), 'utf-8'))
// Wire up OAuth route
addOauthRoute(app)
// Assets
app.use(express.static('public', { index: false, redirect: false }))
currentToken().then((token) => {
librato.timing('iso.render_time', (libratoDone) => {
// Kick off the render
console.log(`[${requestId}][render] Enqueueing render`)
const renderOpts = {
accessToken: token.token.access_token,
expiresAt: token.token.expires_at,
originalUrl: req.originalUrl,
url: req.url,
timingHeader,
requestId,
}
const job = queue
.create('render', renderOpts)
.ttl(1.1 * preRenderTimeout) // So we don't lose the job mid-timeout
.removeOnComplete(true)
.save()