@profullstack/hqtui-demo 0.1.1 → 0.1.3

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.
Files changed (44) hide show
  1. package/README.md +51 -8
  2. package/dist/main.js +34 -11
  3. package/dist/main.js.map +1 -1
  4. package/dist/screens/index.js +4 -0
  5. package/dist/screens/index.js.map +1 -1
  6. package/dist/screens/network.js +86 -0
  7. package/dist/screens/network.js.map +1 -0
  8. package/dist/screens/services.js +121 -0
  9. package/dist/screens/services.js.map +1 -0
  10. package/dist/screens/sessions.js +80 -0
  11. package/dist/screens/sessions.js.map +1 -0
  12. package/dist/screens/traffic.js +183 -0
  13. package/dist/screens/traffic.js.map +1 -0
  14. package/dist/simulation.js +6 -0
  15. package/dist/simulation.js.map +1 -1
  16. package/dist/state.js +4 -1
  17. package/dist/state.js.map +1 -1
  18. package/dist/system/common.js +2 -0
  19. package/dist/system/common.js.map +1 -1
  20. package/dist/system/linux-telemetry.js +420 -0
  21. package/dist/system/linux-telemetry.js.map +1 -0
  22. package/dist/system/linux-traffic.js +282 -0
  23. package/dist/system/linux-traffic.js.map +1 -0
  24. package/dist/system/linux.js +90 -26
  25. package/dist/system/linux.js.map +1 -1
  26. package/dist/system/simulated-telemetry.js +267 -0
  27. package/dist/system/simulated-telemetry.js.map +1 -0
  28. package/dist/system/telemetry.js +44 -0
  29. package/dist/system/telemetry.js.map +1 -0
  30. package/package.json +4 -3
  31. package/src/main.ts +26 -11
  32. package/src/screens/index.ts +4 -0
  33. package/src/screens/network.ts +91 -0
  34. package/src/screens/services.ts +136 -0
  35. package/src/screens/sessions.ts +85 -0
  36. package/src/screens/traffic.ts +199 -0
  37. package/src/simulation.ts +12 -0
  38. package/src/state.ts +7 -2
  39. package/src/system/common.ts +2 -0
  40. package/src/system/linux-telemetry.ts +431 -0
  41. package/src/system/linux-traffic.ts +375 -0
  42. package/src/system/linux.ts +95 -21
  43. package/src/system/simulated-telemetry.ts +280 -0
  44. package/src/system/telemetry.ts +263 -0
