summaryrefslogtreecommitdiff
path: root/MACOS.md
diff options
context:
space:
mode:
Diffstat (limited to 'MACOS.md')
-rw-r--r--MACOS.md71
1 files changed, 71 insertions, 0 deletions
diff --git a/MACOS.md b/MACOS.md
new file mode 100644
index 0000000..ba6efda
--- /dev/null
+++ b/MACOS.md
@@ -0,0 +1,71 @@
+# macOS Support for Loadbars
+
+## What was implemented
+
+Loadbars now fully supports macOS with automatic window activation built into the binary.
+
+### Changes made:
+
+1. **Script embedding** - Both Linux and Darwin monitoring scripts are embedded in the binary
+2. **OS detection** - Automatically uses the correct script based on the host:
+ - `localhost` on macOS → Darwin script (sysctl, vm_stat, netstat, iostat)
+ - `localhost` on Linux → Linux script (/proc filesystem)
+ - All remote hosts → Linux script (assumes remote servers are Linux)
+3. **Window activation** - macOS-specific code automatically brings SDL window to foreground
+ - Uses build tags (`activate_darwin.go` and `activate.go`)
+ - No external helper script needed
+
+## Usage on macOS
+
+Simply run the binary directly:
+
+```bash
+# Monitor localhost
+./loadbars --showcores --showmem --shownet
+
+# Monitor remote Linux servers
+./loadbars server1.example.com server2.example.com --showcores
+
+# Monitor both localhost and remotes
+./loadbars localhost server1.example.com server2.example.com --showcores
+```
+
+The window will automatically appear in the foreground.
+
+## Building on macOS
+
+Requirements:
+```bash
+brew install sdl2
+```
+
+Build:
+```bash
+mage build
+# or
+go build -o loadbars ./cmd/loadbars
+```
+
+## Technical details
+
+### Script selection logic
+- `internal/collector/script.go` - Embeds both scripts
+- `internal/collector/collector.go` - Selects script based on host:
+ - For localhost: checks if `/proc` exists to determine Linux vs macOS
+ - For remote hosts: always uses Linux script
+
+### Window activation
+- `internal/display/activate_darwin.go` - macOS-specific activation using `open -a`
+- `internal/display/activate.go` - No-op for other platforms
+- Called automatically after SDL window creation
+
+### Darwin monitoring script
+- Uses macOS native tools: `sysctl`, `vm_stat`, `netstat -ibn`, `iostat`
+- Outputs same protocol format as Linux script (M LOADAVG, M MEMSTATS, etc.)
+- Limitations: No per-core CPU stats on macOS (iostat limitation)
+
+## Known limitations
+
+- Remote macOS hosts are not supported (assumes all remote hosts are Linux)
+- macOS script doesn't provide per-core CPU statistics (iostat limitation)
+- Swap usage on macOS always shows 0 (macOS uses compressed memory differently)