diff --git a/src/routes/apps.js b/src/routes/apps.js index a6e803c27..1c71ba6c7 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -598,41 +598,40 @@ async function update(req, res, next) { } // this route is for streaming logs -function getLogStream(req, res, next) { +async function getLogStream(req, res, next) { assert.strictEqual(typeof req.app, 'object'); - var lines = 'lines' in req.query ? parseInt(req.query.lines, 10) : 10; // we ignore last-event-id + const lines = 'lines' in req.query ? parseInt(req.query.lines, 10) : 10; // we ignore last-event-id if (isNaN(lines)) return next(new HttpError(400, 'lines must be a valid number')); function sse(id, data) { return 'id: ' + id + '\ndata: ' + data + '\n\n'; } if (req.headers.accept !== 'text/event-stream') return next(new HttpError(400, 'This API call requires EventStream')); - var options = { + const options = { lines: lines, follow: true, format: 'json' }; - apps.getLogs(req.app, options, function (error, logStream) { - if (error) return next(BoxError.toHttpError(error)); + const [error, logStream] = await safe(apps.getLogs(req.app, options)); + if (error) return next(BoxError.toHttpError(error)); - res.writeHead(200, { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - 'Connection': 'keep-alive', - 'X-Accel-Buffering': 'no', // disable nginx buffering - 'Access-Control-Allow-Origin': '*' - }); - res.write('retry: 3000\n'); - res.on('close', logStream.close); - logStream.on('data', function (data) { - var obj = JSON.parse(data); - res.write(sse(obj.realtimeTimestamp, JSON.stringify(obj))); // send timestamp as id - }); - logStream.on('end', res.end.bind(res)); - logStream.on('error', res.end.bind(res, null)); + res.writeHead(200, { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive', + 'X-Accel-Buffering': 'no', // disable nginx buffering + 'Access-Control-Allow-Origin': '*' }); + res.write('retry: 3000\n'); + res.on('close', logStream.close); + logStream.on('data', function (data) { + var obj = JSON.parse(data); + res.write(sse(obj.realtimeTimestamp, JSON.stringify(obj))); // send timestamp as id + }); + logStream.on('end', res.end.bind(res)); + logStream.on('error', res.end.bind(res, null)); } async function getLogs(req, res, next) {