first commit
This commit is contained in:
248
README.md
Normal file
248
README.md
Normal file
@@ -0,0 +1,248 @@
|
||||
Note: The TUI is more complete and functional than the GUI
|
||||
|
||||
# Process Monitor
|
||||
|
||||
A comprehensive system and process monitoring application written in Rust with both Terminal UI (TUI) and Graphical UI (GUI) interfaces.
|
||||
|
||||
## Features
|
||||
|
||||
### System Monitoring
|
||||
- **CPU Monitoring**
|
||||
- Overall CPU usage percentage
|
||||
- Per-core CPU usage with visualization
|
||||
- CPU temperature tracking
|
||||
- CPU frequency monitoring
|
||||
|
||||
- **Memory Monitoring**
|
||||
- Total, used, and available memory
|
||||
- Swap memory usage
|
||||
- Per-process memory consumption
|
||||
|
||||
- **GPU Monitoring**
|
||||
- GPU usage percentage
|
||||
- VRAM usage
|
||||
- GPU temperature
|
||||
- Support for AMD GPUs (via sysfs)
|
||||
|
||||
- **Network Monitoring**
|
||||
- Per-interface network statistics
|
||||
- Bytes sent/received
|
||||
- Packets sent/received
|
||||
- Error tracking
|
||||
|
||||
- **Disk I/O Monitoring**
|
||||
- Read/write operations per device
|
||||
- Bytes read/written
|
||||
- Per-process disk I/O tracking
|
||||
|
||||
- **USB Monitoring**
|
||||
- Connected USB device detection
|
||||
- Device identification (vendor/product IDs)
|
||||
|
||||
### Process Monitoring
|
||||
- Real-time process listing
|
||||
- Process owner (user) tracking
|
||||
- Per-process statistics:
|
||||
- CPU usage
|
||||
- Memory usage (RSS and virtual)
|
||||
- Disk I/O (read/write bytes)
|
||||
- Thread count
|
||||
- Process status
|
||||
- Runtime duration
|
||||
|
||||
### Misbehavior Detection
|
||||
Automatic detection of misbehaving applications based on configurable rules:
|
||||
|
||||
- **High CPU Usage**: Alerts when processes exceed CPU thresholds
|
||||
- **Memory Leaks**: Detects processes with excessive memory consumption
|
||||
- **Excessive Disk I/O**: Identifies processes with high disk activity
|
||||
- **Zombie Processes**: Flags processes in zombie state
|
||||
- **Network I/O**: Monitors excessive network usage
|
||||
|
||||
Default alert levels:
|
||||
- **Critical**: Immediate attention required (>95% CPU, >8GB RAM)
|
||||
- **Warning**: Potential issues (>80% CPU for 60s, >2GB RAM for 30s)
|
||||
- **Info**: Informational alerts
|
||||
|
||||
## Architecture
|
||||
|
||||
The project is organized as a Cargo workspace with three crates:
|
||||
|
||||
```
|
||||
procmon/
|
||||
├── procmon-core/ # Core monitoring library
|
||||
│ ├── monitor.rs # System monitoring implementation
|
||||
│ ├── metrics.rs # Metric data structures
|
||||
│ ├── process.rs # Process information types
|
||||
│ └── detector.rs # Misbehavior detection logic
|
||||
├── procmon-tui/ # Terminal UI application
|
||||
│ ├── main.rs # TUI entry point
|
||||
│ ├── app.rs # Application state
|
||||
│ └── ui.rs # Rendering logic
|
||||
└── procmon-gui/ # Graphical UI application
|
||||
└── main.rs # GUI application with egui
|
||||
```
|
||||
|
||||
## Building
|
||||
|
||||
### Prerequisites
|
||||
- Rust 1.70 or later
|
||||
- Linux (designed for Linux systems)
|
||||
|
||||
### Build Commands
|
||||
|
||||
Build all components:
|
||||
```bash
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
Build individual components:
|
||||
```bash
|
||||
cargo build --release -p procmon-tui
|
||||
cargo build --release -p procmon-gui
|
||||
```
|
||||
|
||||
## Running
|
||||
|
||||
### Terminal UI (TUI)
|
||||
```bash
|
||||
cargo run --release -p procmon-tui
|
||||
```
|
||||
|
||||
### Graphical UI (GUI)
|
||||
```bash
|
||||
cargo run --release -p procmon-gui
|
||||
```
|
||||
|
||||
## TUI Controls
|
||||
|
||||
- **q** or **Ctrl+C**: Quit application
|
||||
- **Tab**: Next tab
|
||||
- **Shift+Tab**: Previous tab
|
||||
- **1-4**: Jump to specific tab (Dashboard, Processes, Network, Alerts)
|
||||
- **↑/↓**: Navigate process list
|
||||
- **s**: Change sort column
|
||||
- **a**: Toggle sort order (ascending/descending)
|
||||
- **f**: Toggle filter for misbehaving processes
|
||||
|
||||
## TUI Tabs
|
||||
|
||||
1. **Dashboard**: System overview with CPU, memory, temperature, and top processes
|
||||
2. **Processes**: Detailed process list with sorting and filtering
|
||||
3. **Network**: Network interfaces and disk I/O statistics
|
||||
4. **Alerts**: Real-time misbehavior alerts
|
||||
|
||||
## GUI Features
|
||||
|
||||
The GUI provides an alternative interface with the same monitoring capabilities:
|
||||
|
||||
- **Dashboard Tab**: Visual system overview with graphs and gauges
|
||||
- **Processes Tab**: Sortable process table
|
||||
- **Network & I/O Tab**: Network interfaces and disk statistics
|
||||
- **Alerts Tab**: Color-coded alert list
|
||||
|
||||
## Dependencies
|
||||
|
||||
### Core Monitoring
|
||||
- `sysinfo`: Cross-platform system information
|
||||
- `procfs`: Linux /proc filesystem parsing
|
||||
- `nix`: Unix system APIs
|
||||
|
||||
### TUI
|
||||
- `ratatui`: Terminal UI framework
|
||||
- `crossterm`: Terminal manipulation
|
||||
|
||||
### GUI
|
||||
- `egui`: Immediate mode GUI framework
|
||||
- `eframe`: egui application framework
|
||||
|
||||
### Common
|
||||
- `tokio`: Async runtime
|
||||
- `serde`: Serialization
|
||||
- `chrono`: Date/time handling
|
||||
- `tracing`: Logging
|
||||
|
||||
## Platform Support
|
||||
|
||||
Currently optimized for **Linux**. The application reads from:
|
||||
- `/proc/` filesystem for process information
|
||||
- `/sys/class/thermal/` for CPU temperature
|
||||
- `/sys/class/drm/` for GPU information
|
||||
- `/sys/bus/usb/devices/` for USB devices
|
||||
- `/proc/diskstats` for disk I/O
|
||||
- `/etc/passwd` for user information
|
||||
|
||||
## Customizing Misbehavior Rules
|
||||
|
||||
The misbehavior detector can be customized by modifying `procmon-core/src/detector.rs`. Default rules include:
|
||||
|
||||
```rust
|
||||
MisbehaviorRule {
|
||||
name: "High CPU Usage",
|
||||
description: "Process using more than 80% CPU for extended period",
|
||||
condition: MisbehaviorCondition::CpuUsageAbove {
|
||||
threshold: 80.0,
|
||||
duration_secs: 60,
|
||||
},
|
||||
severity: Severity::Warning,
|
||||
}
|
||||
```
|
||||
|
||||
## Performance
|
||||
|
||||
- Updates every 1 second by default
|
||||
- Minimal CPU overhead (typically <1% on modern systems)
|
||||
- Efficient memory usage with bounded alert history (last 100 alerts)
|
||||
|
||||
## Permissions
|
||||
|
||||
Some features may require elevated permissions:
|
||||
- Reading certain `/proc` entries may require root access
|
||||
- Hardware sensor data may need appropriate permissions
|
||||
|
||||
Run with sudo if you encounter permission errors:
|
||||
```bash
|
||||
sudo cargo run --release -p procmon-tui
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT OR Apache-2.0
|
||||
|
||||
## Contributing
|
||||
|
||||
Contributions are welcome! Areas for improvement:
|
||||
- NVIDIA GPU support (via NVML)
|
||||
- macOS and Windows support
|
||||
- Per-process network I/O tracking
|
||||
- Historical data graphing
|
||||
- Configuration file support
|
||||
- Export monitoring data to formats (CSV, JSON)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### No GPU detected
|
||||
- Ensure GPU drivers are installed
|
||||
- Check `/sys/class/drm/` exists and is accessible
|
||||
- AMD GPUs are currently better supported than NVIDIA
|
||||
|
||||
### No temperature readings
|
||||
- Install `lm-sensors` package
|
||||
- Run `sensors-detect` to configure thermal sensors
|
||||
- Check `/sys/class/thermal/` permissions
|
||||
|
||||
### Inaccurate network stats
|
||||
- Network statistics are cumulative since boot
|
||||
- Ensure proper permissions to read network interface data
|
||||
|
||||
## Technical Notes
|
||||
|
||||
### CPU Usage Calculation
|
||||
CPU usage is calculated by the `sysinfo` crate using process CPU time divided by elapsed time.
|
||||
|
||||
### Memory Values
|
||||
- RSS (Resident Set Size): Physical memory used
|
||||
- Virtual Memory: Total virtual address space
|
||||
|
||||
### Disk I/O
|
||||
Disk I/O statistics are read from `/proc/diskstats` and represent cumulative values since boot.
|
||||
Reference in New Issue
Block a user