tuimon 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI.md +191 -0
- package/README.md +240 -94
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +3 -0
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +224 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +106 -0
- package/dist/config.js.map +1 -0
- package/dist/fkeybar.d.ts.map +1 -1
- package/dist/fkeybar.js +13 -0
- package/dist/fkeybar.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +148 -18
- package/dist/index.js.map +1 -1
- package/dist/layout/generator-css.d.ts +3 -0
- package/dist/layout/generator-css.d.ts.map +1 -0
- package/dist/layout/generator-css.js +202 -0
- package/dist/layout/generator-css.js.map +1 -0
- package/dist/layout/generator-js.d.ts +3 -0
- package/dist/layout/generator-js.d.ts.map +1 -0
- package/dist/layout/generator-js.js +353 -0
- package/dist/layout/generator-js.js.map +1 -0
- package/dist/layout/generator.d.ts +4 -0
- package/dist/layout/generator.d.ts.map +1 -0
- package/dist/layout/generator.js +124 -0
- package/dist/layout/generator.js.map +1 -0
- package/dist/layout/theme.d.ts +4 -0
- package/dist/layout/theme.d.ts.map +1 -0
- package/dist/layout/theme.js +28 -0
- package/dist/layout/theme.js.map +1 -0
- package/dist/layout/types.d.ts +68 -0
- package/dist/layout/types.d.ts.map +1 -0
- package/dist/layout/types.js +3 -0
- package/dist/layout/types.js.map +1 -0
- package/dist/quick/auto-layout.d.ts +5 -0
- package/dist/quick/auto-layout.d.ts.map +1 -0
- package/dist/quick/auto-layout.js +262 -0
- package/dist/quick/auto-layout.js.map +1 -0
- package/dist/quick/db/detect.d.ts +16 -0
- package/dist/quick/db/detect.d.ts.map +1 -0
- package/dist/quick/db/detect.js +131 -0
- package/dist/quick/db/detect.js.map +1 -0
- package/dist/quick/db/mongo.d.ts +10 -0
- package/dist/quick/db/mongo.d.ts.map +1 -0
- package/dist/quick/db/mongo.js +81 -0
- package/dist/quick/db/mongo.js.map +1 -0
- package/dist/quick/db/mysql.d.ts +8 -0
- package/dist/quick/db/mysql.d.ts.map +1 -0
- package/dist/quick/db/mysql.js +43 -0
- package/dist/quick/db/mysql.js.map +1 -0
- package/dist/quick/db/postgres.d.ts +8 -0
- package/dist/quick/db/postgres.d.ts.map +1 -0
- package/dist/quick/db/postgres.js +47 -0
- package/dist/quick/db/postgres.js.map +1 -0
- package/dist/quick/db/sqlite.d.ts +8 -0
- package/dist/quick/db/sqlite.d.ts.map +1 -0
- package/dist/quick/db/sqlite.js +43 -0
- package/dist/quick/db/sqlite.js.map +1 -0
- package/dist/quick/db-mode.d.ts +13 -0
- package/dist/quick/db-mode.d.ts.map +1 -0
- package/dist/quick/db-mode.js +159 -0
- package/dist/quick/db-mode.js.map +1 -0
- package/dist/quick/detect.d.ts +4 -0
- package/dist/quick/detect.d.ts.map +1 -0
- package/dist/quick/detect.js +76 -0
- package/dist/quick/detect.js.map +1 -0
- package/dist/quick/file-mode.d.ts +5 -0
- package/dist/quick/file-mode.d.ts.map +1 -0
- package/dist/quick/file-mode.js +158 -0
- package/dist/quick/file-mode.js.map +1 -0
- package/dist/quick/parsers/csv.d.ts +3 -0
- package/dist/quick/parsers/csv.d.ts.map +1 -0
- package/dist/quick/parsers/csv.js +145 -0
- package/dist/quick/parsers/csv.js.map +1 -0
- package/dist/quick/parsers/detect-meta.d.ts +7 -0
- package/dist/quick/parsers/detect-meta.d.ts.map +1 -0
- package/dist/quick/parsers/detect-meta.js +35 -0
- package/dist/quick/parsers/detect-meta.js.map +1 -0
- package/dist/quick/parsers/json.d.ts +3 -0
- package/dist/quick/parsers/json.d.ts.map +1 -0
- package/dist/quick/parsers/json.js +74 -0
- package/dist/quick/parsers/json.js.map +1 -0
- package/dist/quick/parsers/log.d.ts +3 -0
- package/dist/quick/parsers/log.d.ts.map +1 -0
- package/dist/quick/parsers/log.js +185 -0
- package/dist/quick/parsers/log.js.map +1 -0
- package/dist/quick/parsers/modsec.d.ts +3 -0
- package/dist/quick/parsers/modsec.d.ts.map +1 -0
- package/dist/quick/parsers/modsec.js +338 -0
- package/dist/quick/parsers/modsec.js.map +1 -0
- package/dist/quick/presets/coverage.d.ts +3 -0
- package/dist/quick/presets/coverage.d.ts.map +1 -0
- package/dist/quick/presets/coverage.js +362 -0
- package/dist/quick/presets/coverage.js.map +1 -0
- package/dist/quick/presets/deps.d.ts +3 -0
- package/dist/quick/presets/deps.d.ts.map +1 -0
- package/dist/quick/presets/deps.js +194 -0
- package/dist/quick/presets/deps.js.map +1 -0
- package/dist/quick/presets/docker.d.ts +3 -0
- package/dist/quick/presets/docker.d.ts.map +1 -0
- package/dist/quick/presets/docker.js +100 -0
- package/dist/quick/presets/docker.js.map +1 -0
- package/dist/quick/presets/git.d.ts +3 -0
- package/dist/quick/presets/git.d.ts.map +1 -0
- package/dist/quick/presets/git.js +116 -0
- package/dist/quick/presets/git.js.map +1 -0
- package/dist/quick/presets/ps.d.ts +3 -0
- package/dist/quick/presets/ps.d.ts.map +1 -0
- package/dist/quick/presets/ps.js +168 -0
- package/dist/quick/presets/ps.js.map +1 -0
- package/dist/quick/presets/runner.d.ts +3 -0
- package/dist/quick/presets/runner.d.ts.map +1 -0
- package/dist/quick/presets/runner.js +20 -0
- package/dist/quick/presets/runner.js.map +1 -0
- package/dist/quick/presets/types.d.ts +7 -0
- package/dist/quick/presets/types.d.ts.map +1 -0
- package/dist/quick/presets/types.js +2 -0
- package/dist/quick/presets/types.js.map +1 -0
- package/dist/quick/types.d.ts +90 -0
- package/dist/quick/types.d.ts.map +1 -0
- package/dist/quick/types.js +3 -0
- package/dist/quick/types.js.map +1 -0
- package/dist/quick/watch-mode.d.ts +3 -0
- package/dist/quick/watch-mode.d.ts.map +1 -0
- package/dist/quick/watch-mode.js +156 -0
- package/dist/quick/watch-mode.js.map +1 -0
- package/dist/server.js +2 -2
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +9 -2
- package/dist/types.d.ts.map +1 -1
- package/examples/demo.ts +134 -0
- package/examples/generate-access-log.ts +42 -0
- package/examples/screenshot-test.ts +105 -0
- package/examples/screenshot.png +0 -0
- package/frame-log.txt +830 -0
- package/package.json +10 -5
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
function parsePercent(value) {
|
|
3
|
+
return parseFloat(value.replace('%', '')) || 0;
|
|
4
|
+
}
|
|
5
|
+
function execCommand(cmd) {
|
|
6
|
+
try {
|
|
7
|
+
return execSync(cmd, { encoding: 'utf-8', timeout: 10_000 });
|
|
8
|
+
}
|
|
9
|
+
catch (err) {
|
|
10
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
11
|
+
if (msg.includes('ENOENT') || msg.includes('not found') || msg.includes('command not found')) {
|
|
12
|
+
throw new Error('[tuimon] Docker not found. Make sure Docker is installed and running.');
|
|
13
|
+
}
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function parseJsonLines(output) {
|
|
18
|
+
return output
|
|
19
|
+
.trim()
|
|
20
|
+
.split('\n')
|
|
21
|
+
.filter((line) => line.trim() !== '')
|
|
22
|
+
.map((line) => JSON.parse(line));
|
|
23
|
+
}
|
|
24
|
+
export function dockerPreset() {
|
|
25
|
+
// Verify docker is available on init
|
|
26
|
+
try {
|
|
27
|
+
execSync('docker --version', { encoding: 'utf-8', stdio: 'pipe' });
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new Error('[tuimon] Docker not found. Make sure Docker is installed and running.');
|
|
31
|
+
}
|
|
32
|
+
const layout = {
|
|
33
|
+
title: 'Docker',
|
|
34
|
+
stats: [
|
|
35
|
+
{ id: 'containers', label: 'Containers', type: 'stat' },
|
|
36
|
+
{ id: 'running', label: 'Running', type: 'stat' },
|
|
37
|
+
{ id: 'totalCpu', label: 'CPU Usage', type: 'gauge' },
|
|
38
|
+
{ id: 'totalMem', label: 'Memory', type: 'gauge' },
|
|
39
|
+
],
|
|
40
|
+
panels: [
|
|
41
|
+
{ id: 'cpuHistory', label: 'CPU per Container', type: 'line', span: 2 },
|
|
42
|
+
{ id: 'health', label: 'Container Status', type: 'status-grid' },
|
|
43
|
+
{ id: 'memUsage', label: 'Memory per Container', type: 'bar' },
|
|
44
|
+
{ id: 'events', label: 'Recent Events', type: 'event-log', throttle: 3000 },
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
const data = () => {
|
|
48
|
+
const statsOutput = execCommand("docker stats --no-stream --format '{{json .}}'");
|
|
49
|
+
const statsEntries = parseJsonLines(statsOutput);
|
|
50
|
+
const psOutput = execCommand("docker ps --format '{{json .}}'");
|
|
51
|
+
const psEntries = parseJsonLines(psOutput);
|
|
52
|
+
const totalContainers = psEntries.length;
|
|
53
|
+
const runningCount = psEntries.filter((c) => c.State === 'running').length;
|
|
54
|
+
const totalCpu = statsEntries.reduce((sum, e) => sum + parsePercent(e.CPUPerc), 0);
|
|
55
|
+
const totalMem = statsEntries.length > 0
|
|
56
|
+
? statsEntries.reduce((sum, e) => sum + parsePercent(e.MemPerc), 0) / statsEntries.length
|
|
57
|
+
: 0;
|
|
58
|
+
const cpuHistory = {};
|
|
59
|
+
for (const entry of statsEntries) {
|
|
60
|
+
cpuHistory[entry.Name] = parsePercent(entry.CPUPerc);
|
|
61
|
+
}
|
|
62
|
+
const health = psEntries.map((c) => ({
|
|
63
|
+
label: c.Names,
|
|
64
|
+
status: c.State === 'running' ? 'ok' : c.State === 'exited' ? 'error' : 'warn',
|
|
65
|
+
}));
|
|
66
|
+
const memUsage = {};
|
|
67
|
+
for (const entry of statsEntries) {
|
|
68
|
+
memUsage[entry.Name] = parsePercent(entry.MemPerc);
|
|
69
|
+
}
|
|
70
|
+
let events = [];
|
|
71
|
+
try {
|
|
72
|
+
const eventsOutput = execCommand("docker events --since 60s --until 0s --format '{{json .}}'");
|
|
73
|
+
const lines = eventsOutput
|
|
74
|
+
.trim()
|
|
75
|
+
.split('\n')
|
|
76
|
+
.filter((line) => line.trim() !== '');
|
|
77
|
+
events = lines.map((line) => {
|
|
78
|
+
const parsed = JSON.parse(line);
|
|
79
|
+
const name = parsed.Actor?.Attributes?.name ?? 'unknown';
|
|
80
|
+
const action = parsed.Action ?? 'unknown';
|
|
81
|
+
return { text: `${name}: ${action}`, type: 'info' };
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
events = [];
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
containers: totalContainers,
|
|
89
|
+
running: runningCount,
|
|
90
|
+
totalCpu: Math.round(totalCpu * 100) / 100,
|
|
91
|
+
totalMem: Math.round(totalMem * 100) / 100,
|
|
92
|
+
cpuHistory,
|
|
93
|
+
health,
|
|
94
|
+
memUsage,
|
|
95
|
+
events,
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
return { layout, data, refresh: 1000 };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=docker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/quick/presets/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/git.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAiB9C,wBAAgB,SAAS,IAAI,YAAY,CA+GxC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
function execGit(cmd) {
|
|
3
|
+
try {
|
|
4
|
+
return execSync(cmd, { encoding: 'utf-8', timeout: 30_000, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
5
|
+
}
|
|
6
|
+
catch (err) {
|
|
7
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
8
|
+
if (msg.includes('not a git repository') || msg.includes('Not a git repository')) {
|
|
9
|
+
throw new Error('[tuimon] Not a git repository. Run this command from inside a git repo.');
|
|
10
|
+
}
|
|
11
|
+
if (msg.includes('ENOENT') || msg.includes('not found') || msg.includes('command not found')) {
|
|
12
|
+
throw new Error('[tuimon] Git not found. Make sure git is installed.');
|
|
13
|
+
}
|
|
14
|
+
throw err;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function gitPreset() {
|
|
18
|
+
// Verify we're in a git repo on init
|
|
19
|
+
try {
|
|
20
|
+
execSync('git rev-parse --is-inside-work-tree', { encoding: 'utf-8', stdio: 'pipe' });
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new Error('[tuimon] Not a git repository. Run this command from inside a git repo.');
|
|
24
|
+
}
|
|
25
|
+
const layout = {
|
|
26
|
+
title: 'Git',
|
|
27
|
+
stats: [
|
|
28
|
+
{ id: 'commits', label: 'Total Commits', type: 'stat' },
|
|
29
|
+
{ id: 'contributors', label: 'Contributors', type: 'stat' },
|
|
30
|
+
{ id: 'branches', label: 'Branches', type: 'stat' },
|
|
31
|
+
{ id: 'filesChanged', label: 'Files Changed (30d)', type: 'stat' },
|
|
32
|
+
],
|
|
33
|
+
panels: [
|
|
34
|
+
{ id: 'frequency', label: 'Commits per Day (30 days)', type: 'bar', span: 2 },
|
|
35
|
+
{ id: 'topContributors', label: 'Top Contributors', type: 'bar' },
|
|
36
|
+
{ id: 'topFiles', label: 'Most Changed Files', type: 'bar' },
|
|
37
|
+
{ id: 'recentCommits', label: 'Recent Commits', type: 'event-log', span: 2 },
|
|
38
|
+
],
|
|
39
|
+
};
|
|
40
|
+
const data = () => {
|
|
41
|
+
// Total commits
|
|
42
|
+
const commitCountStr = execGit('git rev-list --count HEAD').trim();
|
|
43
|
+
const commits = parseInt(commitCountStr, 10) || 0;
|
|
44
|
+
// Contributors
|
|
45
|
+
const shortlogOutput = execGit('git shortlog -sn --no-merges HEAD');
|
|
46
|
+
const contributorLines = shortlogOutput
|
|
47
|
+
.trim()
|
|
48
|
+
.split('\n')
|
|
49
|
+
.filter((line) => line.trim() !== '');
|
|
50
|
+
const contributorEntries = contributorLines.map((line) => {
|
|
51
|
+
const match = line.trim().match(/^(\d+)\t(.+)$/);
|
|
52
|
+
return match ? { count: parseInt(match[1] ?? '0', 10), name: match[2] ?? 'unknown' } : null;
|
|
53
|
+
}).filter((e) => e !== null);
|
|
54
|
+
const contributorsCount = contributorEntries.length;
|
|
55
|
+
const topContributors = {};
|
|
56
|
+
for (const entry of contributorEntries.slice(0, 10)) {
|
|
57
|
+
topContributors[entry.name] = entry.count;
|
|
58
|
+
}
|
|
59
|
+
// Branches
|
|
60
|
+
const branchOutput = execGit('git branch --list');
|
|
61
|
+
const branchCount = branchOutput
|
|
62
|
+
.trim()
|
|
63
|
+
.split('\n')
|
|
64
|
+
.filter((line) => line.trim() !== '').length;
|
|
65
|
+
// Commits per day (30 days)
|
|
66
|
+
const dateOutput = execGit('git log --since="30 days ago" --format="%ad" --date=short');
|
|
67
|
+
const dates = dateOutput
|
|
68
|
+
.trim()
|
|
69
|
+
.split('\n')
|
|
70
|
+
.filter((line) => line.trim() !== '');
|
|
71
|
+
const frequency = {};
|
|
72
|
+
for (const date of dates) {
|
|
73
|
+
const d = date.trim();
|
|
74
|
+
frequency[d] = (frequency[d] ?? 0) + 1;
|
|
75
|
+
}
|
|
76
|
+
// Files changed in 30 days
|
|
77
|
+
const filesOutput = execGit('git log --since="30 days ago" --name-only --format=""');
|
|
78
|
+
const allFiles = filesOutput
|
|
79
|
+
.trim()
|
|
80
|
+
.split('\n')
|
|
81
|
+
.filter((line) => line.trim() !== '')
|
|
82
|
+
.map((line) => line.trim());
|
|
83
|
+
const fileCounts = new Map();
|
|
84
|
+
for (const file of allFiles) {
|
|
85
|
+
fileCounts.set(file, (fileCounts.get(file) ?? 0) + 1);
|
|
86
|
+
}
|
|
87
|
+
const uniqueFilesChanged = fileCounts.size;
|
|
88
|
+
// Top 10 most changed files
|
|
89
|
+
const sortedFiles = [...fileCounts.entries()]
|
|
90
|
+
.sort((a, b) => b[1] - a[1])
|
|
91
|
+
.slice(0, 10);
|
|
92
|
+
const topFiles = {};
|
|
93
|
+
for (const [file, count] of sortedFiles) {
|
|
94
|
+
topFiles[file] = count;
|
|
95
|
+
}
|
|
96
|
+
// Recent commits
|
|
97
|
+
const recentOutput = execGit('git log -20 --format="%h %s (%an, %ar)"');
|
|
98
|
+
const recentCommits = recentOutput
|
|
99
|
+
.trim()
|
|
100
|
+
.split('\n')
|
|
101
|
+
.filter((line) => line.trim() !== '')
|
|
102
|
+
.map((line) => ({ text: line.trim(), type: 'info' }));
|
|
103
|
+
return {
|
|
104
|
+
commits,
|
|
105
|
+
contributors: contributorsCount,
|
|
106
|
+
branches: branchCount,
|
|
107
|
+
filesChanged: uniqueFilesChanged,
|
|
108
|
+
frequency,
|
|
109
|
+
topContributors,
|
|
110
|
+
topFiles,
|
|
111
|
+
recentCommits,
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
return { layout, data };
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/quick/presets/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/ps.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AA4F9C,wBAAgB,QAAQ,IAAI,YAAY,CA0FvC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
function execCommand(cmd) {
|
|
4
|
+
try {
|
|
5
|
+
return execSync(cmd, { encoding: 'utf-8', timeout: 5000 });
|
|
6
|
+
}
|
|
7
|
+
catch (err) {
|
|
8
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
9
|
+
if (msg.includes('ENOENT') || msg.includes('not found') || msg.includes('command not found')) {
|
|
10
|
+
throw new Error('[tuimon] ps command not found. This preset requires a Unix-like system (Linux/macOS). Windows is not supported.');
|
|
11
|
+
}
|
|
12
|
+
throw err;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function readFile(path) {
|
|
16
|
+
try {
|
|
17
|
+
return readFileSync(path, 'utf-8');
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function parseLoadAvg() {
|
|
24
|
+
const content = readFile('/proc/loadavg');
|
|
25
|
+
if (content === undefined)
|
|
26
|
+
return undefined;
|
|
27
|
+
const parts = content.trim().split(/\s+/);
|
|
28
|
+
const one = parts[0];
|
|
29
|
+
const five = parts[1];
|
|
30
|
+
const fifteen = parts[2];
|
|
31
|
+
if (one === undefined || five === undefined || fifteen === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
return `${one} / ${five} / ${fifteen}`;
|
|
34
|
+
}
|
|
35
|
+
function parseMemPercent() {
|
|
36
|
+
const content = readFile('/proc/meminfo');
|
|
37
|
+
if (content === undefined)
|
|
38
|
+
return undefined;
|
|
39
|
+
const totalMatch = content.match(/MemTotal:\s+(\d+)/);
|
|
40
|
+
const availMatch = content.match(/MemAvailable:\s+(\d+)/);
|
|
41
|
+
if (totalMatch === null || availMatch === null)
|
|
42
|
+
return undefined;
|
|
43
|
+
const total = parseInt(totalMatch[1] ?? '0', 10);
|
|
44
|
+
const avail = parseInt(availMatch[1] ?? '0', 10);
|
|
45
|
+
if (total === 0)
|
|
46
|
+
return undefined;
|
|
47
|
+
return Math.round(((total - avail) / total) * 10000) / 100;
|
|
48
|
+
}
|
|
49
|
+
function parsePsOutput(output) {
|
|
50
|
+
const lines = output.trim().split('\n');
|
|
51
|
+
// Skip header line
|
|
52
|
+
const entries = [];
|
|
53
|
+
for (let i = 1; i < lines.length; i++) {
|
|
54
|
+
const line = lines[i];
|
|
55
|
+
if (line === undefined || line.trim() === '')
|
|
56
|
+
continue;
|
|
57
|
+
const parts = line.trim().split(/\s+/);
|
|
58
|
+
const user = parts[0];
|
|
59
|
+
const pid = parts[1];
|
|
60
|
+
const cpuStr = parts[2];
|
|
61
|
+
const memStr = parts[3];
|
|
62
|
+
if (user === undefined || pid === undefined || cpuStr === undefined || memStr === undefined)
|
|
63
|
+
continue;
|
|
64
|
+
// Command is everything from column index 10 onward
|
|
65
|
+
const command = parts.slice(10).join(' ') || parts.slice(4).join(' ');
|
|
66
|
+
entries.push({
|
|
67
|
+
user,
|
|
68
|
+
pid,
|
|
69
|
+
cpu: parseFloat(cpuStr) || 0,
|
|
70
|
+
mem: parseFloat(memStr) || 0,
|
|
71
|
+
command,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
return entries;
|
|
75
|
+
}
|
|
76
|
+
function getLoadAvgFallback() {
|
|
77
|
+
try {
|
|
78
|
+
const output = execCommand('uptime');
|
|
79
|
+
const match = output.match(/load averages?:\s*([\d.]+)[,\s]+([\d.]+)[,\s]+([\d.]+)/);
|
|
80
|
+
if (match !== null) {
|
|
81
|
+
return `${match[1] ?? '?'} / ${match[2] ?? '?'} / ${match[3] ?? '?'}`;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
// ignore
|
|
86
|
+
}
|
|
87
|
+
return '? / ? / ?';
|
|
88
|
+
}
|
|
89
|
+
export function psPreset() {
|
|
90
|
+
// Verify ps is available
|
|
91
|
+
if (process.platform === 'win32') {
|
|
92
|
+
throw new Error('[tuimon] ps preset requires a Unix-like system (Linux/macOS). Windows is not supported. Consider using PowerShell\'s Get-Process instead.');
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
execSync('ps --version 2>&1 || ps aux > /dev/null 2>&1', { encoding: 'utf-8', stdio: 'pipe', timeout: 5000 });
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
throw new Error('[tuimon] ps command not available on this system.');
|
|
99
|
+
}
|
|
100
|
+
const layout = {
|
|
101
|
+
title: 'Processes',
|
|
102
|
+
stats: [
|
|
103
|
+
{ id: 'total', label: 'Total Processes', type: 'stat' },
|
|
104
|
+
{ id: 'cpuUsage', label: 'CPU Usage', type: 'gauge' },
|
|
105
|
+
{ id: 'memUsage', label: 'Memory Usage', type: 'gauge' },
|
|
106
|
+
{ id: 'loadAvg', label: 'Load Average', type: 'stat' },
|
|
107
|
+
],
|
|
108
|
+
panels: [
|
|
109
|
+
{ id: 'topCpu', label: 'Top CPU Processes', type: 'bar', span: 2 },
|
|
110
|
+
{ id: 'topMem', label: 'Top Memory Processes', type: 'bar' },
|
|
111
|
+
{ id: 'cpuHistory', label: 'CPU History', type: 'line' },
|
|
112
|
+
{ id: 'processList', label: 'Process List', type: 'event-log', span: 2, throttle: 2000 },
|
|
113
|
+
],
|
|
114
|
+
};
|
|
115
|
+
const data = () => {
|
|
116
|
+
const psOutput = execCommand('ps aux --sort=-%cpu | head -11');
|
|
117
|
+
const processes = parsePsOutput(psOutput);
|
|
118
|
+
const top10 = processes.slice(0, 10);
|
|
119
|
+
// Total process count
|
|
120
|
+
const countOutput = execCommand('ps aux');
|
|
121
|
+
const totalLines = countOutput.trim().split('\n');
|
|
122
|
+
const total = Math.max(0, totalLines.length - 1); // subtract header
|
|
123
|
+
// CPU usage: sum of top processes, capped at 100
|
|
124
|
+
const cpuSum = top10.reduce((sum, p) => sum + p.cpu, 0);
|
|
125
|
+
const cpuUsage = Math.min(100, Math.round(cpuSum * 100) / 100);
|
|
126
|
+
// Memory usage: try /proc/meminfo first, fallback to process sum
|
|
127
|
+
const procMem = parseMemPercent();
|
|
128
|
+
const memUsage = procMem !== undefined
|
|
129
|
+
? procMem
|
|
130
|
+
: Math.min(100, Math.round(top10.reduce((sum, p) => sum + p.mem, 0) * 100) / 100);
|
|
131
|
+
// Load average: try /proc/loadavg first, fallback to uptime
|
|
132
|
+
const loadAvg = parseLoadAvg() ?? getLoadAvgFallback();
|
|
133
|
+
// Top CPU bar chart
|
|
134
|
+
const topCpu = {};
|
|
135
|
+
for (const p of top10) {
|
|
136
|
+
const name = p.command.split('/').pop()?.split(' ')[0] ?? p.command;
|
|
137
|
+
const key = name || `pid:${p.pid}`;
|
|
138
|
+
topCpu[key] = (topCpu[key] ?? 0) + p.cpu;
|
|
139
|
+
}
|
|
140
|
+
// Top Memory bar chart — re-sort by memory
|
|
141
|
+
const byMem = [...processes].sort((a, b) => b.mem - a.mem).slice(0, 10);
|
|
142
|
+
const topMem = {};
|
|
143
|
+
for (const p of byMem) {
|
|
144
|
+
const name = p.command.split('/').pop()?.split(' ')[0] ?? p.command;
|
|
145
|
+
const key = name || `pid:${p.pid}`;
|
|
146
|
+
topMem[key] = (topMem[key] ?? 0) + p.mem;
|
|
147
|
+
}
|
|
148
|
+
// CPU history — single data point per refresh, line chart accumulates
|
|
149
|
+
const cpuHistory = { CPU: cpuUsage };
|
|
150
|
+
// Process list — event-log entries
|
|
151
|
+
const processList = top10.map((p) => {
|
|
152
|
+
const name = p.command.split('/').pop()?.split(' ')[0] ?? p.command;
|
|
153
|
+
return `${name} ${p.cpu}% CPU ${p.mem}% MEM ${p.command}`;
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
total,
|
|
157
|
+
cpuUsage,
|
|
158
|
+
memUsage,
|
|
159
|
+
loadAvg,
|
|
160
|
+
topCpu,
|
|
161
|
+
topMem,
|
|
162
|
+
cpuHistory,
|
|
163
|
+
processList,
|
|
164
|
+
};
|
|
165
|
+
};
|
|
166
|
+
return { layout, data, refresh: 1000 };
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=ps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ps.js","sourceRoot":"","sources":["../../../src/quick/presets/ps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG9C,wBAAsB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBnE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import tuimon from '../../index.js';
|
|
2
|
+
export async function runPreset(preset) {
|
|
3
|
+
const dash = await tuimon.start({
|
|
4
|
+
pages: {
|
|
5
|
+
main: {
|
|
6
|
+
html: '',
|
|
7
|
+
default: true,
|
|
8
|
+
layout: preset.layout,
|
|
9
|
+
keys: {
|
|
10
|
+
F5: { label: 'Refresh', action: async () => { await dash.render(await Promise.resolve(preset.data())); } },
|
|
11
|
+
F10: { label: 'Quit', action: () => process.exit(0) },
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
refresh: preset.refresh,
|
|
16
|
+
data: preset.data,
|
|
17
|
+
renderDelay: 0,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/quick/presets/runner.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,gBAAgB,CAAA;AAEnC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAoB;IAClD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;QAC9B,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE;oBACzG,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;iBACtD;aACF;SACF;QACD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,CAAC;KACf,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/quick/presets/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,YAAY,CAAA;IACpB,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACtE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/quick/presets/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
export type InputType = 'json' | 'csv' | 'log' | 'module' | 'url' | 'stdin';
|
|
2
|
+
export interface TableData {
|
|
3
|
+
type: 'table';
|
|
4
|
+
columns: string[];
|
|
5
|
+
rows: Record<string, unknown>[];
|
|
6
|
+
meta: {
|
|
7
|
+
totalRows: number;
|
|
8
|
+
numericColumns: string[];
|
|
9
|
+
booleanColumns: string[];
|
|
10
|
+
categoricalColumns: string[];
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface LogData {
|
|
14
|
+
type: 'log';
|
|
15
|
+
format: 'nginx' | 'json' | 'modsec' | 'plain';
|
|
16
|
+
entries: LogEntry[];
|
|
17
|
+
stats: {
|
|
18
|
+
totalLines: number;
|
|
19
|
+
timeRange?: {
|
|
20
|
+
start: string;
|
|
21
|
+
end: string;
|
|
22
|
+
} | undefined;
|
|
23
|
+
statusCodes?: Record<string, number> | undefined;
|
|
24
|
+
methods?: Record<string, number> | undefined;
|
|
25
|
+
topEndpoints?: Record<string, number> | undefined;
|
|
26
|
+
topIPs?: Record<string, number> | undefined;
|
|
27
|
+
errorCount?: number | undefined;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export interface LogEntry {
|
|
31
|
+
raw: string;
|
|
32
|
+
timestamp?: string | undefined;
|
|
33
|
+
ip?: string | undefined;
|
|
34
|
+
method?: string | undefined;
|
|
35
|
+
path?: string | undefined;
|
|
36
|
+
status?: number | undefined;
|
|
37
|
+
bytes?: number | undefined;
|
|
38
|
+
referer?: string | undefined;
|
|
39
|
+
userAgent?: string | undefined;
|
|
40
|
+
level?: string | undefined;
|
|
41
|
+
message?: string | undefined;
|
|
42
|
+
}
|
|
43
|
+
export interface ModSecData {
|
|
44
|
+
type: 'modsec';
|
|
45
|
+
events: ModSecEvent[];
|
|
46
|
+
stats: {
|
|
47
|
+
totalEvents: number;
|
|
48
|
+
blockedRequests: number;
|
|
49
|
+
uniqueIPs: number;
|
|
50
|
+
severityCounts: Record<string, number>;
|
|
51
|
+
topRules: Record<string, number>;
|
|
52
|
+
topIPs: Record<string, number>;
|
|
53
|
+
attackCategories: Record<string, number>;
|
|
54
|
+
timeRange?: {
|
|
55
|
+
start: string;
|
|
56
|
+
end: string;
|
|
57
|
+
} | undefined;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface ModSecEvent {
|
|
61
|
+
uniqueId: string;
|
|
62
|
+
timestamp: string;
|
|
63
|
+
clientIp: string;
|
|
64
|
+
clientPort?: number | undefined;
|
|
65
|
+
serverIp?: string | undefined;
|
|
66
|
+
serverPort?: number | undefined;
|
|
67
|
+
method: string;
|
|
68
|
+
uri: string;
|
|
69
|
+
protocol?: string | undefined;
|
|
70
|
+
httpCode: number;
|
|
71
|
+
messages: ModSecMessage[];
|
|
72
|
+
action?: string | undefined;
|
|
73
|
+
phase?: number | undefined;
|
|
74
|
+
raw: string;
|
|
75
|
+
}
|
|
76
|
+
export interface ModSecMessage {
|
|
77
|
+
id: string;
|
|
78
|
+
msg: string;
|
|
79
|
+
severity: string;
|
|
80
|
+
tags?: string[] | undefined;
|
|
81
|
+
data?: string | undefined;
|
|
82
|
+
}
|
|
83
|
+
export interface LiveData {
|
|
84
|
+
type: 'live';
|
|
85
|
+
getData: () => Record<string, unknown> | Promise<Record<string, unknown>>;
|
|
86
|
+
refresh?: number;
|
|
87
|
+
title?: string;
|
|
88
|
+
}
|
|
89
|
+
export type ParsedData = TableData | LogData | ModSecData | LiveData;
|
|
90
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/quick/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/quick/types.ts"],"names":[],"mappings":"AAAA,gFAAgF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch-mode.d.ts","sourceRoot":"","sources":["../../src/quick/watch-mode.ts"],"names":[],"mappings":"AAYA,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgDtE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCvF"}
|