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 smstoolsConfigData = require('../../smstools-config/config-file'); 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()); } async function pageModemList(req, res) { const modems = []; // eslint-disable-next-line no-restricted-syntax for (const [key, value] of Object.entries(smstoolsConfigData.modems || {})) { modems.push({ label: `${key}: ${value.device}, INCOMING${value.outgoing ? ' and OUTGOING' : ''}`, value: key, data: value, }); } res.json(modems); } function pageLog(req, res) { const maxLines = (Number(req.query.max) || 200); const keyword = req.query.keyword && escapeQuotes(req.query.keyword, '\'\n"&|*<>[];$ '); const cmd = req.query.keyword ? `tail -n ${maxLines * 50} /var/log/smsd/smsd.log | grep --ignore-case ${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, }); }); } async function pageSpoolCount(req, res) { const checkedCount = await smstoolsUtil.fileCountOnDir('/var/spool/sms/checked'); const outgoingCount = await smstoolsUtil.fileCountOnDir('/var/spool/sms/outgoing'); const indosatCount = await smstoolsUtil.fileCountOnDir('/var/spool/sms/queue/indosat'); const otherCount = await smstoolsUtil.fileCountOnDir('/var/spool/sms/queue/other'); res.json({ checkedCount, outgoingCount, indosatCount, otherCount, totalQueueCount: Number(checkedCount) + Number(outgoingCount) + Number(indosatCount) + Number(otherCount), }); } router.get('/status', pageStatus); router.get('/status/raw', pageStatusRaw); router.get('/restart', pageRestart); router.get('/log', pageLog); router.get('/spool-count', pageSpoolCount); router.get('/modems', pageModemList);