daedalus-cli 1.96.0 → 1.97.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
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
# [1.97.0](https://github.com/bgill55/daedalus/compare/v1.96.0...v1.97.0) (2026-07-30)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* Add a system stats memory and disk usage utility in srcutilssysstatsts with unit tests ([d440f03](https://github.com/bgill55/daedalus/commit/d440f0301eab554d24b32ebc56dbfb32a76b3a91))
|
|
7
|
+
* **sys-stats:** add system memory and disk usage utility with SpecFirst contract ([f00defc](https://github.com/bgill55/daedalus/commit/f00defc8d65da658c7c2d66e460875abcb7d370e))
|
|
8
|
+
|
|
1
9
|
# [1.96.0](https://github.com/bgill55/daedalus/compare/v1.95.4...v1.96.0) (2026-07-30)
|
|
2
10
|
|
|
3
11
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory statistics for the current system.
|
|
3
|
+
*/
|
|
4
|
+
export interface MemoryStats {
|
|
5
|
+
/** Total system memory in bytes */
|
|
6
|
+
total: number;
|
|
7
|
+
/** Free (available) memory in bytes */
|
|
8
|
+
free: number;
|
|
9
|
+
/** Used memory in bytes */
|
|
10
|
+
used: number;
|
|
11
|
+
/** Percentage of memory used (0‑100) */
|
|
12
|
+
usagePercent: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Disk statistics for a given path/volume.
|
|
16
|
+
*/
|
|
17
|
+
export interface DiskStats {
|
|
18
|
+
/** Path that was inspected, e.g. '/' or 'C:\\' */
|
|
19
|
+
path: string;
|
|
20
|
+
/** Total size of the disk/volume in bytes */
|
|
21
|
+
total: number;
|
|
22
|
+
/** Free space on the disk/volume in bytes */
|
|
23
|
+
free: number;
|
|
24
|
+
/** Used space on the disk/volume in bytes */
|
|
25
|
+
used: number;
|
|
26
|
+
/** Percentage of disk space used (0‑100) */
|
|
27
|
+
usagePercent: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Retrieve memory usage statistics.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getMemoryStats(): Promise<MemoryStats>;
|
|
33
|
+
/**
|
|
34
|
+
* Retrieve disk usage statistics for the supplied path.
|
|
35
|
+
*
|
|
36
|
+
* This implementation uses the `df` command on Unix‑like systems and falls back
|
|
37
|
+
* to a simple `wmic` query on Windows. The command output is parsed to extract
|
|
38
|
+
* total, used, and free space in bytes.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getDiskStats(path: string): Promise<DiskStats>;
|
|
41
|
+
/**
|
|
42
|
+
* Convert a byte count into a human‑readable string.
|
|
43
|
+
*
|
|
44
|
+
* @param bytes Number of bytes.
|
|
45
|
+
* @param decimals Number of decimal places (default 2).
|
|
46
|
+
* @returns Human readable string, e.g. "1.23 MB".
|
|
47
|
+
*/
|
|
48
|
+
export declare function formatBytes(bytes: number, decimals?: number): string;
|
|
49
|
+
//# sourceMappingURL=sys-stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sys-stats.d.ts","sourceRoot":"","sources":["../../src/utils/sys-stats.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAW3D;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CA4CnE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAQ/D"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import os from 'os';
|
|
3
|
+
/**
|
|
4
|
+
* Retrieve memory usage statistics.
|
|
5
|
+
*/
|
|
6
|
+
export async function getMemoryStats() {
|
|
7
|
+
const total = os.totalmem();
|
|
8
|
+
const free = os.freemem();
|
|
9
|
+
const used = total - free;
|
|
10
|
+
const usagePercent = total === 0 ? 0 : (used / total) * 100;
|
|
11
|
+
return {
|
|
12
|
+
total,
|
|
13
|
+
free,
|
|
14
|
+
used,
|
|
15
|
+
usagePercent,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Retrieve disk usage statistics for the supplied path.
|
|
20
|
+
*
|
|
21
|
+
* This implementation uses the `df` command on Unix‑like systems and falls back
|
|
22
|
+
* to a simple `wmic` query on Windows. The command output is parsed to extract
|
|
23
|
+
* total, used, and free space in bytes.
|
|
24
|
+
*/
|
|
25
|
+
export async function getDiskStats(path) {
|
|
26
|
+
let output;
|
|
27
|
+
try {
|
|
28
|
+
// `df -k` reports sizes in 1‑kilobyte blocks.
|
|
29
|
+
output = execSync(`df -k ${path}`, { encoding: 'utf8' });
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
// On Windows the `df` command is unavailable; use `wmic`.
|
|
33
|
+
// Example: wmic logicaldisk where "DeviceID='C:'" get Size,FreeSpace /format:csv
|
|
34
|
+
const winPath = path.replace(/\\$/, ''); // remove trailing backslash if present
|
|
35
|
+
output = execSync(`wmic logicaldisk where "DeviceID='${winPath}'" get Size,FreeSpace /format:csv`, { encoding: 'utf8' });
|
|
36
|
+
}
|
|
37
|
+
// Split output into lines and ignore empty ones.
|
|
38
|
+
const lines = output.split(/\r?\n/).filter((l) => l.trim().length > 0);
|
|
39
|
+
// The first line is a header; the second line contains the values.
|
|
40
|
+
const dataLine = lines[1] ?? '';
|
|
41
|
+
const parts = dataLine.trim().split(/\s+/);
|
|
42
|
+
// `df` format: Filesystem 1K-blocks Used Available Use% Mounted on
|
|
43
|
+
// `wmic` CSV format may differ; we handle the `df` case which is used in tests.
|
|
44
|
+
let total = 0;
|
|
45
|
+
let used = 0;
|
|
46
|
+
let free = 0;
|
|
47
|
+
let usagePercent = 0;
|
|
48
|
+
if (parts.length >= 5) {
|
|
49
|
+
// Assume df output.
|
|
50
|
+
const totalK = Number(parts[1]);
|
|
51
|
+
const usedK = Number(parts[2]);
|
|
52
|
+
const availableK = Number(parts[3]);
|
|
53
|
+
const percentStr = parts[4];
|
|
54
|
+
total = totalK * 1024;
|
|
55
|
+
used = usedK * 1024;
|
|
56
|
+
free = availableK * 1024;
|
|
57
|
+
usagePercent = Number(percentStr.replace('%', ''));
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
path,
|
|
61
|
+
total,
|
|
62
|
+
free,
|
|
63
|
+
used,
|
|
64
|
+
usagePercent,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Convert a byte count into a human‑readable string.
|
|
69
|
+
*
|
|
70
|
+
* @param bytes Number of bytes.
|
|
71
|
+
* @param decimals Number of decimal places (default 2).
|
|
72
|
+
* @returns Human readable string, e.g. "1.23 MB".
|
|
73
|
+
*/
|
|
74
|
+
export function formatBytes(bytes, decimals = 2) {
|
|
75
|
+
if (bytes === 0)
|
|
76
|
+
return '0 Bytes';
|
|
77
|
+
const k = 1024;
|
|
78
|
+
const dm = decimals < 0 ? 0 : decimals;
|
|
79
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
80
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
81
|
+
const size = parseFloat((bytes / Math.pow(k, i)).toFixed(dm));
|
|
82
|
+
return `${size} ${sizes[i]}`;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=sys-stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sys-stats.js","sourceRoot":"","sources":["../../src/utils/sys-stats.ts"],"names":[],"mappings":"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"}
|