Cross-platform system monitor with TUI, web dashboard, and remote monitoring
Project description
Raven 🐦⬛
A system monitor that works on Linux, BSD, macOS, and Windows.
🌟 Key Features
- ⚡ Gorgeous Dashboards:
- TUI Dashboard: Built with Textual, offering smooth animations, color themes, real-time widgets, and flicker-free updates.
- Web Dashboard: An elegant web UI powered by FastAPI and Vanilla HTML/CSS/JS. Features premium loading shimmers, connection status toasts, and dynamic charts.
- 🐦⬛ Neofetch-style Fetch: A quick terminal command to fetch system hardware specs, platform info, and resources.
- 🔒 Remote Monitoring: Run a secure agent on a remote server with timing-attack resistant API key authentication, and visualize its metrics locally.
- 🔌 Extensible Plugins: Easily write your own metrics collectors by inheriting from MonitorPlugin.
- 📈 High Performance: Metrics are queried in parallel via thread pools, with smart caching and lightweight process queries to minimize CPU overhead.
- 📥 Multi-format Exporting: Print metrics directly to your terminal or save them as CSV, JSON, or plaintext.
🛠 Project Structure
Raven is structured cleanly to separate collection logic, plugins, and frontends:
- raven/cli.py: CLI routing and argument definitions.
- raven/config.py: TOML configuration schemas and verification logic.
- raven/core/: Central coordinator containing the collector agent, type definitions, and standard protocol interfaces.
- raven/plugins/: Discovered monitoring plugins (CPU, Memory, Disk, Containers, Network, Sensors, Processes, etc.).
- raven/tui/: Textual terminal widgets and layout CSS stylesheets (
.tcss). - raven/web/: FastAPI backend and static web dashboard assets.
- raven/remote/: Server agent and client tools for remote metric sync.
- raven/export/: Formatted data exporters.
🚀 Getting Started
1. Prerequisites
- Python 3.11+
uv(recommended) orpip
2. Installation & Setup
To install dependencies and prepare the environment:
# Clone the repository
git clone https://github.com/salvatorecorvaglia/raven.git
cd raven
# Sync virtual environment and download dependencies
uv sync --all-extras --dev
💻 Usage & CLI Guide
Raven offers a simple command-line structure routed through raven/cli.py:
1. Start the TUI (Default)
Run Raven with no arguments to launch the Textual TUI dashboard:
uv run raven
2. Start the Web Dashboard
Expose a web-based dashboard utilizing FastAPI:
uv run raven web
# Options:
# --host Hostname to bind to (e.g. 127.0.0.1)
# --port Port to run server on (e.g. 8080)
3. Start a Remote Monitoring Agent
To monitor a remote server, run the daemon agent on the remote host:
uv run raven serve --host 127.0.0.1 --port 9090
4. Connect to a Remote Agent
You can direct your TUI, Web server, or exporters to read metrics from a running remote agent:
uv run raven --remote http://192.168.1.50:9090
5. Fetch a Quick System Summary
Get a quick neofetch-style output of your server specifications:
uv run raven fetch
6. Export Metrics to Stdout
Print system details to the terminal in JSON, CSV, or formatted text:
# Print all modules once as text
uv run raven print
# Print specific modules formatted as JSON
uv run raven print cpu memory --format json
⚙️ Configuration
Raven searches for settings in the following order:
--config/-cCLI option../raven.tomlin the current working directory.~/.config/raven/raven.toml.- Fall back to internal defaults.
Refer to raven.example.toml for customising ports, intervals, enabled modules, and security parameters:
[general]
refresh_interval = 2 # seconds between updates
theme = "dark"
[modules]
cpu = true
memory = true
disk = true
network = true
processes = true
users = true
sensors = true
containers = true
[web]
enabled = false
host = "127.0.0.1"
port = 8080
api_key = "" # Empty = no authentication
[remote]
enabled = false
host = "127.0.0.1"
port = 9090
api_key = ""
🔌 Creating Custom Plugins
All metrics collection modules are structured as plugins. To add your own custom collector:
- Create a Python file under the raven/plugins/ directory.
- Subclass MonitorPlugin and implement the abstract methods:
from raven.plugins.base import MonitorPlugin
class CustomMetricsPlugin(MonitorPlugin):
name = "my_custom_metrics"
category = "general"
def is_available(self) -> bool:
# Check system compatibility or dependencies here
return True
def collect(self) -> dict:
# Collect and return your metrics
return {
"custom_metric_1": 42,
"status": "online"
}
- Enable or customize your module inside your
raven.tomlunder the[modules]header.
🧪 Testing & Development
We use pytest for automated test suites. Before submitting pull requests, run:
# Run the test suite
uv run pytest
# Check code formatting & lint issues
uv run ruff check
# Apply formatting
uv run ruff format
🤝 Contributing
Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
🔐 Security
If you discover a security vulnerability, please see our Security Policy.
📝 License
Distributed under the MIT License. See LICENSE for more information.
Author: Salvatore Corvaglia
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file raven_monitor-0.1.0.tar.gz.
File metadata
- Download URL: raven_monitor-0.1.0.tar.gz
- Upload date:
- Size: 54.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
98231cad24d87cd9edd5cac0287d049dbcc5a698cf5fe1a63b5960520455c4e3
|
|
| MD5 |
18550adcaf58ca98b4d01bbb1d8002e8
|
|
| BLAKE2b-256 |
ef08208e9061d6cdccb4fd9abd6926979eff76ef1e2e0e6a7862b51e24101637
|
File details
Details for the file raven_monitor-0.1.0-py3-none-any.whl.
File metadata
- Download URL: raven_monitor-0.1.0-py3-none-any.whl
- Upload date:
- Size: 60.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87b8b30e6ed06c669d87f064eae72539fea10c32e4b044d76e437ef6af06d9f0
|
|
| MD5 |
831868cde00692b6350f0979f869fa71
|
|
| BLAKE2b-256 |
a688e6026451176da313641268d71de42207596042438bd94900112b6f27f63c
|