79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
|
|
import { Parse } from 'parse/node';
|
||
|
|
import PromiseRouter from '../PromiseRouter';
|
||
|
|
import rest from '../rest';
|
||
|
|
|
||
|
|
const Promise = Parse.Promise;
|
||
|
|
const INFO = 'info';
|
||
|
|
const ERROR = 'error';
|
||
|
|
const MILLISECONDS_IN_A_DAY = 24 * 60 * 60 * 1000;
|
||
|
|
|
||
|
|
// only allow request with master key
|
||
|
|
let enforceSecurity = (auth) => {
|
||
|
|
if (!auth || !auth.isMaster) {
|
||
|
|
throw new Parse.Error(
|
||
|
|
Parse.Error.OPERATION_FORBIDDEN,
|
||
|
|
'Clients aren\'t allowed to perform the ' +
|
||
|
|
'get' + ' operation on logs.'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// check that date input is valid
|
||
|
|
let isValidDateTime = (date) => {
|
||
|
|
if (!date || isNaN(Number(date))) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export class LoggerController {
|
||
|
|
|
||
|
|
constructor(loggerAdapter) {
|
||
|
|
this._loggerAdapter = loggerAdapter;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Returns a promise for a {response} object.
|
||
|
|
// query params:
|
||
|
|
// level (optional) Level of logging you want to query for (info || error)
|
||
|
|
// from (optional) Start time for the search. Defaults to 1 week ago.
|
||
|
|
// until (optional) End time for the search. Defaults to current time.
|
||
|
|
// order (optional) Direction of results returned, either “asc” or “desc”. Defaults to “desc”.
|
||
|
|
// size (optional) Number of rows returned by search. Defaults to 10
|
||
|
|
handleGET(req) {
|
||
|
|
if (!this._loggerAdapter) {
|
||
|
|
throw new Parse.Error(Parse.Error.PUSH_MISCONFIGURED,
|
||
|
|
'Logger adapter is not availabe');
|
||
|
|
}
|
||
|
|
|
||
|
|
let promise = new Parse.Promise();
|
||
|
|
let from = (isValidDateTime(req.query.from) && new Date(req.query.from)) ||
|
||
|
|
new Date(Date.now() - 7 * MILLISECONDS_IN_A_DAY);
|
||
|
|
let until = (isValidDateTime(req.query.until) && new Date(req.query.until)) || new Date();
|
||
|
|
let size = Number(req.query.size) || 10;
|
||
|
|
let order = req.query.order || 'desc';
|
||
|
|
let level = req.query.level || INFO;
|
||
|
|
enforceSecurity(req.auth);
|
||
|
|
this._loggerAdapter.query({
|
||
|
|
from,
|
||
|
|
until,
|
||
|
|
size,
|
||
|
|
order,
|
||
|
|
level,
|
||
|
|
}, (result) => {
|
||
|
|
promise.resolve({
|
||
|
|
response: result
|
||
|
|
});
|
||
|
|
});
|
||
|
|
return promise;
|
||
|
|
}
|
||
|
|
|
||
|
|
getExpressRouter() {
|
||
|
|
let router = new PromiseRouter();
|
||
|
|
router.route('GET','/logs', (req) => {
|
||
|
|
return this.handleGET(req);
|
||
|
|
});
|
||
|
|
return router;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export default LoggerController;
|