diff --git a/src/apps.js b/src/apps.js index ebc9261ab..bd8dd8b12 100644 --- a/src/apps.js +++ b/src/apps.js @@ -79,6 +79,8 @@ exports = module.exports = { getIcon, getMemoryLimit, + listEventlog, + downloadFile, uploadFile, @@ -2287,6 +2289,16 @@ async function schedulePendingTasks() { } } +async function listEventlog(app, page, perPage) { + assert.strictEqual(typeof app, 'object'); + assert.strictEqual(typeof page, 'number'); + assert.strictEqual(typeof perPage, 'number'); + + const actions = []; + const search = app.id; + return await eventlog.listPaged(actions, search, page, perPage); +} + function downloadFile(app, filePath, callback) { assert.strictEqual(typeof app, 'object'); assert.strictEqual(typeof filePath, 'string'); diff --git a/src/routes/apps.js b/src/routes/apps.js index 13e53f580..56a2a0f49 100644 --- a/src/routes/apps.js +++ b/src/routes/apps.js @@ -13,6 +13,7 @@ exports = module.exports = { update, getLogs, getLogStream, + listEventlog, listBackups, repair, @@ -798,3 +799,16 @@ async function setMounts(req, res, next) { next(new HttpSuccess(202, { taskId: result.taskId })); } + +async function listEventlog(req, res, next) { + const page = typeof req.query.page !== 'undefined' ? parseInt(req.query.page) : 1; + if (!page || page < 0) return next(new HttpError(400, 'page query param has to be a postive number')); + + const perPage = typeof req.query.per_page !== 'undefined'? parseInt(req.query.per_page) : 25; + if (!perPage || perPage < 0) return next(new HttpError(400, 'per_page query param has to be a postive number')); + + const [error, eventlogs] = await safe(apps.listEventlog(req.app, page, perPage)); + if (error) return next(BoxError.toHttpError(error)); + + next(new HttpSuccess(200, { eventlogs })); +} diff --git a/src/server.js b/src/server.js index bc3c5b082..4470ff33c 100644 --- a/src/server.js +++ b/src/server.js @@ -232,6 +232,7 @@ function initializeExpressSync() { router.post('/api/v1/apps/:id/restart', json, token, routes.apps.load, authorizeOperator, routes.apps.restart); router.get ('/api/v1/apps/:id/logstream', token, routes.apps.load, authorizeOperator, routes.apps.getLogStream); router.get ('/api/v1/apps/:id/logs', token, routes.apps.load, authorizeOperator, routes.apps.getLogs); + router.get ('/api/v1/apps/:id/eventlog', token, routes.apps.load, authorizeOperator, routes.apps.listEventlog); router.post('/api/v1/apps/:id/clone', json, token, routes.apps.load, authorizeAdmin, routes.apps.clone); router.get ('/api/v1/apps/:id/download', token, routes.apps.load, authorizeOperator, routes.apps.downloadFile); router.post('/api/v1/apps/:id/upload', json, token, multipart, routes.apps.load, authorizeOperator, routes.apps.uploadFile);