smstools.js 1.69 KB
const childProcess = require('child_process');
const express = require('express');
const escapeQuotes = require('escape-quotes');

const config = require('komodo-sdk/config');
const logger = require('komodo-sdk/logger');

const smstoolsUtil = require('../../smstools-util');
const smstoolsStatus = require('../../smstools-status');
const smstoolsStatusParsed = require('../../smstools-status-parsed');

const router = express.Router();
module.exports = router;

async function pageStatus(req, res) {
    const filename = config.smstools_status_file || '//var/log/smsd/smsd_stats/status';
    const status = await smstoolsStatusParsed(filename);
    res.json(status);
}

async function pageStatusRaw(req, res) {
    const filename = config.smstools_status_file || '//var/log/smsd/smsd_stats/status';
    const statusContent = await smstoolsStatus(filename);
    res.end(statusContent);
}

async function pageRestart(req, res) {
    res.json(await smstoolsUtil.restart());
}

function pageLog(req, res) {
    const maxLines = (Number(req.query.max) || 200);
    const keyword = req.query.keyword && req.query.keyword.trim() && escapeQuotes(req.query.keyword.trim(), '\'"&|*<>[];$');
    const cmd = req.query.keyword ? `tail -n ${maxLines * 50} | grep ${keyword} | tail -n ${maxLines} | tac`
        : `tail -n ${maxLines} /var/log/smsd/smsd.log | tac`;

    logger.verbose('ROUTER-SMSTOOLS: Getting log', { keyword, maxLines, cmd });
    childProcess.exec(cmd, (err, stdout, stderr) => {
        res.json({
            err,
            stdout,
            stderr,
        });
    });
}

router.get('/status', pageStatus);
router.get('/status/raw', pageStatusRaw);
router.get('/restart', pageRestart);
router.get('/log', pageLog);