feat: add tabbed interface with 5 dedicated views
feat: implement auto-rotate tabs at configurable interval feat: add pause mode for copy/paste operations feat: update memory and swap usage statistics with task summary feat: update network interface statistics with rx/tx rates and ip addresses feat: update disk i/o statistics with iops feat: change color-coded output to color-coded progress bars feat: add -r option for auto-rotate tabs feat: update options section in readme feat: update tabs section in readme feat: update key bindings section in readme feat: update data sources section in readme docs: update readme with new features and options feat: implement tab navigation with arrow keys
This commit is contained in:
parent
0f61b50a76
commit
37fe944e7c
@ -3,6 +3,14 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Version 0.3.0 - 2025-12-13
|
||||||
|
|
||||||
|
The interface now uses tabs to organize information into five different views. You can now automatically rotate between these tabs and pause copy/paste operations.
|
||||||
|
|
||||||
|
**Changes:** 2 files, 261 lines
|
||||||
|
**Languages:** Markdown (261 lines)
|
||||||
|
|
||||||
## Version 0.2.0 - 2025-12-13
|
## Version 0.2.0 - 2025-12-13
|
||||||
|
|
||||||
The rtop tool now includes updated C source code. This improves the tool's functionality and performance.
|
The rtop tool now includes updated C source code. This improves the tool's functionality and performance.
|
||||||
|
|||||||
59
README.md
59
README.md
@ -2,20 +2,22 @@
|
|||||||
|
|
||||||
**Author:** retoor <retoor@molodetz.nl>
|
**Author:** retoor <retoor@molodetz.nl>
|
||||||
|
|
||||||
A terminal-based system monitoring tool written in C that displays comprehensive system statistics in a dynamic, auto-refreshing interface. rtop is designed as a lightweight alternative to htop with no external dependencies beyond the standard C library.
|
A terminal-based system monitoring tool written in C that displays comprehensive system statistics in a tabbed, auto-refreshing interface. rtop is designed as a lightweight alternative to htop with no external dependencies beyond the standard C library.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
- Tabbed interface with 5 dedicated views (CPU, Memory, Network, Disk, Process)
|
||||||
- Real-time system monitoring with configurable refresh interval
|
- Real-time system monitoring with configurable refresh interval
|
||||||
|
- Auto-rotate tabs at configurable interval
|
||||||
|
- Pause mode for copy/paste operations
|
||||||
- Per-core CPU utilization with temperature and frequency display
|
- Per-core CPU utilization with temperature and frequency display
|
||||||
- Memory and swap usage statistics
|
- Memory and swap usage statistics with task summary
|
||||||
- Process listing sorted by CPU or memory usage
|
- Process listing sorted by CPU or memory usage
|
||||||
- Network interface statistics with RX/TX rates
|
- Network interface statistics with RX/TX rates and IP addresses
|
||||||
- Disk I/O statistics
|
- Disk I/O statistics with IOPS
|
||||||
- Filesystem usage information
|
- Filesystem usage information
|
||||||
- Color-coded output for utilization levels
|
- Color-coded progress bars for utilization levels
|
||||||
- Terminal resize handling
|
- Terminal resize handling
|
||||||
- Keyboard controls (q to quit)
|
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
@ -46,6 +48,7 @@ make install # Install to /usr/local/bin (requires root)
|
|||||||
|
|
||||||
Options:
|
Options:
|
||||||
-d, --delay SECS Update interval in seconds (default: 1.0)
|
-d, --delay SECS Update interval in seconds (default: 1.0)
|
||||||
|
-r, --rotate SECS Auto-rotate tabs every SECS seconds (0=off, default: 0)
|
||||||
-s, --sort MODE Sort by: cpu (default), mem
|
-s, --sort MODE Sort by: cpu (default), mem
|
||||||
-h, --help Show help message
|
-h, --help Show help message
|
||||||
-v, --version Show version
|
-v, --version Show version
|
||||||
@ -56,24 +59,30 @@ Options:
|
|||||||
```bash
|
```bash
|
||||||
./rtop # Run with default settings
|
./rtop # Run with default settings
|
||||||
./rtop -d 2 # Update every 2 seconds
|
./rtop -d 2 # Update every 2 seconds
|
||||||
|
./rtop -r 5 # Auto-rotate tabs every 5 seconds
|
||||||
./rtop -s mem # Sort processes by memory usage
|
./rtop -s mem # Sort processes by memory usage
|
||||||
|
./rtop -d 0.5 -r 3 # Fast refresh with 3-second tab rotation
|
||||||
```
|
```
|
||||||
|
|
||||||
## Display Sections
|
## Tabs
|
||||||
|
|
||||||
- **Header**: Hostname, OS version, kernel, uptime, load averages
|
| Tab | Content |
|
||||||
- **CPU**: Per-core utilization, total usage, temperature, frequency
|
|-----|---------|
|
||||||
- **Memory**: RAM and swap usage with buffer/cache information
|
| CPU | Per-core utilization bars, temperature, frequency, total usage |
|
||||||
- **Processes**: Summary counts (running, sleeping, stopped, zombie)
|
| Memory | RAM/Swap usage, buffers/cache, task summary (running, sleeping, stopped, zombie) |
|
||||||
- **Network**: Interface statistics with IP addresses and transfer rates
|
| Network | Interface list with IP addresses, RX/TX rates, total bytes transferred |
|
||||||
- **Disk I/O**: Read/write rates and IOPS per device
|
| Disk | Per-device I/O rates, IOPS, filesystem mount points with usage |
|
||||||
- **Filesystems**: Mount points with usage percentages
|
| Process | Detailed process list with PID, user, CPU%, MEM%, command |
|
||||||
- **Process List**: Detailed per-process information
|
|
||||||
|
|
||||||
## Controls
|
## Controls
|
||||||
|
|
||||||
- `q` or `Q`: Quit the application
|
| Key | Action |
|
||||||
- `Ctrl+C`: Terminate
|
|-----|--------|
|
||||||
|
| Left/Right arrows | Switch between tabs |
|
||||||
|
| 1-5 | Jump directly to tab |
|
||||||
|
| ESC | Pause refresh (for copy/paste) |
|
||||||
|
| q / Q | Quit the application |
|
||||||
|
| Ctrl+C | Terminate |
|
||||||
|
|
||||||
## Technical Details
|
## Technical Details
|
||||||
|
|
||||||
@ -81,19 +90,21 @@ Options:
|
|||||||
|
|
||||||
All system information is read from the Linux `/proc` and `/sys` filesystems:
|
All system information is read from the Linux `/proc` and `/sys` filesystems:
|
||||||
|
|
||||||
- `/proc/stat` - CPU statistics
|
| Source | Information |
|
||||||
- `/proc/meminfo` - Memory information
|
|--------|-------------|
|
||||||
- `/proc/[pid]/stat` - Process information
|
| `/proc/stat` | CPU statistics |
|
||||||
- `/proc/net/dev` - Network statistics
|
| `/proc/meminfo` | Memory information |
|
||||||
- `/proc/diskstats` - Disk I/O statistics
|
| `/proc/[pid]/stat` | Process information |
|
||||||
- `/sys/class/thermal/` - Temperature sensors
|
| `/proc/net/dev` | Network statistics |
|
||||||
|
| `/proc/diskstats` | Disk I/O statistics |
|
||||||
|
| `/sys/class/thermal/` | Temperature sensors |
|
||||||
|
| `/sys/devices/system/cpu/` | CPU frequency |
|
||||||
|
|
||||||
### Performance
|
### Performance
|
||||||
|
|
||||||
- Target CPU usage: <5%
|
- Target CPU usage: <5%
|
||||||
- Startup time: <100ms
|
- Startup time: <100ms
|
||||||
- Memory footprint: <10MB RSS
|
- Memory footprint: <10MB RSS
|
||||||
- Binary size: ~1.2MB
|
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
|
|||||||
202
rtop.md
202
rtop.md
@ -1,202 +0,0 @@
|
|||||||
# Htop Clone System Monitor - C Implementation Specification - rtop
|
|
||||||
|
|
||||||
## Project Overview
|
|
||||||
|
|
||||||
Create a terminal-based system monitoring tool in C that replicates htop's visual interface and functionality. The tool displays comprehensive system statistics in a dynamic, auto-refreshing interface with no external dependencies or interactive actions. The application name will be `rtop`.
|
|
||||||
|
|
||||||
## Core Requirements
|
|
||||||
|
|
||||||
### Language & Constraints
|
|
||||||
- Implementation language: C (C99 or later)
|
|
||||||
- No external library dependencies beyond standard C library
|
|
||||||
- Single binary compilation with no runtime dependencies
|
|
||||||
- Statically linked where possible
|
|
||||||
- Cross-platform Linux support (primary focus: Linux kernel interfaces)
|
|
||||||
|
|
||||||
### Data Sources
|
|
||||||
All system information must be read directly from:
|
|
||||||
- `/proc` filesystem (process information, CPU stats, memory)
|
|
||||||
- `/sys` filesystem (system-wide metrics)
|
|
||||||
- Standard C library system calls (sysconf, getrlimit, etc.)
|
|
||||||
- `/etc` system files (hostname, OS information)
|
|
||||||
|
|
||||||
## Display Requirements
|
|
||||||
|
|
||||||
### Terminal Interface
|
|
||||||
- Auto-refreshing display (configurable interval, default 1-2 seconds)
|
|
||||||
- Full-screen terminal rendering using raw terminal control
|
|
||||||
- Handle terminal resize events gracefully
|
|
||||||
- Color support for visual differentiation
|
|
||||||
- UTF-8 character support for borders and separators
|
|
||||||
|
|
||||||
### Information Categories
|
|
||||||
|
|
||||||
#### System Overview Section
|
|
||||||
- Hostname and kernel version
|
|
||||||
- Uptime (days, hours, minutes)
|
|
||||||
- Current date and time
|
|
||||||
- Load averages (1, 5, 15 minute)
|
|
||||||
- System architecture
|
|
||||||
|
|
||||||
#### CPU Information
|
|
||||||
- Total CPU count and logical cores
|
|
||||||
- Per-core utilization percentages
|
|
||||||
- Aggregate CPU usage
|
|
||||||
- CPU frequency (current, min, max if available)
|
|
||||||
- CPU temperature (if available from thermal zones)
|
|
||||||
- Context switches per second
|
|
||||||
- Interrupts per second
|
|
||||||
|
|
||||||
#### Memory & Swap
|
|
||||||
- Total physical memory
|
|
||||||
- Used and available memory
|
|
||||||
- Memory utilization percentage
|
|
||||||
- Cached and buffered memory
|
|
||||||
- Swap total, used, free
|
|
||||||
- Swap utilization percentage
|
|
||||||
- Page faults and page in/out statistics
|
|
||||||
|
|
||||||
#### Process Statistics
|
|
||||||
- Total process count
|
|
||||||
- Running processes
|
|
||||||
- Sleeping processes
|
|
||||||
- Zombie/defunct processes
|
|
||||||
- Stopped processes
|
|
||||||
|
|
||||||
#### I/O Statistics
|
|
||||||
- Disk read/write operations per second
|
|
||||||
- Disk bytes read/written per second
|
|
||||||
- I/O wait time percentage
|
|
||||||
- Network statistics (if available): bytes in/out, packets
|
|
||||||
|
|
||||||
#### Process Table
|
|
||||||
- Scrollable list of running processes (or top N processes)
|
|
||||||
- Per-process information:
|
|
||||||
- Process ID (PID)
|
|
||||||
- Parent PID (PPID)
|
|
||||||
- User (UID or username)
|
|
||||||
- CPU usage percentage
|
|
||||||
- Memory usage percentage and absolute (RSS)
|
|
||||||
- Virtual memory size (VSZ)
|
|
||||||
- Process state (running, sleeping, zombie, etc.)
|
|
||||||
- Command name and arguments (or executable path)
|
|
||||||
- Thread count
|
|
||||||
- Priority/Nice value
|
|
||||||
|
|
||||||
#### Network Information
|
|
||||||
- Interface names and states
|
|
||||||
- IP addresses (IPv4)
|
|
||||||
- RX/TX bytes and packets
|
|
||||||
- Network errors and dropped packets
|
|
||||||
|
|
||||||
#### Filesystem Statistics
|
|
||||||
- Mount points and filesystems
|
|
||||||
- Total, used, available space per mount
|
|
||||||
- Utilization percentage
|
|
||||||
- Filesystem type
|
|
||||||
|
|
||||||
## Interface Layout
|
|
||||||
|
|
||||||
### Header Section
|
|
||||||
Display system overview with high-level metrics in a compact, scannable format.
|
|
||||||
|
|
||||||
### Metrics Panels
|
|
||||||
Organize information into logical sections:
|
|
||||||
- CPU and thermal metrics
|
|
||||||
- Memory and swap usage
|
|
||||||
- Process counts and states
|
|
||||||
- Network and I/O throughput
|
|
||||||
- Filesystem usage
|
|
||||||
|
|
||||||
### Process List
|
|
||||||
Table format showing top processes by CPU or memory usage, with sortable columns and clear visual hierarchy.
|
|
||||||
|
|
||||||
### Footer
|
|
||||||
Display refresh rate, current timestamp, and interaction hints (if applicable).
|
|
||||||
|
|
||||||
## Rendering Approach
|
|
||||||
|
|
||||||
### Terminal Control
|
|
||||||
- Use standard ANSI escape codes for cursor positioning, colors, and formatting
|
|
||||||
- Implement double-buffering to prevent flicker
|
|
||||||
- Clear and redraw entire screen on each refresh cycle
|
|
||||||
- Handle terminal capabilities detection
|
|
||||||
|
|
||||||
### Performance Considerations
|
|
||||||
- Minimize system calls per refresh cycle
|
|
||||||
- Cache system information that doesn't change frequently
|
|
||||||
- Read `/proc` efficiently (sequential parsing)
|
|
||||||
- Update only changed values in display
|
|
||||||
- Target <5% CPU usage for the monitor itself
|
|
||||||
|
|
||||||
### Color Scheme
|
|
||||||
- Define a readable color palette using standard terminal colors (16-color or 256-color)
|
|
||||||
- Use colors to highlight:
|
|
||||||
- High utilization (red threshold)
|
|
||||||
- Medium utilization (yellow threshold)
|
|
||||||
- Normal ranges (green)
|
|
||||||
- Neutral information (white/default)
|
|
||||||
|
|
||||||
## Configuration & Behavior
|
|
||||||
|
|
||||||
### Default Behavior
|
|
||||||
- Refresh interval: 1-2 seconds (user-adjustable via command-line argument or config)
|
|
||||||
- Start with full system view
|
|
||||||
- Sort processes by CPU usage by default (or memory alternative)
|
|
||||||
- Display processes in descending utilization order
|
|
||||||
|
|
||||||
### Graceful Shutdown
|
|
||||||
- Clean terminal state on exit (restore cursor visibility, reset colors)
|
|
||||||
- Handle SIGINT (Ctrl+C) for clean termination
|
|
||||||
- Restore terminal to pre-execution state
|
|
||||||
|
|
||||||
### Edge Cases
|
|
||||||
- Handle systems with unusual core counts (single-core, high-core systems)
|
|
||||||
- Support systems with limited `/proc` filesystem features
|
|
||||||
- Gracefully degrade missing data sources
|
|
||||||
- Handle rapid terminal resizing without crashing
|
|
||||||
|
|
||||||
## Data Update Strategy
|
|
||||||
|
|
||||||
### Sampling Approach
|
|
||||||
- Read all system metrics at regular intervals (matching refresh rate)
|
|
||||||
- Calculate deltas for rate-based metrics (I/O operations, network traffic)
|
|
||||||
- Maintain rolling history for trend calculation if needed
|
|
||||||
|
|
||||||
### Metric Calculation
|
|
||||||
- CPU usage: derived from `/proc/stat` (user, system, idle times)
|
|
||||||
- Memory: from `/proc/meminfo`
|
|
||||||
- Process metrics: from `/proc/[pid]/stat`, `/proc/[pid]/status`
|
|
||||||
- I/O: from `/proc/diskstats` and `/proc/net/dev`
|
|
||||||
|
|
||||||
## Compilation & Deployment
|
|
||||||
|
|
||||||
### Build Requirements
|
|
||||||
- Standard C compiler (gcc, clang)
|
|
||||||
- Produces single static binary (or minimal dynamic linking)
|
|
||||||
- No configuration files required at runtime
|
|
||||||
- No installation script needed
|
|
||||||
|
|
||||||
### Binary Size & Performance
|
|
||||||
- Target executable size: <2MB
|
|
||||||
- Startup time: <100ms
|
|
||||||
- Refresh cycle: <100ms per iteration
|
|
||||||
- Memory footprint: <10MB RSS during operation
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
The tool should be self-documenting through:
|
|
||||||
- Clear, logical screen layout
|
|
||||||
- Labeled sections and columns
|
|
||||||
- Metric units displayed inline
|
|
||||||
- Help text on startup or in footer
|
|
||||||
|
|
||||||
## Success Criteria
|
|
||||||
|
|
||||||
- Displays 20+ distinct system metrics simultaneously
|
|
||||||
- Updates smoothly at regular intervals
|
|
||||||
- Survives 1+ hour continuous operation without memory leaks
|
|
||||||
- Responsive to terminal size changes
|
|
||||||
- No dependencies beyond libc
|
|
||||||
- Compiles cleanly with `-Wall -Wextra -std=c99`
|
|
||||||
- Provides useful system overview at a glance comparable to htop
|
|
||||||
Loading…
Reference in New Issue
Block a user