diff --git a/lib/apiserver/routers/smstools-config.js b/lib/apiserver/routers/smstools-config.js index 2906067..17e2529 100644 --- a/lib/apiserver/routers/smstools-config.js +++ b/lib/apiserver/routers/smstools-config.js @@ -152,6 +152,7 @@ async function pageInstallConfig(req, res) { } function pageSmsdLog(req, res) { + // deprecated const maxLines = (req.params.maxLines || 200); childProcess.exec(`tail -n ${maxLines} /var/log/smsd/smsd.log | tac`, (err, stdout, stderr) => { res.json({ diff --git a/lib/apiserver/routers/smstools.js b/lib/apiserver/routers/smstools.js index 32c02fc..a2d836a 100644 --- a/lib/apiserver/routers/smstools.js +++ b/lib/apiserver/routers/smstools.js @@ -1,5 +1,9 @@ +const childProcess = require('child_process'); const express = require('express'); +const escapeQuotes = require('escape-quotes'); + const config = require('komodo-sdk/config'); + const smstoolsUtil = require('../../smstools-util'); const smstoolsStatus = require('../../smstools-status'); const smstoolsStatusParsed = require('../../smstools-status-parsed'); @@ -23,6 +27,22 @@ async function pageRestart(req, res) { res.json(await smstoolsUtil.restart()); } +function pageSmsdLog(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`; + + 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('/smsd-log', pageSmsdLog); diff --git a/package-lock.json b/package-lock.json index bf16bcb..1f2c777 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1055,11 +1055,18 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, + "escape-quotes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-quotes/-/escape-quotes-1.0.2.tgz", + "integrity": "sha1-tIltSmz4LdWzP0m3E0CMY4D2zZc=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { "version": "6.7.1", diff --git a/package.json b/package.json index df47a3a..950b5ed 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ }, "dependencies": { "body-parser": "^1.19.0", + "escape-quotes": "^1.0.2", "express": "^4.17.1", "get-stdin": "^7.0.0", "komodo-center-messaging-client-lib": "git+http://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git",