...
|
...
|
@@ -9,10 +9,16 @@ |
|
|
import Router from 'koa-router';
|
|
|
|
|
|
import {
|
|
|
Project
|
|
|
Project,
|
|
|
LogScanner
|
|
|
} from '../../models';
|
|
|
|
|
|
import InfluxDB from '../../logger/influxdb';
|
|
|
import Operation from '../../logger/operation';
|
|
|
import Schedulers from '../../logger/schedulers';
|
|
|
import ScannerRunner from './scanner_runner';
|
|
|
|
|
|
import _ from 'lodash';
|
|
|
|
|
|
const r = new Router();
|
|
|
|
...
|
...
|
@@ -27,7 +33,7 @@ const monitor = { |
|
|
name: '线上环境',
|
|
|
value: 'production',
|
|
|
checked: env === 'production'
|
|
|
},{
|
|
|
}, {
|
|
|
name: '灰度环境',
|
|
|
value: 'preview',
|
|
|
checked: env === 'preview'
|
...
|
...
|
@@ -79,15 +85,111 @@ const monitor = { |
|
|
where += ' order by time desc';
|
|
|
}
|
|
|
|
|
|
let sql = `select * from ${influxName} ${where} limit ${limit} OFFSET ${(page -1) * limit}`;
|
|
|
|
|
|
let sql = `select * from ${influxName} ${where} limit ${limit} OFFSET ${(page - 1) * limit}`;
|
|
|
|
|
|
let logs = await InfluxDB.query(sql);
|
|
|
|
|
|
ctx.body = logs[0];
|
|
|
},
|
|
|
|
|
|
async scanners(ctx) {
|
|
|
let data = await LogScanner.findAll();
|
|
|
let jobs = Schedulers.getJobs();
|
|
|
|
|
|
_.forEach(data, d => {
|
|
|
d.sql = `select * from ${d.tableName} where ${d.tableWhere} and time > {lastTime} `;
|
|
|
d.state = jobs.has(d._id);
|
|
|
});
|
|
|
await ctx.render('action/log_scanners', {scanners: data});
|
|
|
},
|
|
|
|
|
|
async scanners_new(ctx) {
|
|
|
await ctx.render('action/log_scanners_form');
|
|
|
},
|
|
|
async scanners_edit(ctx) {
|
|
|
let id = ctx.query.id;
|
|
|
let scanner = await LogScanner.findById(id);
|
|
|
|
|
|
await ctx.render('action/log_scanners_form', scanner);
|
|
|
},
|
|
|
scanners_save: async(ctx, next) => {
|
|
|
let scanner = ctx.request.body;
|
|
|
let _id = ctx.request.body._id;
|
|
|
|
|
|
if (_id) {
|
|
|
await LogScanner.update({
|
|
|
_id: _id
|
|
|
}, {
|
|
|
$set: scanner
|
|
|
});
|
|
|
await Operation.action(ctx.session.user, 'EDIT_SCANNER', '修改日志扫描', scanner);
|
|
|
} else {
|
|
|
delete scanner._id;
|
|
|
await LogScanner.insert(scanner);
|
|
|
await Operation.action(ctx.session.user, 'NEW_SCANNER', '新增日志扫描', scanner);
|
|
|
}
|
|
|
|
|
|
ctx.redirect('/monitor/scanners');
|
|
|
ctx.status = 301;
|
|
|
},
|
|
|
scanners_del: async(ctx, next) => {
|
|
|
let id = ctx.request.body.id;
|
|
|
let scanner = await LogScanner.findById(id);
|
|
|
|
|
|
await LogScanner.removeById(id);
|
|
|
await Operation.action(ctx.session.user, 'DELETE_SCANNER', '删除日志扫描', scanner);
|
|
|
ctx.body = {
|
|
|
code: 200
|
|
|
};
|
|
|
},
|
|
|
|
|
|
async scanner_start(ctx) {
|
|
|
let id = ctx.request.body.id;
|
|
|
let scanner = await LogScanner.findById(id);
|
|
|
let jobs = Schedulers.getJobs();
|
|
|
|
|
|
if (jobs.has(id)) {
|
|
|
return ctx.body = {
|
|
|
code: 400,
|
|
|
message: '扫描正在运行中'
|
|
|
};
|
|
|
}
|
|
|
|
|
|
if (scanner) {
|
|
|
let runner = new ScannerRunner(scanner);
|
|
|
Schedulers.run(id, scanner.cron, runner.run.bind(runner));
|
|
|
Operation.action(ctx.session.user, 'START_SCANNER', '启动日志扫描', scanner);
|
|
|
return ctx.body = {
|
|
|
code: 200
|
|
|
};
|
|
|
} else {
|
|
|
return ctx.body = {
|
|
|
code: 400,
|
|
|
message: '配置不存在'
|
|
|
};
|
|
|
}
|
|
|
},
|
|
|
|
|
|
async scanner_stop(ctx) {
|
|
|
let id = ctx.request.body.id;
|
|
|
Schedulers.cancel(id);
|
|
|
return ctx.body = {
|
|
|
code: 200
|
|
|
};
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
r.get('/log', monitor.log);
|
|
|
r.get('/log/query', monitor.query);
|
|
|
|
|
|
r.get('/scanners', monitor.scanners);
|
|
|
r.get('/scanners/new', monitor.scanners_new);
|
|
|
r.get('/scanners/edit', monitor.scanners_edit);
|
|
|
|
|
|
r.post('/scanners/save', monitor.scanners_save);
|
|
|
r.post('/scanners/del', monitor.scanners_del);
|
|
|
r.post('/scanners/start', monitor.scanner_start);
|
|
|
r.post('/scanners/stop', monitor.scanner_stop);
|
|
|
|
|
|
export default r; |
|
|
\ No newline at end of file |
...
|
...
|
|