herolib-os
Unified system utilities for Rust and Rhai scripting, providing OS operations, process management, git, and network utilities.
Documentation
Features
- OS Module - Filesystem operations, platform detection, package management, file downloads
- Process Module - Command execution with builder pattern, process management
- Git Module - Repository management, URL parsing, git tree organization
- Network Module - TCP connectivity, HTTP/HTTPS operations, SSH support with key management and file transfers
- Profiling Module - Cross-platform system profiling (network, disk, memory, CPU, monitoring, reporting)
- Rhai Integration - Full scripting support for all modules
- Interactive REPL -
hero-osbinary for testing and scripting
Installation
Add to your Cargo.toml:
[]
= "0.3.6"
Feature Flags
| Feature | Description |
|---|---|
rhai |
Rhai scripting support (default) |
repl |
Interactive REPL binary |
full |
All features enabled (rhai + repl) |
# Default (with Rhai scripting)
= "0.3.6"
# With REPL support
= { = "0.3.6", = ["repl"] }
# All features
= { = "0.3.6", = ["full"] }
Quick Start
Rust API
use ;
use run;
Rhai Scripting
// Execute commands
let output = run("ls -la");
print(output);
// File operations
if exist("/tmp/myfile.txt") {
let content = file_read("/tmp/myfile.txt");
print(content);
}
// Platform detection
print("OS: " + os_name());
print("Arch: " + os_arch());
// TCP and HTTP connectivity checks
let is_open = net_tcp_check("example.com", 443);
let is_reachable = net_http_check("https://example.com");
// Network operations
let is_pingable = net_tcp_ping("example.com");
Interactive REPL
Build and run the interactive REPL:
REPL features:
- Tab completion for all functions
- Syntax highlighting
- Command history
- Script loading with
:load filename.rhai - Scope inspection with
:scope
╔═══════════════════════════════════════════════════════════════════╗
║ HERO-OS ║
║ System Utilities REPL v0.1.0 ║
╚═══════════════════════════════════════════════════════════════════╝
Type :help for available commands, :quit to exit
hero> run("uname -a")
Darwin myhost 24.6.0 Darwin Kernel Version 24.6.0 ...
hero> os_name()
macos
hero> /load rhaiexamples/os/01_filesystem.rhai
Module Reference
OS Module
| Function | Description |
|---|---|
exist(path) |
Check if file/directory exists |
file_read(path) |
Read file contents |
file_write(path, content) |
Write content to file |
file_size(path) |
Get file size in bytes |
delete(path) |
Delete file or directory |
mkdir(path) |
Create directory |
copy(src, dest) |
Copy file or directory |
mv(src, dest) |
Move/rename file or directory |
os_name() |
Get OS name (linux, macos, windows) |
os_arch() |
Get architecture (x86_64, aarch64) |
which(cmd) |
Find command in PATH |
env_get(name) |
Get environment variable |
env_set(name, value) |
Set environment variable |
Process Module
| Function | Description |
|---|---|
run(cmd) |
Execute command, return stdout |
cmd(cmd) |
Create command builder |
process_list() |
List running processes |
process_get(pid) |
Get process by PID |
process_kill(pid) |
Kill process by PID |
Command Builder Methods:
cmd("curl")
.arg("-s") // Add argument
.args(["-H", "Accept: application/json"])
.env("TOKEN", "xxx") // Set environment variable
.cwd("/tmp") // Set working directory
.silent() // Suppress output
.ignore_error() // Don't fail on non-zero exit
.execute() // Run and return CommandResult
Git Module
| Function | Description |
|---|---|
parse_git_url_extended(url) |
Parse git URL into components |
git_tree_new(path) |
Create git tree manager |
GitTree Methods:
let tree = git_tree_new("/repos");
tree.list() // List all repositories
tree.find("*pattern*") // Find matching repos
tree.clone_repo(url) // Clone repository
tree.get_path(url) // Clone and return path
tree.get_path_pull(url) // Clone, pull, return path
GitRepo Methods:
repo.path() // Get local path
repo.has_changes() // Check for uncommitted changes
repo.pull() // Pull from remote
repo.reset() // Reset local changes
repo.commit(msg) // Commit changes
repo.push() // Push to remote
Profiling Module
| Function | Description |
|---|---|
SystemProfile() |
Get comprehensive system information (hostname, OS, CPU, memory, NUMA) |
measure_bandwidth(server, duration_sec) |
Measure network bandwidth (upload/download) |
measure_latency(host, count) |
Measure network latency with ping |
run_jitter_test(server) |
Test network jitter with UDP |
test_udp_throughput(server, bandwidth_bps) |
Test UDP throughput performance |
measure_sequential_read(path, size_bytes) |
Benchmark sequential disk reads |
measure_sequential_write(path, size_bytes) |
Benchmark sequential disk writes |
measure_random_read(path, size_bytes, block_size) |
Benchmark random disk reads |
measure_random_write(path, size_bytes, block_size) |
Benchmark random disk writes |
measure_iops(path) |
Measure disk IOPS performance |
test_disk_latency(path) |
Test disk latency percentiles |
measure_memory_bandwidth() |
Measure memory bandwidth (read/write/copy) |
test_memory_latency() |
Test memory access latency |
measure_cache_performance() |
Measure CPU cache performance |
test_numa_bandwidth() |
Test NUMA bandwidth performance |
run_memory_stress_test(duration_sec) |
Run memory stress test |
profile_memory_usage(pid) |
Profile memory usage of a process |
measure_single_thread_performance(duration_sec) |
Benchmark single-thread CPU performance |
measure_multi_thread_scaling(threads, duration_sec) |
Benchmark multi-thread scaling efficiency |
test_instruction_throughput() |
Test CPU instruction throughput |
measure_cache_misses() |
Measure CPU cache miss rates |
profile_cpu_usage(pid) |
Profile CPU usage of a process |
detect_thermal_state() |
Detect thermal throttling state (Linux/macOS) |
is_thermal_throttling() |
Simple check if CPU is throttling |
is_thermal_detection_supported() |
Check if thermal detection is available |
BenchmarkReport() |
Create new benchmark report |
generate_json(report) |
Generate JSON format report |
generate_text(report) |
Generate human-readable text report |
generate_html(report) |
Generate HTML format report |
ResourceMonitor(interval_sec) |
Create resource utilization monitor |
sample_cpu_utilization() |
Sample current CPU utilization |
sample_memory_usage() |
Sample current memory usage |
sample_io_wait_percent() |
Sample I/O wait percentage |
sample_io_queue_depth() |
Sample I/O queue depth |
analyze_trend(reports, metric) |
Analyze performance trend across multiple reports |
detect_regressions(reports, threshold) |
Detect performance regressions with severity |
calculate_statistics(reports) |
Calculate statistical summary of reports |
compare_reports(current, baseline) |
Compare two benchmark reports |
Cross-Platform Examples:
// System profiling
let profile = SystemProfile();
print("System: " + profile.hostname + " (" + profile.os_name + " " + profile.os_version + ")");
print("CPU: " + profile.cpu_model + " (" + profile.cpu_cores + " cores, " + profile.cpu_threads + " threads)");
print("Memory: " + profile.memory_total_bytes + " bytes");
// Network benchmarking
let bandwidth = measure_bandwidth("iperf.example.com", 30);
print("Download: " + bandwidth.download_bps + " bps, Upload: " + bandwidth.upload_bps + " bps");
let latency = measure_latency("google.com", 10);
print("Latency: " + latency.avg_ms + "ms avg, " + latency.packet_loss_percent + "% loss");
// Disk benchmarking
let disk_result = run_disk_benchmark("/tmp/test_file", 1024*1024*1024); // 1GB
print("Sequential read: " + disk_result.sequential_read.read_mb_per_sec + " MB/s");
print("Random IOPS: " + disk_result.iops.read_ops_per_sec + " ops/s");
// Memory benchmarking
let mem_result = run_memory_stress_test(60); // 60 seconds
print("Memory bandwidth: " + mem_result.read_bandwidth_gbps + " GB/s read");
// CPU benchmarking
let cpu_result = run_cpu_benchmark(4, std::time::Duration::from_secs(30));
print("Single thread: " + cpu_result.single_thread.integer_score + " points");
print("Multi thread efficiency: " + cpu_result.scaling.efficiency_percent + "%");
// Thermal throttling detection (Linux/macOS)
if is_thermal_detection_supported() {
let thermal = detect_thermal_state();
if thermal != () {
print("Thermal state: " + thermal.severity);
print("Throttling: " + thermal.is_throttling);
if thermal.temperature_celsius != () {
print("Temperature: " + thermal.temperature_celsius + "°C");
}
}
}
// NUMA detection (Linux/Windows)
let profile = SystemProfile();
if profile.numa_nodes != () {
print("NUMA nodes: " + profile.numa_nodes);
}
// Resource monitoring
let monitor = ResourceMonitor(1); // 1 second interval
// ... run benchmarks ...
let report = monitor.stop();
print("Peak CPU: " + report.cpu_utilization.peak_percent + "%");
print("Peak memory: " + report.memory_utilization.peak_mb + " MB");
// Benchmark reports with metadata
let report = BenchmarkReport();
report.set_environment("production");
report.set_git_commit("abc123");
report.add_tag("region", "us-east-1");
print("Benchmark ID: " + report.benchmark_id); // Auto-generated UUID
print("Timestamp: " + report.timestamp); // Auto-generated timestamp
// Trend analysis across multiple reports
let reports = [];
reports.push(load_report_file("/history/report1.json"));
reports.push(load_report_file("/history/report2.json"));
reports.push(load_report_file("/history/report3.json"));
let trend = analyze_trend(reports, "cpu");
print("Trend: " + trend.direction); // Improving/Degrading/Stable/Volatile
print("Mean: " + trend.mean);
print("Slope: " + trend.slope);
// Detect regressions (5% threshold)
let regressions = detect_regressions(reports, 5.0);
for regression in regressions {
print("Regression in " + regression.metric + ": " +
regression.delta_percent + "% (" + regression.severity + ")");
}
Thermal Throttling Detection
Cross-platform thermal state detection with platform-specific details:
Rust API:
use ;
match detect_thermal_state?
Platform Support:
- Linux: Full support with temperature details, trip points, and zone information
- macOS: Supported with 4 thermal states (Normal/Light/Moderate/Critical)
- Windows: Not supported (returns
None)
Severity Levels:
Normal- No thermal pressureLight- System warming up, no throttlingModerate- Active throttlingCritical- Severe throttling
NUMA Detection
Automatic NUMA node detection on supported platforms:
Rust API:
use SystemProfile;
let profile = new;
if let Some = profile.numa_nodes else
Platform Support:
- Linux: Reads
/sys/devices/system/node/(no privileges required) - macOS: Returns
None(Unified Memory Architecture) - Windows: Uses
GetNumaHighestNodeNumber()API (no privileges required)
### Network Module
| Function | Description |
|----------|-------------|
| `net_tcp_check(host, port)` | Check if a TCP port is open |
| `net_tcp_ping(host)` | Check if a host is reachable |
| `net_http_check(url)` | Check if a URL is reachable |
| `net_http_status(url)` | Get HTTP status code for a URL |
**SSH Connection:**
```rhai
let conn = SshConnection::new()
.host("example.com")
.user("ubuntu")
.port(22)
.connect();
let (code, output) = conn.execute("whoami");
SSH Key Management:
let keygen = SshKeyGenerator::new("/tmp/my_key")
.key_type(Ed25519);
keygen.generate();
let auth_mgr = AuthorizedKeysManager::new(conn);
auth_mgr.add_key("/path/to/id_rsa.pub");
File Transfer (SSH/Rsync):
let transfer = FileTransferOps::new(conn);
transfer.upload("/local/file", "/remote/path");
transfer.download("/remote/file", "/local/path");
Examples
See the rhaiexamples/ directory for comprehensive examples:
rhaiexamples/
├── os/ # Filesystem, platform detection, package management
├── process/ # Command execution and process management
├── git/ # Repository management and URL handling
├── net/ # TCP, HTTP, and network connectivity
├── ssh/ # SSH connections and file transfer
└── profiling/ # System profiling and benchmarking (NEW!)
Run examples with the REPL:
Building
# Build with REPL support
# Build with all features
# Build with cross-platform profiling support
# Run tests
# Generate documentation
Requirements
- Rust 1.92.0 or later
- Edition 2024
Optional Runtime Dependencies
- Git - For repository operations and cloning
- SSH/OpenSSH - For SSH operations and file transfers
- curl - For HTTP operations (recommended)
- rsync - For efficient SSH file transfers (recommended)
License
Apache-2.0