188 lines
8.3 KiB
JavaScript
188 lines
8.3 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const rt = require('../ResTool');
|
|
const config = require('../../config.json');
|
|
const mysql = require('../../libs/mysql_pool');
|
|
const tool = require('../../includes/apiTool');
|
|
const exec = require('child_process').exec;
|
|
const execSync = require('child_process').execSync;
|
|
const so = require('../../includes/storeObject');
|
|
|
|
router
|
|
.get('/', (req, res) => {
|
|
res.send({ name: 'WebIO IOCmd API' });
|
|
})
|
|
.post('*', async(req,res,n) => {
|
|
try{
|
|
res.db = await mysql.getConn();
|
|
}catch(e){
|
|
console.log(`Get DB Connection ERROR ${e}`);
|
|
return n('ERR8100');
|
|
}
|
|
n();
|
|
})
|
|
.post('/iocmd', (req, res, n) => {
|
|
if (!config.permission.iocmd) return n('ERR9000');
|
|
if (!tool.checkPermission(req)) return n('ERR9000');
|
|
let arr = req.body;
|
|
if (!arr.data) return n('ERR0000');
|
|
if (!arr.data.cmd) return n('ERR0030');
|
|
if (!arr.data.devs) return n('ERR0029');
|
|
|
|
let cmds = arr.data.cmd.split(' ');
|
|
if (cmds.length != 2) return n('ERR0030');
|
|
if (cmds[0] == 2 && !(cmds[1] > 16 && cmds[1] < 30)) return n('ERR0031');
|
|
|
|
let cmd = `echo '${cmds[0]} ${cmds[1]} ${arr.data.devs}' > ${config.cmdpath.iocmd}`;
|
|
exec(cmd, (err, sout, serr) => {
|
|
let data = {};
|
|
data.record = [];
|
|
res.api_res = data;
|
|
|
|
let dos = [];
|
|
let les = [];
|
|
let ios = [];
|
|
let devs = arr.data.devs.split(',');
|
|
let regex_do = /^do([0-9]+)$/;
|
|
let regex_le = /^le([0-9]+)$/;
|
|
let regex_io = /^iogroup([0-9]+)$/;
|
|
for (let i in devs) {
|
|
let s = devs[i];
|
|
if (!s.trim()) continue;
|
|
if (regex_do.test(s)) {
|
|
dos.push(s.replace(regex_do, '$1'));
|
|
} else if (regex_le.test(s)) {
|
|
les.push(s.replace(regex_le, '$1'));
|
|
} else if (regex_io.test(s)) {
|
|
ios.push(s.replace(regex_io, '$1'));
|
|
}
|
|
}
|
|
|
|
let obj = so.get(req.headers['x-auth-token']);
|
|
let u = '';
|
|
if (obj != null && 'user' in obj && 'account' in obj.user) u = obj.user.account;
|
|
let pros = [];
|
|
|
|
if (dos.length > 0) {
|
|
let query = "select * from ??.?? where `douid` in (?)";
|
|
let param = [config.db.db1, 'dolist', dos];
|
|
pros.push(tool.promiseQuery(res, query, param, 'do'));
|
|
}
|
|
if (les.length > 0) {
|
|
let query = "select * from ??.?? where `leonelistuid` in (?)";
|
|
let param = [config.db.db1, 'leonelist', les];
|
|
pros.push(tool.promiseQuery(res, query, param, 'leone'));
|
|
}
|
|
if (ios.length > 0) {
|
|
let query = "select * from ??.?? where `iogroupuid` in (?)";
|
|
let param = [config.db.db1, 'iogroup', ios];
|
|
pros.push(tool.promiseQuery(res, query, param, 'iogroup'));
|
|
}
|
|
|
|
Promise.all(pros)
|
|
.then(r => {
|
|
let c = r.length;
|
|
let q = "insert into ??.?? (`eventtag`, `iolabel`, `ioname`, `iosetting1`, `iosetting2`, `iosetting3`, `ioevent`, `ioeventtst`) values ";
|
|
let p = [config.db.db2, 'jciocert'];
|
|
// for (let i in r) {
|
|
! function runLog(json) {
|
|
if (!json) return;
|
|
if (json.key == 'do') {
|
|
let d = json.data;
|
|
let qs = [];
|
|
for (let j in d) {
|
|
let doStat = execSync(`dotchk ${d[j].douid}`) == 1 ? 'HIGH' : 'LOW';
|
|
let str = `('WEB', 'DO${d[j].douid}', '${d[j].doname}', '${d[j].dologic}', '${doStat}', '${u}', '${doStat}', unix_timestamp())`;
|
|
qs.push(str);
|
|
}
|
|
tool.promiseQuery(res, q + qs.join(','), p)
|
|
.then(r => {
|
|
c--;
|
|
})
|
|
.catch(err => {
|
|
c--;
|
|
});
|
|
runLog(r.pop());
|
|
} else if (json.key == 'leone') {
|
|
let d = json.data;
|
|
let qs = [];
|
|
let mm = tool.getMode(req);
|
|
let act = tool.getCmd(req);
|
|
tool.getLeoneRT((rts) => {
|
|
for (let j in d) {
|
|
let st = '';
|
|
for (var k in rts) {
|
|
if (rts[k].ip == d[j].leoneip) {
|
|
for (let o in mm) {
|
|
if (rts[k].mode == mm[o].mode) {
|
|
st = mm[o].name;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
let cn = '';
|
|
for (let k in act) {
|
|
if (act[k].cmd == `${cmds[0]} ${cmds[1]}`) {
|
|
cn = act[k].name;
|
|
break;
|
|
} else if (act[k].cmd == cmds[0]) {
|
|
cn = act[k].name;
|
|
break;
|
|
}
|
|
}
|
|
let str = `('WEB', 'LeOne', '${d[j].leonename}', '-', '${st}', '${u}', '${cn}', unix_timestamp())`;
|
|
qs.push(str);
|
|
}
|
|
tool.promiseQuery(res, q + qs.join(','), p)
|
|
.then(r => {
|
|
c--;
|
|
})
|
|
.catch(err => {
|
|
c--;
|
|
});
|
|
runLog(r.pop());
|
|
});
|
|
} else if (json.key == 'iogroup') {
|
|
let d = json.data;
|
|
let qs = [];
|
|
let act = tool.getCmd(req);
|
|
for (let j in d) {
|
|
let cn = '';
|
|
for (let k in act) {
|
|
if (act[k].cmd == `${cmds[0]} ${cmds[1]}`) {
|
|
cn = act[k].name;
|
|
break;
|
|
} else if (act[k].cmd == cmds[0]) {
|
|
cn = act[k].name;
|
|
break;
|
|
}
|
|
}
|
|
let str = `('WEB', 'IOGroup', '${d[j].iogroupname}', '-', '-', '${u}', '${cn}', unix_timestamp())`;
|
|
qs.push(str);
|
|
}
|
|
tool.promiseQuery(res, q + qs.join(','), p)
|
|
.then(r => {
|
|
c--;
|
|
})
|
|
.catch(err => {
|
|
c--;
|
|
});
|
|
runLog(r.pop());
|
|
}
|
|
}(r.pop())
|
|
|
|
! function chkFin() {
|
|
if (c <= 0) return n();
|
|
setTimeout(chkFin, 1000);
|
|
}()
|
|
})
|
|
.catch(err => {
|
|
return n();
|
|
});
|
|
});
|
|
})
|
|
.all('*', rt.send);
|
|
|
|
module.exports = router; |