@appkit/llamacpp-cli 1.5.0 → 1.7.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/CHANGELOG.md +20 -0
- package/MONITORING-ACCURACY-FIX.md +199 -0
- package/PER-PROCESS-METRICS.md +190 -0
- package/README.md +124 -9
- package/dist/cli.js +32 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +15 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +12 -4
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/delete.js +12 -10
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/logs-all.d.ts +9 -0
- package/dist/commands/logs-all.d.ts.map +1 -0
- package/dist/commands/logs-all.js +209 -0
- package/dist/commands/logs-all.js.map +1 -0
- package/dist/commands/logs.d.ts +4 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +108 -2
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/monitor.d.ts.map +1 -1
- package/dist/commands/monitor.js +51 -1
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/ps.d.ts +3 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +75 -5
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/rm.d.ts.map +1 -1
- package/dist/commands/rm.js +5 -12
- package/dist/commands/rm.js.map +1 -1
- package/dist/commands/server-show.d.ts.map +1 -1
- package/dist/commands/server-show.js +30 -3
- package/dist/commands/server-show.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +34 -7
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.js +3 -3
- package/dist/commands/stop.js.map +1 -1
- package/dist/lib/history-manager.d.ts +46 -0
- package/dist/lib/history-manager.d.ts.map +1 -0
- package/dist/lib/history-manager.js +157 -0
- package/dist/lib/history-manager.js.map +1 -0
- package/dist/lib/metrics-aggregator.d.ts +2 -1
- package/dist/lib/metrics-aggregator.d.ts.map +1 -1
- package/dist/lib/metrics-aggregator.js +15 -4
- package/dist/lib/metrics-aggregator.js.map +1 -1
- package/dist/lib/system-collector.d.ts +9 -4
- package/dist/lib/system-collector.d.ts.map +1 -1
- package/dist/lib/system-collector.js +29 -28
- package/dist/lib/system-collector.js.map +1 -1
- package/dist/tui/HistoricalMonitorApp.d.ts +5 -0
- package/dist/tui/HistoricalMonitorApp.d.ts.map +1 -0
- package/dist/tui/HistoricalMonitorApp.js +490 -0
- package/dist/tui/HistoricalMonitorApp.js.map +1 -0
- package/dist/tui/MonitorApp.d.ts.map +1 -1
- package/dist/tui/MonitorApp.js +84 -62
- package/dist/tui/MonitorApp.js.map +1 -1
- package/dist/tui/MultiServerMonitorApp.d.ts +1 -1
- package/dist/tui/MultiServerMonitorApp.d.ts.map +1 -1
- package/dist/tui/MultiServerMonitorApp.js +293 -77
- package/dist/tui/MultiServerMonitorApp.js.map +1 -1
- package/dist/types/history-types.d.ts +30 -0
- package/dist/types/history-types.d.ts.map +1 -0
- package/dist/types/history-types.js +11 -0
- package/dist/types/history-types.js.map +1 -0
- package/dist/types/monitor-types.d.ts +1 -0
- package/dist/types/monitor-types.d.ts.map +1 -1
- package/dist/types/server-config.d.ts +1 -0
- package/dist/types/server-config.d.ts.map +1 -1
- package/dist/types/server-config.js.map +1 -1
- package/dist/utils/downsample-utils.d.ts +35 -0
- package/dist/utils/downsample-utils.d.ts.map +1 -0
- package/dist/utils/downsample-utils.js +107 -0
- package/dist/utils/downsample-utils.js.map +1 -0
- package/dist/utils/file-utils.d.ts +6 -0
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +38 -0
- package/dist/utils/file-utils.js.map +1 -1
- package/dist/utils/log-utils.d.ts +43 -0
- package/dist/utils/log-utils.d.ts.map +1 -0
- package/dist/utils/log-utils.js +190 -0
- package/dist/utils/log-utils.js.map +1 -0
- package/dist/utils/process-utils.d.ts +19 -1
- package/dist/utils/process-utils.d.ts.map +1 -1
- package/dist/utils/process-utils.js +79 -1
- package/dist/utils/process-utils.js.map +1 -1
- package/docs/images/.gitkeep +1 -0
- package/package.json +3 -1
- package/src/cli.ts +32 -7
- package/src/commands/config.ts +15 -1
- package/src/commands/create.ts +14 -5
- package/src/commands/delete.ts +10 -10
- package/src/commands/logs-all.ts +251 -0
- package/src/commands/logs.ts +138 -2
- package/src/commands/monitor.ts +21 -1
- package/src/commands/ps.ts +88 -5
- package/src/commands/rm.ts +5 -12
- package/src/commands/server-show.ts +35 -3
- package/src/commands/start.ts +35 -7
- package/src/commands/stop.ts +3 -3
- package/src/lib/history-manager.ts +172 -0
- package/src/lib/metrics-aggregator.ts +18 -5
- package/src/lib/system-collector.ts +31 -28
- package/src/tui/HistoricalMonitorApp.ts +548 -0
- package/src/tui/MonitorApp.ts +89 -64
- package/src/tui/MultiServerMonitorApp.ts +348 -103
- package/src/types/history-types.ts +39 -0
- package/src/types/monitor-types.ts +1 -0
- package/src/types/server-config.ts +1 -0
- package/src/utils/downsample-utils.ts +128 -0
- package/src/utils/file-utils.ts +40 -0
- package/src/utils/log-utils.ts +178 -0
- package/src/utils/process-utils.ts +85 -1
- package/test-load.sh +100 -0
- package/dist/tui/components/ErrorState.d.ts +0 -8
- package/dist/tui/components/ErrorState.d.ts.map +0 -1
- package/dist/tui/components/ErrorState.js +0 -22
- package/dist/tui/components/ErrorState.js.map +0 -1
- package/dist/tui/components/LoadingState.d.ts +0 -8
- package/dist/tui/components/LoadingState.d.ts.map +0 -1
- package/dist/tui/components/LoadingState.js +0 -21
- package/dist/tui/components/LoadingState.js.map +0 -1
package/dist/commands/start.js
CHANGED
|
@@ -8,6 +8,8 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
8
8
|
const state_manager_1 = require("../lib/state-manager");
|
|
9
9
|
const launchctl_manager_1 = require("../lib/launchctl-manager");
|
|
10
10
|
const status_checker_1 = require("../lib/status-checker");
|
|
11
|
+
const file_utils_1 = require("../utils/file-utils");
|
|
12
|
+
const log_utils_1 = require("../utils/log-utils");
|
|
11
13
|
async function startCommand(identifier) {
|
|
12
14
|
// Initialize state manager
|
|
13
15
|
await state_manager_1.stateManager.initialize();
|
|
@@ -24,36 +26,61 @@ async function startCommand(identifier) {
|
|
|
24
26
|
return;
|
|
25
27
|
}
|
|
26
28
|
console.log(chalk_1.default.blue(`▶️ Starting ${server.modelName} (port ${server.port})...`));
|
|
27
|
-
// 3.
|
|
29
|
+
// 3. Auto-rotate logs if they exceed 100MB
|
|
30
|
+
try {
|
|
31
|
+
const result = await (0, log_utils_1.autoRotateIfNeeded)(server.stdoutPath, server.stderrPath, 100);
|
|
32
|
+
if (result.rotated) {
|
|
33
|
+
console.log(chalk_1.default.dim('Auto-rotated large log files:'));
|
|
34
|
+
for (const file of result.files) {
|
|
35
|
+
console.log(chalk_1.default.dim(` → ${file}`));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
// Non-fatal, just warn
|
|
41
|
+
console.log(chalk_1.default.yellow(`⚠️ Failed to rotate logs: ${error.message}`));
|
|
42
|
+
}
|
|
43
|
+
// 4. Ensure plist exists (recreate if missing)
|
|
28
44
|
try {
|
|
29
45
|
await launchctl_manager_1.launchctlManager.createPlist(server);
|
|
30
46
|
}
|
|
31
47
|
catch (error) {
|
|
32
48
|
// May already exist, that's okay
|
|
33
49
|
}
|
|
34
|
-
//
|
|
50
|
+
// 5. Load service if needed
|
|
35
51
|
try {
|
|
36
52
|
await launchctl_manager_1.launchctlManager.loadService(server.plistPath);
|
|
37
53
|
}
|
|
38
54
|
catch (error) {
|
|
39
55
|
// May already be loaded, that's okay
|
|
40
56
|
}
|
|
41
|
-
//
|
|
57
|
+
// 6. Start the service
|
|
42
58
|
try {
|
|
43
59
|
await launchctl_manager_1.launchctlManager.startService(server.label);
|
|
44
60
|
}
|
|
45
61
|
catch (error) {
|
|
46
62
|
throw new Error(`Failed to start service: ${error.message}`);
|
|
47
63
|
}
|
|
48
|
-
//
|
|
64
|
+
// 7. Wait for startup
|
|
49
65
|
console.log(chalk_1.default.dim('Waiting for server to start...'));
|
|
50
66
|
const started = await launchctl_manager_1.launchctlManager.waitForServiceStart(server.label, 5000);
|
|
51
67
|
if (!started) {
|
|
52
68
|
throw new Error(`Server failed to start. Check logs with: llamacpp server logs ${server.id}`);
|
|
53
69
|
}
|
|
54
|
-
//
|
|
55
|
-
await status_checker_1.statusChecker.updateServerStatus(server);
|
|
56
|
-
//
|
|
70
|
+
// 8. Update server status
|
|
71
|
+
let updatedServer = await status_checker_1.statusChecker.updateServerStatus(server);
|
|
72
|
+
// 9. Parse Metal (GPU) memory allocation if not already captured
|
|
73
|
+
if (!updatedServer.metalMemoryMB) {
|
|
74
|
+
console.log(chalk_1.default.dim('Detecting Metal (GPU) memory allocation...'));
|
|
75
|
+
await new Promise(resolve => setTimeout(resolve, 8000)); // 8 second delay
|
|
76
|
+
const metalMemoryMB = await (0, file_utils_1.parseMetalMemoryFromLog)(updatedServer.stderrPath);
|
|
77
|
+
if (metalMemoryMB) {
|
|
78
|
+
updatedServer = { ...updatedServer, metalMemoryMB };
|
|
79
|
+
await state_manager_1.stateManager.saveServerConfig(updatedServer);
|
|
80
|
+
console.log(chalk_1.default.dim(`Metal memory: ${metalMemoryMB.toFixed(0)} MB`));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// 10. Display success
|
|
57
84
|
console.log();
|
|
58
85
|
console.log(chalk_1.default.green('✅ Server started successfully!'));
|
|
59
86
|
console.log();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/stop.js
CHANGED
|
@@ -20,12 +20,12 @@ async function stopCommand(identifier) {
|
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
22
|
console.log(chalk_1.default.blue(`⏹️ Stopping ${server.modelName} (port ${server.port})...`));
|
|
23
|
-
//
|
|
23
|
+
// Unload the service (removes from launchd management - won't auto-restart)
|
|
24
24
|
try {
|
|
25
|
-
await launchctl_manager_1.launchctlManager.
|
|
25
|
+
await launchctl_manager_1.launchctlManager.unloadService(server.plistPath);
|
|
26
26
|
}
|
|
27
27
|
catch (error) {
|
|
28
|
-
throw new Error(`Failed to
|
|
28
|
+
throw new Error(`Failed to unload service: ${error.message}`);
|
|
29
29
|
}
|
|
30
30
|
// Wait for clean shutdown
|
|
31
31
|
const stopped = await launchctl_manager_1.launchctlManager.waitForServiceStop(server.label, 5000);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":";;;;;AAKA,kCAiCC;AAtCD,kDAA0B;AAC1B,wDAAoD;AACpD,gEAA4D;AAC5D,0DAAsD;AAE/C,KAAK,UAAU,WAAW,CAAC,UAAkB;IAClD,cAAc;IACd,MAAM,MAAM,GAAG,MAAM,4BAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,sBAAsB,CAAC,CAAC;IACzE,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,SAAS,UAAU,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;IAErF,
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":";;;;;AAKA,kCAiCC;AAtCD,kDAA0B;AAC1B,wDAAoD;AACpD,gEAA4D;AAC5D,0DAAsD;AAE/C,KAAK,UAAU,WAAW,CAAC,UAAkB;IAClD,cAAc;IACd,MAAM,MAAM,GAAG,MAAM,4BAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,sBAAsB,CAAC,CAAC;IACzE,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,cAAc,MAAM,CAAC,SAAS,qBAAqB,CAAC,CAAC,CAAC;QAC/E,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC,SAAS,UAAU,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;IAErF,4EAA4E;IAC5E,IAAI,CAAC;QACH,MAAM,oCAAgB,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA8B,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,0BAA0B;IAC1B,MAAM,OAAO,GAAG,MAAM,oCAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE9E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,uBAAuB;IACvB,MAAM,8BAAa,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE/C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { ServerMetrics, SystemMetrics } from '../types/monitor-types.js';
|
|
2
|
+
import { HistorySnapshot, TimeWindow } from '../types/history-types.js';
|
|
3
|
+
export declare class HistoryManager {
|
|
4
|
+
private serverId;
|
|
5
|
+
private historyDir;
|
|
6
|
+
private historyPath;
|
|
7
|
+
private readonly MAX_AGE_MS;
|
|
8
|
+
constructor(serverId: string);
|
|
9
|
+
/**
|
|
10
|
+
* Append a new snapshot to history (with auto-pruning)
|
|
11
|
+
*/
|
|
12
|
+
appendSnapshot(serverMetrics: ServerMetrics, systemMetrics?: SystemMetrics): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Load all snapshots within specified time window
|
|
15
|
+
*/
|
|
16
|
+
loadHistory(windowHours: number): Promise<HistorySnapshot[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Load history for specific time window type
|
|
19
|
+
*/
|
|
20
|
+
loadHistoryByWindow(window: TimeWindow): Promise<HistorySnapshot[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Get file path for server history
|
|
23
|
+
*/
|
|
24
|
+
getHistoryPath(): string;
|
|
25
|
+
/**
|
|
26
|
+
* Check if history file exists
|
|
27
|
+
*/
|
|
28
|
+
hasHistory(): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Clear all history for server
|
|
31
|
+
*/
|
|
32
|
+
clearHistory(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Load full history data from file
|
|
35
|
+
*/
|
|
36
|
+
private loadHistoryData;
|
|
37
|
+
/**
|
|
38
|
+
* Prune snapshots older than maxAge
|
|
39
|
+
*/
|
|
40
|
+
private pruneOldSnapshots;
|
|
41
|
+
/**
|
|
42
|
+
* Filter snapshots by time window
|
|
43
|
+
*/
|
|
44
|
+
private filterByTimeWindow;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=history-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-manager.d.ts","sourceRoot":"","sources":["../../src/lib/history-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAe,eAAe,EAAqB,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAExG,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;gBAEtC,QAAQ,EAAE,MAAM;IAM5B;;OAEG;IACG,cAAc,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDhG;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAsBlE;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIzE;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IASpC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAcnC;;OAEG;YACW,eAAe;IAa7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAI3B"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HistoryManager = void 0;
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const os_1 = require("os");
|
|
7
|
+
const history_types_js_1 = require("../types/history-types.js");
|
|
8
|
+
class HistoryManager {
|
|
9
|
+
constructor(serverId) {
|
|
10
|
+
this.MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours
|
|
11
|
+
this.serverId = serverId;
|
|
12
|
+
this.historyDir = (0, path_1.join)((0, os_1.homedir)(), '.llamacpp', 'history');
|
|
13
|
+
this.historyPath = (0, path_1.join)(this.historyDir, `${serverId}.json`);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Append a new snapshot to history (with auto-pruning)
|
|
17
|
+
*/
|
|
18
|
+
async appendSnapshot(serverMetrics, systemMetrics) {
|
|
19
|
+
try {
|
|
20
|
+
// Ensure history directory exists
|
|
21
|
+
await (0, promises_1.mkdir)(this.historyDir, { recursive: true });
|
|
22
|
+
// Load existing history
|
|
23
|
+
const historyData = await this.loadHistoryData();
|
|
24
|
+
// Create new snapshot
|
|
25
|
+
const snapshot = {
|
|
26
|
+
timestamp: Date.now(),
|
|
27
|
+
server: {
|
|
28
|
+
healthy: serverMetrics.healthy,
|
|
29
|
+
uptime: serverMetrics.uptime,
|
|
30
|
+
activeSlots: serverMetrics.activeSlots,
|
|
31
|
+
idleSlots: serverMetrics.idleSlots,
|
|
32
|
+
totalSlots: serverMetrics.totalSlots,
|
|
33
|
+
avgPromptSpeed: serverMetrics.avgPromptSpeed,
|
|
34
|
+
avgGenerateSpeed: serverMetrics.avgGenerateSpeed,
|
|
35
|
+
processMemory: serverMetrics.processMemory,
|
|
36
|
+
processCpuUsage: serverMetrics.processCpuUsage,
|
|
37
|
+
},
|
|
38
|
+
system: systemMetrics ? {
|
|
39
|
+
gpuUsage: systemMetrics.gpuUsage,
|
|
40
|
+
cpuUsage: systemMetrics.cpuUsage,
|
|
41
|
+
aneUsage: systemMetrics.aneUsage,
|
|
42
|
+
temperature: systemMetrics.temperature,
|
|
43
|
+
memoryUsed: systemMetrics.memoryUsed,
|
|
44
|
+
memoryTotal: systemMetrics.memoryTotal,
|
|
45
|
+
} : undefined,
|
|
46
|
+
};
|
|
47
|
+
// Append new snapshot
|
|
48
|
+
historyData.snapshots.push(snapshot);
|
|
49
|
+
// Prune old snapshots (keep only last 24h)
|
|
50
|
+
historyData.snapshots = this.pruneOldSnapshots(historyData.snapshots, this.MAX_AGE_MS);
|
|
51
|
+
// Atomic write: write to temp file in same directory, then rename
|
|
52
|
+
// This prevents read collisions during concurrent access
|
|
53
|
+
// IMPORTANT: temp file MUST be in same directory as destination for rename to work across filesystems
|
|
54
|
+
const tempPath = (0, path_1.join)(this.historyDir, `.${this.serverId}-${Date.now()}.tmp`);
|
|
55
|
+
await (0, promises_1.writeFile)(tempPath, JSON.stringify(historyData, null, 2), 'utf-8');
|
|
56
|
+
await (0, promises_1.rename)(tempPath, this.historyPath);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
// Silent failure - don't interrupt monitoring
|
|
60
|
+
// Don't throw - just return silently to avoid polluting console
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Load all snapshots within specified time window
|
|
66
|
+
*/
|
|
67
|
+
async loadHistory(windowHours) {
|
|
68
|
+
// Retry logic for file I/O collisions during concurrent read/write
|
|
69
|
+
const maxRetries = 3;
|
|
70
|
+
let lastError = null;
|
|
71
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
72
|
+
try {
|
|
73
|
+
const historyData = await this.loadHistoryData();
|
|
74
|
+
return this.filterByTimeWindow(historyData.snapshots, windowHours);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
lastError = error;
|
|
78
|
+
// Wait briefly before retry (exponential backoff)
|
|
79
|
+
if (attempt < maxRetries - 1) {
|
|
80
|
+
await new Promise(resolve => setTimeout(resolve, 50 * Math.pow(2, attempt)));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// All retries failed - throw error so it can be handled upstream
|
|
85
|
+
throw new Error(`Failed to load history after ${maxRetries} attempts: ${lastError?.message || 'Unknown error'}`);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Load history for specific time window type
|
|
89
|
+
*/
|
|
90
|
+
async loadHistoryByWindow(window) {
|
|
91
|
+
return this.loadHistory(history_types_js_1.TIME_WINDOW_HOURS[window]);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get file path for server history
|
|
95
|
+
*/
|
|
96
|
+
getHistoryPath() {
|
|
97
|
+
return this.historyPath;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if history file exists
|
|
101
|
+
*/
|
|
102
|
+
async hasHistory() {
|
|
103
|
+
try {
|
|
104
|
+
await (0, promises_1.access)(this.historyPath);
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Clear all history for server
|
|
113
|
+
*/
|
|
114
|
+
async clearHistory() {
|
|
115
|
+
const emptyHistory = {
|
|
116
|
+
serverId: this.serverId,
|
|
117
|
+
snapshots: [],
|
|
118
|
+
};
|
|
119
|
+
await (0, promises_1.mkdir)(this.historyDir, { recursive: true });
|
|
120
|
+
// Atomic write - temp file in same directory as destination
|
|
121
|
+
const tempPath = (0, path_1.join)(this.historyDir, `.${this.serverId}-${Date.now()}.tmp`);
|
|
122
|
+
await (0, promises_1.writeFile)(tempPath, JSON.stringify(emptyHistory, null, 2), 'utf-8');
|
|
123
|
+
await (0, promises_1.rename)(tempPath, this.historyPath);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Load full history data from file
|
|
127
|
+
*/
|
|
128
|
+
async loadHistoryData() {
|
|
129
|
+
try {
|
|
130
|
+
const content = await (0, promises_1.readFile)(this.historyPath, 'utf-8');
|
|
131
|
+
return JSON.parse(content);
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
// File doesn't exist or is corrupted, return empty history
|
|
135
|
+
return {
|
|
136
|
+
serverId: this.serverId,
|
|
137
|
+
snapshots: [],
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Prune snapshots older than maxAge
|
|
143
|
+
*/
|
|
144
|
+
pruneOldSnapshots(snapshots, maxAgeMs) {
|
|
145
|
+
const cutoff = Date.now() - maxAgeMs;
|
|
146
|
+
return snapshots.filter(s => s.timestamp >= cutoff);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Filter snapshots by time window
|
|
150
|
+
*/
|
|
151
|
+
filterByTimeWindow(snapshots, windowHours) {
|
|
152
|
+
const cutoff = Date.now() - (windowHours * 60 * 60 * 1000);
|
|
153
|
+
return snapshots.filter(s => s.timestamp >= cutoff);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
exports.HistoryManager = HistoryManager;
|
|
157
|
+
//# sourceMappingURL=history-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-manager.js","sourceRoot":"","sources":["../../src/lib/history-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,8 +29,9 @@ export declare class MetricsAggregator {
|
|
|
29
29
|
* Aggregate all server metrics
|
|
30
30
|
* @param server - Server configuration
|
|
31
31
|
* @param processMemory - Optional pre-fetched process memory (for batch collection)
|
|
32
|
+
* @param processCpuUsage - Optional pre-fetched process CPU usage (for batch collection)
|
|
32
33
|
*/
|
|
33
|
-
collectServerMetrics(server: ServerConfig, processMemory?: number | null): Promise<ServerMetrics>;
|
|
34
|
+
collectServerMetrics(server: ServerConfig, processMemory?: number | null, processCpuUsage?: number | null): Promise<ServerMetrics>;
|
|
34
35
|
/**
|
|
35
36
|
* Collect complete monitoring data (server + system metrics)
|
|
36
37
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-aggregator.d.ts","sourceRoot":"","sources":["../../src/lib/metrics-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAY,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKjF;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAoE;gBAE7E,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,MAAa;IAOxD;;OAEG;YACW,gBAAgB;IA0B9B;;OAEG;YACW,SAAS;IAKvB;;OAEG;YACW,QAAQ;IAItB;;OAEG;YACW,QAAQ;IAyDtB
|
|
1
|
+
{"version":3,"file":"metrics-aggregator.d.ts","sourceRoot":"","sources":["../../src/lib/metrics-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAY,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKjF;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,aAAa,CAAoE;gBAE7E,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,MAAa;IAOxD;;OAEG;YACW,gBAAgB;IA0B9B;;OAEG;YACW,SAAS;IAKvB;;OAEG;YACW,QAAQ;IAItB;;OAEG;YACW,QAAQ;IAyDtB;;;;;OAKG;IACG,oBAAoB,CACxB,MAAM,EAAE,YAAY,EACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,EAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,GAC9B,OAAO,CAAC,aAAa,CAAC;IAmGzB;;OAEG;IACG,kBAAkB,CACtB,MAAM,EAAE,YAAY,EACpB,cAAc,GAAE,MAAa,GAC5B,OAAO,CAAC,WAAW,CAAC;CAexB"}
|
|
@@ -107,8 +107,9 @@ class MetricsAggregator {
|
|
|
107
107
|
* Aggregate all server metrics
|
|
108
108
|
* @param server - Server configuration
|
|
109
109
|
* @param processMemory - Optional pre-fetched process memory (for batch collection)
|
|
110
|
+
* @param processCpuUsage - Optional pre-fetched process CPU usage (for batch collection)
|
|
110
111
|
*/
|
|
111
|
-
async collectServerMetrics(server, processMemory) {
|
|
112
|
+
async collectServerMetrics(server, processMemory, processCpuUsage) {
|
|
112
113
|
const now = Date.now();
|
|
113
114
|
// Check basic server status first
|
|
114
115
|
const status = await status_checker_js_1.statusChecker.checkServer(server);
|
|
@@ -139,14 +140,17 @@ class MetricsAggregator {
|
|
|
139
140
|
};
|
|
140
141
|
}
|
|
141
142
|
// Fetch detailed metrics in parallel
|
|
142
|
-
// If processMemory
|
|
143
|
-
const [healthy, props, slots, fetchedMemory] = await Promise.all([
|
|
143
|
+
// If processMemory/CPU were pre-fetched (batch mode), use them; otherwise fetch individually
|
|
144
|
+
const [healthy, props, slots, fetchedMemory, fetchedCpu] = await Promise.all([
|
|
144
145
|
this.getHealth(),
|
|
145
146
|
this.getProps(),
|
|
146
147
|
this.getSlots(),
|
|
147
148
|
processMemory !== undefined
|
|
148
149
|
? Promise.resolve(processMemory)
|
|
149
150
|
: (server.pid ? (0, process_utils_js_1.getProcessMemory)(server.pid) : Promise.resolve(null)),
|
|
151
|
+
processCpuUsage !== undefined
|
|
152
|
+
? Promise.resolve(processCpuUsage)
|
|
153
|
+
: (server.pid ? (0, process_utils_js_1.getProcessCpu)(server.pid) : Promise.resolve(null)),
|
|
150
154
|
]);
|
|
151
155
|
// Calculate slot statistics
|
|
152
156
|
const activeSlots = slots.filter((s) => s.state === 'processing').length;
|
|
@@ -160,6 +164,12 @@ class MetricsAggregator {
|
|
|
160
164
|
const avgGenerateSpeed = processingSlots.length > 0
|
|
161
165
|
? processingSlots.reduce((sum, s) => sum + (s.timings?.predicted_per_second || 0), 0) / processingSlots.length
|
|
162
166
|
: undefined;
|
|
167
|
+
// Calculate total memory (CPU + Metal GPU memory if available)
|
|
168
|
+
let totalMemory = fetchedMemory ?? undefined;
|
|
169
|
+
if (totalMemory !== undefined && server.metalMemoryMB) {
|
|
170
|
+
// Add Metal memory (convert MB to bytes)
|
|
171
|
+
totalMemory += server.metalMemoryMB * 1024 * 1024;
|
|
172
|
+
}
|
|
163
173
|
return {
|
|
164
174
|
server,
|
|
165
175
|
healthy,
|
|
@@ -173,7 +183,8 @@ class MetricsAggregator {
|
|
|
173
183
|
slots,
|
|
174
184
|
avgPromptSpeed,
|
|
175
185
|
avgGenerateSpeed,
|
|
176
|
-
processMemory:
|
|
186
|
+
processMemory: totalMemory,
|
|
187
|
+
processCpuUsage: fetchedCpu ?? undefined,
|
|
177
188
|
timestamp: now,
|
|
178
189
|
stale: false,
|
|
179
190
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-aggregator.js","sourceRoot":"","sources":["../../src/lib/metrics-aggregator.ts"],"names":[],"mappings":";;;AAEA,2DAAoD;AACpD,+DAAwD;AACxD,
|
|
1
|
+
{"version":3,"file":"metrics-aggregator.js","sourceRoot":"","sources":["../../src/lib/metrics-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,13 +56,18 @@ export declare class SystemCollector {
|
|
|
56
56
|
*/
|
|
57
57
|
private parseVmStatOutput;
|
|
58
58
|
/**
|
|
59
|
-
*
|
|
59
|
+
* Get total system memory from sysctl
|
|
60
|
+
* Returns installed RAM size in bytes
|
|
60
61
|
*/
|
|
61
|
-
private
|
|
62
|
+
private getTotalMemory;
|
|
63
|
+
/**
|
|
64
|
+
* Collect vm_stat memory metrics + total system memory from sysctl
|
|
65
|
+
*/
|
|
66
|
+
private getMemoryMetrics;
|
|
62
67
|
/**
|
|
63
68
|
* Collect all system metrics
|
|
64
|
-
* Attempts macmon first (GPU/CPU/ANE
|
|
65
|
-
* Caches results for
|
|
69
|
+
* Attempts macmon first (GPU/CPU/ANE), always gets memory from vm_stat + sysctl
|
|
70
|
+
* Caches results for 4s to prevent spawning multiple macmon processes
|
|
66
71
|
*/
|
|
67
72
|
collectSystemMetrics(): Promise<SystemMetrics>;
|
|
68
73
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-collector.d.ts","sourceRoot":"","sources":["../../src/lib/system-collector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,GAAE,MAAmC;IAK3D;;OAEG;YACW,mBAAmB;IA4BjC;;OAEG;YACW,uBAAuB;IAerC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAiDvB;;;;OAIG;YACW,gBAAgB;IA2B9B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"system-collector.d.ts","sourceRoot":"","sources":["../../src/lib/system-collector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAa;gBAEnB,UAAU,GAAE,MAAmC;IAK3D;;OAEG;YACW,mBAAmB;IA4BjC;;OAEG;YACW,uBAAuB;IAerC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,eAAe;IAiDvB;;;;OAIG;YACW,gBAAgB;IA2B9B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;;OAGG;YACW,cAAc;IAS5B;;OAEG;YACW,gBAAgB;IAmB9B;;;;OAIG;IACG,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC;IA0BpD;;;OAGG;YACW,sBAAsB;CAkCrC;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
|
|
@@ -192,9 +192,6 @@ class SystemCollector {
|
|
|
192
192
|
let pagesActive = 0;
|
|
193
193
|
let pagesWired = 0;
|
|
194
194
|
let pagesCompressed = 0;
|
|
195
|
-
let pagesFree = 0;
|
|
196
|
-
let pagesInactive = 0;
|
|
197
|
-
let pagesSpeculative = 0;
|
|
198
195
|
for (const line of lines) {
|
|
199
196
|
const match = line.match(/Pages (.*?):\s+(\d+)\./);
|
|
200
197
|
if (match) {
|
|
@@ -206,44 +203,48 @@ class SystemCollector {
|
|
|
206
203
|
pagesWired = value;
|
|
207
204
|
else if (name === 'compressed')
|
|
208
205
|
pagesCompressed = value;
|
|
209
|
-
else if (name === 'free')
|
|
210
|
-
pagesFree = value;
|
|
211
|
-
else if (name === 'inactive')
|
|
212
|
-
pagesInactive = value;
|
|
213
|
-
else if (name === 'speculative')
|
|
214
|
-
pagesSpeculative = value;
|
|
215
206
|
}
|
|
216
207
|
}
|
|
217
208
|
// Calculate used memory (active + wired + compressed)
|
|
209
|
+
// This matches what Activity Monitor and macmon report as "used"
|
|
218
210
|
const usedPages = pagesActive + pagesWired + pagesCompressed;
|
|
219
211
|
const memoryUsed = usedPages * pageSize;
|
|
220
|
-
|
|
221
|
-
const totalPages = pagesActive +
|
|
222
|
-
pagesWired +
|
|
223
|
-
pagesCompressed +
|
|
224
|
-
pagesFree +
|
|
225
|
-
pagesInactive +
|
|
226
|
-
pagesSpeculative;
|
|
227
|
-
const memoryTotal = totalPages * pageSize;
|
|
228
|
-
return { memoryUsed, memoryTotal };
|
|
212
|
+
return { memoryUsed };
|
|
229
213
|
}
|
|
230
214
|
/**
|
|
231
|
-
*
|
|
215
|
+
* Get total system memory from sysctl
|
|
216
|
+
* Returns installed RAM size in bytes
|
|
232
217
|
*/
|
|
233
|
-
async
|
|
218
|
+
async getTotalMemory() {
|
|
234
219
|
try {
|
|
235
|
-
const output = await (0, process_utils_js_1.execCommand)('
|
|
236
|
-
return
|
|
220
|
+
const output = await (0, process_utils_js_1.execCommand)('sysctl -n hw.memsize 2>/dev/null');
|
|
221
|
+
return parseInt(output.trim(), 10) || 0;
|
|
237
222
|
}
|
|
238
223
|
catch {
|
|
239
|
-
|
|
224
|
+
return 0;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Collect vm_stat memory metrics + total system memory from sysctl
|
|
229
|
+
*/
|
|
230
|
+
async getMemoryMetrics() {
|
|
231
|
+
try {
|
|
232
|
+
// Get used memory from vm_stat
|
|
233
|
+
const vmStatOutput = await (0, process_utils_js_1.execCommand)('vm_stat 2>/dev/null');
|
|
234
|
+
const { memoryUsed } = this.parseVmStatOutput(vmStatOutput);
|
|
235
|
+
// Get total installed RAM from sysctl (this is accurate)
|
|
236
|
+
const memoryTotal = await this.getTotalMemory();
|
|
237
|
+
return { memoryUsed, memoryTotal };
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
// Fallback to zeros if commands fail
|
|
240
241
|
return { memoryUsed: 0, memoryTotal: 0 };
|
|
241
242
|
}
|
|
242
243
|
}
|
|
243
244
|
/**
|
|
244
245
|
* Collect all system metrics
|
|
245
|
-
* Attempts macmon first (GPU/CPU/ANE
|
|
246
|
-
* Caches results for
|
|
246
|
+
* Attempts macmon first (GPU/CPU/ANE), always gets memory from vm_stat + sysctl
|
|
247
|
+
* Caches results for 4s to prevent spawning multiple macmon processes
|
|
247
248
|
*/
|
|
248
249
|
async collectSystemMetrics() {
|
|
249
250
|
const now = Date.now();
|
|
@@ -274,10 +275,10 @@ class SystemCollector {
|
|
|
274
275
|
async doCollectSystemMetrics() {
|
|
275
276
|
const warnings = [];
|
|
276
277
|
const now = Date.now();
|
|
277
|
-
// Try macmon first
|
|
278
|
+
// Try macmon first for GPU/CPU/ANE
|
|
278
279
|
const macmonMetrics = await this.getMacmonMetrics();
|
|
279
|
-
// Always get memory from vm_stat (
|
|
280
|
-
const memoryMetrics = await this.
|
|
280
|
+
// Always get memory from vm_stat + sysctl (accurate total from sysctl)
|
|
281
|
+
const memoryMetrics = await this.getMemoryMetrics();
|
|
281
282
|
// Determine source and add warnings
|
|
282
283
|
let source;
|
|
283
284
|
if (macmonMetrics) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-collector.js","sourceRoot":"","sources":["../../src/lib/system-collector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gEAA6E;AAG7E;;;GAGG;AACH,MAAa,eAAe;IAW1B,YAAY,aAAqB,0BAA0B;QATnD,oBAAe,GAAmB,IAAI,CAAC;QACvC,sBAAiB,GAAyB,IAAI,CAAC;QAC/C,uBAAkB,GAAW,CAAC,CAAC;QACtB,iBAAY,GAAG,IAAI,CAAC,CAAC,sDAAsD;QACpF,mBAAc,GAAkC,IAAI,CAAC;QACrD,eAAU,GAAW,CAAC,CAAC;QACvB,eAAU,GAAW,CAAC,CAAC;QACvB,eAAU,GAAW,CAAC,CAAC;QAG7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB;QAC/B,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,2BAA2B,GAAC,CAAC;YAElE,iEAAiE;YACjE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,iDAAiD,CAAC,CAAC;gBACpF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,iDAAiD,CAAC,CAAC;gBACpF,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;gBAC3D,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,+BAA+B,CAAC,CAAC;gBACjE,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;gBAC3C,uDAAuD;gBACvD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;gBAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACtD,CAAC;YAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;YACxC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,uBAAuB;QACnC,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAW,EAAC,SAAS,IAAI,CAAC,UAAU,cAAc,CAAC,CAAC;YACzE,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;;;;;;;;OAUG;IACK,eAAe,CAAC,QAAgB;QAMtC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAElC,qEAAqE;YACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS;gBAChD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG;gBACzB,CAAC,CAAC,SAAS,CAAC;YAEd,sDAAsD;YACtD,6CAA6C;YAC7C,uEAAuE;YACvE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,UAAU;YACxD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,UAAU;YAExD,IAAI,QAA4B,CAAC;YACjC,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBACxB,wCAAwC;gBACxC,QAAQ,GAAG,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;YACrG,CAAC;iBAAM,CAAC;gBACN,wDAAwD;gBACxD,QAAQ,GAAG,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACjD,CAAC;YAED,wEAAwE;YACxE,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG;gBACnC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,yBAAyB;gBACvE,CAAC,CAAC,CAAC,CAAC;YAEN,yDAAyD;YACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;YAEvE,OAAO;gBACL,QAAQ;gBACR,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBAC7C,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBAC7C,WAAW;aACZ,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,gBAAgB;QAM5B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACvD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,gDAAgD;YAChD,0CAA0C;YAC1C,uEAAuE;YACvE,MAAM,MAAM,GAAG,MAAM,IAAA,sCAAmB,EAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;YAE1E,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;OAaG;IACK,iBAAiB,CAAC,MAAc;
|
|
1
|
+
{"version":3,"file":"system-collector.js","sourceRoot":"","sources":["../../src/lib/system-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import blessed from 'blessed';
|
|
2
|
+
import { ServerConfig } from '../types/server-config.js';
|
|
3
|
+
export declare function createHistoricalUI(screen: blessed.Widgets.Screen, server: ServerConfig, onBack: () => void): Promise<void>;
|
|
4
|
+
export declare function createMultiServerHistoricalUI(screen: blessed.Widgets.Screen, servers: ServerConfig[], _selectedIndex: number, onBack: () => void): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=HistoricalMonitorApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HistoricalMonitorApp.d.ts","sourceRoot":"","sources":["../../src/tui/HistoricalMonitorApp.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAiJzD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAC9B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,IAAI,GACjB,OAAO,CAAC,IAAI,CAAC,CAiLf;AAGD,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAC9B,OAAO,EAAE,YAAY,EAAE,EACvB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,MAAM,IAAI,GACjB,OAAO,CAAC,IAAI,CAAC,CAmNf"}
|