@@ -0,0 +1,282 @@
1
+ import { readFile, stat } from "node:fs/promises";
2
+ import { open } from "node:fs/promises";
3
+ import { sh } from "./common.js";
4
+ /**
5
+ * Protocol-level visibility without root: socket classification, kernel
6
+ * TCP/UDP counters, sshd auth events from the journal, and HTTP access logs.
7
+ * Packet inspection would need privileges; none of this does.
8
+ */
9
+ async function read(path) {
10
+ try {
11
+ return await readFile(path, "utf8");
12
+ }
13
+ catch {
14
+ return "";
15
+ }
16
+ }
17
+ const PORT_PROTOCOLS = {
18
+ "20": "FTP", "21": "FTP", "22": "SSH", "23": "Telnet", "25": "SMTP",
19
+ "53": "DNS", "67": "DHCP", "68": "DHCP", "80": "HTTP", "110": "POP3",
20
+ "111": "RPC", "123": "NTP", "143": "IMAP", "161": "SNMP", "389": "LDAP",
21
+ "443": "HTTPS", "445": "SMB", "465": "SMTPS", "514": "Syslog", "587": "SMTP",
22
+ "631": "IPP", "636": "LDAPS", "993": "IMAPS", "995": "POP3S",
23
+ "1194": "OpenVPN", "1433": "MSSQL", "1521": "Oracle", "2049": "NFS",
24
+ "2379": "etcd", "3000": "HTTP-dev", "3306": "MySQL", "3389": "RDP",
25
+ "4000": "HTTP-dev", "5000": "HTTP-dev", "5432": "Postgres", "5672": "AMQP",
26
+ "5900": "VNC", "6379": "Redis", "8000": "HTTP-alt", "8080": "HTTP-alt",
27
+ "8443": "HTTPS-alt", "9000": "HTTP-alt", "9090": "Prometheus",
28
+ "9200": "Elasticsearch", "11211": "Memcached", "27017": "MongoDB",
29
+ "41641": "Tailscale", "51820": "WireGuard",
30
+ };
31
+ function portOf(address) {
32
+ const index = address.lastIndexOf(":");
33
+ return index === -1 ? "" : address.slice(index + 1);
34
+ }
35
+ function hostOf(address) {
36
+ const index = address.lastIndexOf(":");
37
+ return index === -1 ? address : address.slice(0, index);
38
+ }
39
+ export function classify(port) {
40
+ return PORT_PROTOCOLS[port] ?? (Number(port) >= 32768 ? "ephemeral" : `port ${port}`);
41
+ }
42
+ /**
43
+ * Split live sockets by protocol. A connection whose *local* port is a known
44
+ * service is inbound; otherwise the remote port names the service we called.
45
+ */
46
+ export function breakdown(connections, listeners) {
47
+ const listening = new Set(listeners.map((l) => l.port));
48
+ const buckets = new Map();
49
+ const remotes = new Map();
50
+ let inbound = 0;
51
+ let outbound = 0;
52
+ for (const connection of connections) {
53
+ const localPort = portOf(connection.local);
54
+ const remotePort = portOf(connection.remote);
55
+ const isInbound = listening.has(localPort);
56
+ const protocol = classify(isInbound ? localPort : remotePort);
57
+ const bucket = buckets.get(protocol) ?? { protocol, inbound: 0, outbound: 0, total: 0 };
58
+ if (isInbound) {
59
+ bucket.inbound++;
60
+ inbound++;
61
+ }
62
+ else {
63
+ bucket.outbound++;
64
+ outbound++;
65
+ }
66
+ bucket.total++;
67
+ buckets.set(protocol, bucket);
68
+ const host = hostOf(connection.remote);
69
+ if (host && host !== "*" && host !== "0.0.0.0") {
70
+ const entry = remotes.get(host) ?? { count: 0, protocols: new Set() };
71
+ entry.count++;
72
+ entry.protocols.add(protocol);
73
+ remotes.set(host, entry);
74
+ }
75
+ }
76
+ return {
77
+ protocols: [...buckets.values()].sort((a, b) => b.total - a.total),
78
+ remotes: [...remotes.entries()]
79
+ .map(([host, entry]) => ({
80
+ host,
81
+ connections: entry.count,
82
+ protocols: [...entry.protocols].slice(0, 3).join(", "),
83
+ }))
84
+ .sort((a, b) => b.connections - a.connections)
85
+ .slice(0, 12),
86
+ inbound,
87
+ outbound,
88
+ };
89
+ }
90
+ function parseSnmp(text) {
91
+ const out = {};
92
+ const lines = text.trim().split("\n");
93
+ for (let i = 0; i < lines.length - 1; i += 2) {
94
+ const [headerName, ...headers] = lines[i].split(/\s+/);
95
+ const [valueName, ...values] = lines[i + 1].split(/\s+/);
96
+ if (headerName !== valueName)
97
+ continue;
98
+ const section = headerName.replace(":", "");
99
+ out[section] = {};
100
+ headers.forEach((key, index) => {
101
+ out[section][key] = Number(values[index] ?? 0);
102
+ });
103
+ }
104
+ return out;
105
+ }
106
+ let previousCounters = null;
107
+ /** TCP/UDP/ICMP counters from /proc/net/snmp, with rates. */
108
+ export async function counters() {
109
+ const snmp = parseSnmp(await read("/proc/net/snmp"));
110
+ const tcp = snmp.Tcp ?? {};
111
+ const udp = snmp.Udp ?? {};
112
+ const icmp = snmp.Icmp ?? {};
113
+ const values = {
114
+ tcpActiveOpens: tcp.ActiveOpens ?? 0,
115
+ tcpPassiveOpens: tcp.PassiveOpens ?? 0,
116
+ tcpEstablished: tcp.CurrEstab ?? 0,
117
+ tcpInSegs: tcp.InSegs ?? 0,
118
+ tcpOutSegs: tcp.OutSegs ?? 0,
119
+ tcpRetransSegs: tcp.RetransSegs ?? 0,
120
+ tcpInErrs: tcp.InErrs ?? 0,
121
+ tcpOutRsts: tcp.OutRsts ?? 0,
122
+ udpInDatagrams: udp.InDatagrams ?? 0,
123
+ udpOutDatagrams: udp.OutDatagrams ?? 0,
124
+ udpInErrors: udp.InErrors ?? 0,
125
+ icmpInMsgs: icmp.InMsgs ?? 0,
126
+ icmpOutMsgs: icmp.OutMsgs ?? 0,
127
+ rates: { inSegs: 0, outSegs: 0, retrans: 0, passiveOpens: 0, activeOpens: 0, udpIn: 0, udpOut: 0 },
128
+ retransRatio: 0,
129
+ };
130
+ const now = Date.now();
131
+ if (previousCounters) {
132
+ const dt = Math.max(0.001, (now - previousCounters.at) / 1000);
133
+ const previous = previousCounters.values;
134
+ const delta = (a, b) => Math.max(0, (a - b) / dt);
135
+ values.rates = {
136
+ inSegs: delta(values.tcpInSegs, previous.tcpInSegs),
137
+ outSegs: delta(values.tcpOutSegs, previous.tcpOutSegs),
138
+ retrans: delta(values.tcpRetransSegs, previous.tcpRetransSegs),
139
+ passiveOpens: delta(values.tcpPassiveOpens, previous.tcpPassiveOpens),
140
+ activeOpens: delta(values.tcpActiveOpens, previous.tcpActiveOpens),
141
+ udpIn: delta(values.udpInDatagrams, previous.udpInDatagrams),
142
+ udpOut: delta(values.udpOutDatagrams, previous.udpOutDatagrams),
143
+ };
144
+ }
145
+ previousCounters = { values, at: now };
146
+ values.retransRatio = values.tcpOutSegs > 0 ? values.tcpRetransSegs / values.tcpOutSegs : 0;
147
+ return values;
148
+ }
149
+ /** sshd authentication events, straight out of the journal. */
150
+ export async function sshEvents(limit = 40) {
151
+ const text = await sh("journalctl", [
152
+ "-u", "ssh", "-u", "sshd", "-n", String(limit * 2), "--no-pager", "--output=short-iso",
153
+ ], 5000);
154
+ const source = text || (await read("/var/log/auth.log"));
155
+ if (!source)
156
+ return [];
157
+ const events = [];
158
+ for (const line of source.trim().split("\n")) {
159
+ if (!/sshd/.test(line))
160
+ continue;
161
+ const time = (/T(\d{2}:\d{2}:\d{2})/.exec(line)?.[1]) ?? (/(\d{2}:\d{2}:\d{2})/.exec(line)?.[1]) ?? "";
162
+ let match = /Accepted (\S+) for (\S+) from (\S+)/.exec(line);
163
+ if (match) {
164
+ events.push({ time, action: "accepted", user: match[2], from: match[3], method: match[1] });
165
+ continue;
166
+ }
167
+ match = /Failed (\S+) for (?:invalid user )?(\S+) from (\S+)/.exec(line);
168
+ if (match) {
169
+ events.push({
170
+ time,
171
+ action: /invalid user/.test(line) ? "invalid" : "failed",
172
+ user: match[2],
173
+ from: match[3],
174
+ method: match[1],
175
+ });
176
+ continue;
177
+ }
178
+ match = /Disconnected from (?:authenticating )?user (\S+) (\S+)/.exec(line);
179
+ if (match) {
180
+ events.push({ time, action: "disconnect", user: match[1], from: match[2], method: "-" });
181
+ }
182
+ }
183
+ return events.slice(-limit);
184
+ }
185
+ const ACCESS_LOGS = [
186
+ "/var/log/nginx/access.log",
187
+ "/var/log/apache2/access.log",
188
+ "/var/log/httpd/access_log",
189
+ "/var/log/caddy/access.log",
190
+ ];
191
+ const COMBINED = /^(\S+) \S+ \S+ \[([^\]]+)\] "(\S+) (\S+)[^"]*" (\d{3}) (\d+|-)/;
192
+ let previousLog = null;
193
+ const requestHistory = [];
194
+ /** Parse the tail of an HTTP access log into live request statistics. */
195
+ export async function http(tailBytes = 256 * 1024) {
196
+ let path = "";
197
+ let size = 0;
198
+ for (const candidate of ACCESS_LOGS) {
199
+ try {
200
+ const info = await stat(candidate);
201
+ if (info.size > 0) {
202
+ path = candidate;
203
+ size = info.size;
204
+ break;
205
+ }
206
+ }
207
+ catch {
208
+ // Not present, or not readable by this user.
209
+ }
210
+ }
211
+ if (!path)
212
+ return null;
213
+ let text = "";
214
+ try {
215
+ const handle = await open(path, "r");
216
+ const start = Math.max(0, size - tailBytes);
217
+ const buffer = Buffer.alloc(Math.min(tailBytes, size));
218
+ await handle.read(buffer, 0, buffer.length, start);
219
+ await handle.close();
220
+ text = buffer.toString("utf8");
221
+ }
222
+ catch {
223
+ return null;
224
+ }
225
+ const lines = text.split("\n").slice(1).filter(Boolean);
226
+ const statusClasses = new Map();
227
+ const paths = new Map();
228
+ const clients = new Map();
229
+ const methods = new Map();
230
+ const recent = [];
231
+ let upgrades = 0;
232
+ for (const line of lines) {
233
+ const match = COMBINED.exec(line);
234
+ if (!match)
235
+ continue;
236
+ const [, client, stamp, method, requestPath, status, sizeField] = match;
237
+ const cls = `${status[0]}xx`;
238
+ statusClasses.set(cls, (statusClasses.get(cls) ?? 0) + 1);
239
+ // Query strings explode the cardinality; group by path.
240
+ const bare = requestPath.split("?")[0].slice(0, 60);
241
+ paths.set(bare, (paths.get(bare) ?? 0) + 1);
242
+ clients.set(client, (clients.get(client) ?? 0) + 1);
243
+ methods.set(method, (methods.get(method) ?? 0) + 1);
244
+ if (status === "101")
245
+ upgrades++;
246
+ recent.push({
247
+ time: (/:(\d{2}:\d{2}:\d{2})/.exec(stamp)?.[1]) ?? "",
248
+ method,
249
+ path: bare,
250
+ status,
251
+ client,
252
+ bytes: Number(sizeField) || 0,
253
+ });
254
+ }
255
+ // Requests per second from how much the file grew since the last read.
256
+ let requestsPerSecond = 0;
257
+ const now = Date.now();
258
+ if (previousLog && previousLog.path === path && size > previousLog.size) {
259
+ const grew = size - previousLog.size;
260
+ const averageLine = text.length / Math.max(1, lines.length);
261
+ const seconds = Math.max(0.001, (now - previousLog.at) / 1000);
262
+ requestsPerSecond = grew / Math.max(1, averageLine) / seconds;
263
+ }
264
+ previousLog = { path, size, at: now };
265
+ requestHistory.push(requestsPerSecond);
266
+ if (requestHistory.length > 240)
267
+ requestHistory.shift();
268
+ const top = (map, n) => [...map.entries()].sort((a, b) => b[1] - a[1]).slice(0, n);
269
+ return {
270
+ source: path,
271
+ requestsPerSecond,
272
+ total: lines.length,
273
+ statusClasses: top(statusClasses, 6).map(([cls, count]) => ({ class: cls, count })),
274
+ topPaths: top(paths, 10).map(([p, count]) => ({ path: p, count })),
275
+ topClients: top(clients, 8).map(([client, count]) => ({ client, count })),
276
+ methods: top(methods, 6).map(([method, count]) => ({ method, count })),
277
+ upgrades,
278
+ recent: recent.slice(-40).reverse(),
279
+ history: [...requestHistory],
280
+ };
281
+ }
282
+ //# sourceMappingURL=linux-traffic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-traffic.js","sourceRoot":"","sources":["../../src/system/linux-traffic.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { readFile, readdir } from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import { baseSample, loadAverage, primaryInterface, push, ratePerSecond, sh } from "./common.js";
4
+ import * as telemetry from "./linux-telemetry.js";
5
+ import * as traffic from "./linux-traffic.js";
4
6
  async function read(path) {
5
7
  try {
6
8
  return await readFile(path, "utf8");
@@ -43,6 +45,8 @@ export class LinuxCollector {
43
45
  prevNet = null;
44
46
  sectorSize = 512;
45
47
  mounts = [];
48
+ ticks = 0;
49
+ interfaceHistory = new Map();
46
50
  async refresh(dt) {
47
51
  const s = this.sample;
48
52
  const [stat, meminfo, uptime, diskstats, netdev] = await Promise.all([
@@ -162,6 +166,88 @@ export class LinuxCollector {
162
166
  const speed = await read(`/sys/class/net/${iface.name}/speed`);
163
167
  s.network.speed = speed.trim() && Number(speed) > 0 ? `${Number(speed) / 1000} Gb/s` : "-";
164
168
  await Promise.all([this.updateProcesses(), this.updateTemperatures()]);
169
+ await this.updateTelemetry(dt);
170
+ }
171
+ /**
172
+ * Cheap counters every tick; anything that shells out runs on a slower
173
+ * cadence so the dashboard never stalls waiting on `systemctl` or `last`.
174
+ */
175
+ async updateTelemetry(dt) {
176
+ const t = this.sample.telemetry;
177
+ this.ticks++;
178
+ // Every tick: pure /proc reads.
179
+ const [kernel, interfaces] = await Promise.all([
180
+ telemetry.kernel(dt),
181
+ telemetry.interfaces(dt, this.interfaceHistory),
182
+ ]);
183
+ t.kernel = kernel;
184
+ t.interfaces = interfaces;
185
+ // TCP/UDP/ICMP counters are a single /proc read, so every tick.
186
+ t.net = await traffic.counters();
187
+ push(t.netInHistory, t.net.rates.inSegs);
188
+ push(t.netOutHistory, t.net.rates.outSegs);
189
+ push(t.retransHistory, t.net.rates.retrans);
190
+ this.sample.system.contextSwitches = kernel.contextSwitches;
191
+ // Every other tick: one cheap command each.
192
+ if (this.ticks % 2 === 1) {
193
+ const [sockets, states] = await Promise.all([telemetry.sockets(), telemetry.processStates()]);
194
+ t.connections = sockets.connections;
195
+ t.listeners = sockets.listeners;
196
+ t.states = states;
197
+ push(t.connectionHistory, sockets.connections.length);
198
+ const split = traffic.breakdown(sockets.connections, sockets.listeners);
199
+ t.protocols = split.protocols;
200
+ t.remotes = split.remotes;
201
+ t.inboundConnections = split.inbound;
202
+ t.outboundConnections = split.outbound;
203
+ this.sample.system.processCount = states.total;
204
+ }
205
+ // Every 5 ticks: sessions, journal and filesystems.
206
+ if (this.ticks % 5 === 1) {
207
+ const [sessions, journal, filesystems] = await Promise.all([
208
+ telemetry.sessions(),
209
+ telemetry.journal(80),
210
+ telemetry.filesystems(),
211
+ ]);
212
+ t.sessions = sessions;
213
+ t.journal = journal;
214
+ t.filesystems = filesystems;
215
+ push(t.sessionHistory, sessions.length);
216
+ // The dashboard log panel reads sample.logs, so mirror the real journal in.
217
+ this.sample.logs = journal.map((entry) => ({
218
+ time: entry.time,
219
+ level: entry.level,
220
+ message: entry.message,
221
+ meta: entry.unit,
222
+ }));
223
+ }
224
+ // Every 15 ticks: the slow ones.
225
+ if (this.ticks % 15 === 1) {
226
+ const [services, containers, logins, failed, gpus, power] = await Promise.all([
227
+ telemetry.services(),
228
+ telemetry.containers(),
229
+ telemetry.logins(20),
230
+ telemetry.failedLogins(15),
231
+ telemetry.gpus(),
232
+ telemetry.power(),
233
+ ]);
234
+ t.services = services;
235
+ t.containers = containers;
236
+ t.logins = logins;
237
+ t.failedLogins = failed;
238
+ t.gpus = gpus;
239
+ t.power = power;
240
+ const [ssh, http] = await Promise.all([traffic.sshEvents(40), traffic.http()]);
241
+ t.ssh = ssh;
242
+ t.http = http;
243
+ if (!http && !this.unavailable.includes("http access logs")) {
244
+ this.unavailable.push("http access logs");
245
+ }
246
+ if (gpus.length === 0 && !this.unavailable.includes("gpu"))
247
+ this.unavailable.push("gpu");
248
+ if (!power && !this.unavailable.includes("battery"))
249
+ this.unavailable.push("battery");
250
+ }
165
251
  }
166
252
  async loadMounts() {
167
253
  const text = await read("/proc/mounts");
@@ -221,35 +307,13 @@ export class LinuxCollector {
221
307
  this.sample.system.processCount = this.sample.processes.length;
222
308
  }
223
309
  async updateTemperatures() {
224
- const out = [];
225
- try {
226
- const zones = await readdir("/sys/class/hwmon");
227
- for (const zone of zones) {
228
- const base = `/sys/class/hwmon/${zone}`;
229
- const chip = (await read(`${base}/name`)).trim();
230
- const entries = await readdir(base).catch(() => []);
231
- for (const entry of entries) {
232
- if (!/^temp\d+_input$/.test(entry))
233
- continue;
234
- const raw = await read(`${base}/${entry}`);
235
- const value = Number(raw) / 1000;
236
- if (!Number.isFinite(value) || value <= 0 || value > 150)
237
- continue;
238
- const label = (await read(`${base}/${entry.replace("_input", "_label")}`)).trim();
239
- out.push({ label: label || `${chip} ${entry.replace("_input", "")}`, value, max: 100 });
240
- if (out.length >= 10)
241
- break;
242
- }
243
- if (out.length >= 10)
244
- break;
245
- }
246
- }
247
- catch {
248
- // hwmon is optional; containers and VMs frequently have none.
249
- }
310
+ const out = await telemetry.temperatures();
250
311
  if (out.length === 0 && !this.unavailable.includes("temperatures")) {
251
312
  this.unavailable.push("temperatures");
252
313
  }
314
+ else if (out.length > 0) {
315
+ this.unavailable = this.unavailable.filter((u) => u !== "temperatures");
316
+ }
253
317
  this.sample.temperatures = out;
254
318
  this.sample.sensors = out.slice(0, 6).map((t) => ({ label: t.label, value: `${t.value.toFixed(1)} °C` }));
255
319
  }
@@ -1 +1 @@
1
- {"version":3,"file":"linux.js","sourceRoot":"","sources":["../../src/system/linux.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linux.js","sourceRoot":"","sources":["../../src/system/linux.ts"],"names":[],"mappings":"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"}