SystemPulse
SystemPulse is a lightweight cross-platform system monitoring and observability CLI for Windows, macOS, and Linux. It combines a Rich terminal dashboard with configurable alerts, local SQLite history, CSV export, and an optional Prometheus endpoint—without requiring a background daemon or web application.
Use it for an immediate view of host health, a live terminal dashboard, local metric history, or a small Prometheus target on a workstation or server.
Dashboard
The existing capture accurately represents the core dashboard layout. It predates the current
active-alert panel, so a present-day systempulse live session includes an additional Alerts
section. See docs/demo.md for a safe, reproducible demo-capture workflow.
Quick start
SystemPulse is not yet published to PyPI. Install the current project from source:
git clone https://github.com/guptaoni891-ctrl/systempulse.git
cd systempulse
python -m pip install -e .
Then open the menu, live dashboard, or a one-time snapshot:
systempulse
systempulse live
systempulse snapshot
Install the optional exporter dependencies from the source checkout when Prometheus support is needed:
python -m pip install -e ".[prometheus]"
systempulse serve
After a future PyPI release, installation will become:
pip install systempulse
pip install "systempulse[prometheus]" # only when exporter support is needed
These PyPI commands are release instructions, not a claim that version 2.0 is currently published. For virtual-environment setup on each platform, see Installation from source.
Features
- CPU, memory, system-disk, and network monitoring.
- Network totals since boot and upload/download rate calculation.
- CPU temperature when the operating system exposes a usable sensor through
psutil. - Top CPU-consuming processes.
- NVIDIA GPU usage, temperature, VRAM, and optional power through
nvidia-smi. - Multiple NVIDIA GPUs represented independently in snapshots, alerts, history, and Prometheus.
- Rich one-shot and live terminal views with configurable status thresholds.
- Stateful alerts with duration, hysteresis, cooldown, escalation, and recovery transitions.
- Transactional SQLite snapshot, GPU, and durable alert-event history with retention.
- CSV snapshot logging and custom output paths.
- Optional scrape-decoupled Prometheus exporter.
- Typed, validated JSON configuration with OS-specific config and data locations.
- Python 3.11–3.13 support with cross-platform CI, static typing, and enforced branch coverage.
Platform support
| Platform | Core metrics | CPU temperature | NVIDIA GPU |
|---|---|---|---|
| Windows 10/11 | Supported | Available only when exposed through psutil |
Requires nvidia-smi |
| macOS | Supported | Often unavailable through psutil |
Generally unavailable on modern Macs |
| Linux | Supported | Commonly available when supported sensors are exposed | Requires nvidia-smi |
Missing sensors or GPU tooling are reported as unavailable; they do not prevent core monitoring.
Use --no-gpu to skip NVIDIA detection explicitly.
CLI reference
Global options must appear before the command:
--config PATH use an explicit JSON configuration
--no-gpu skip NVIDIA GPU collection
--version print the installed version
Monitor the host
| Command | Purpose |
|---|---|
systempulse |
Open the interactive menu. |
systempulse menu |
Open the same menu explicitly. |
systempulse live |
Run the continuously updating dashboard until interrupted. |
systempulse snapshot |
Render one authoritative system snapshot. |
systempulse processes --limit 10 |
Show processes sorted by sampled CPU usage. |
systempulse network |
Show cumulative sent/received counters since boot. |
systempulse network --speed |
Measure current upload and download rates. |
systempulse --no-gpu snapshot |
Collect a snapshot without running nvidia-smi. |
The installed module entry point is equivalent, for example python -m systempulse snapshot.
Alerts and history
| Command | Purpose |
|---|---|
systempulse alerts |
Show configured alert rules and the runtime-state limitation. |
systempulse alerts --history --limit 20 |
Show recent durable alert transitions. |
systempulse history --limit 10 |
Show a history summary and recent samples. |
systempulse history --hours 24 --limit 20 |
Restrict history to recent hours. |
systempulse history --days 7 |
Restrict history to recent days. |
--hours and --days are mutually exclusive. Active alerts exist only in the live process; durable
transition history is stored separately in SQLite. See docs/alerts.md and
docs/history.md.
Save and export
| Command | Purpose |
|---|---|
systempulse save |
Append one sampled reading to the configured CSV file. |
systempulse save --output logs/readings.csv |
Override the CSV destination. |
systempulse serve |
Serve current metrics at 127.0.0.1:9100/metrics. |
systempulse serve --host 0.0.0.0 --port 9200 --interval 2 |
Override exporter binding and sampling interval. |
Prometheus support requires the prometheus extra. Binding beyond 127.0.0.1 exposes host metrics
to reachable clients and should be an explicit decision. See
docs/prometheus.md.
Inspect and update configuration
| Command | Purpose |
|---|---|
systempulse show-config |
Print the effective configuration; legacy alias for config show. |
systempulse config show |
Print the effective validated configuration. |
systempulse config path |
Print the selected or default user config path. |
systempulse config init |
Create a complete user configuration without replacing an existing file. |
systempulse config init --force |
Replace the target configuration intentionally. |
systempulse config set cpu.warning 70 |
Validate and update one supported setting. |
systempulse --config custom.json config show |
Use an explicit configuration path. |
Configuration precedence, every supported key, and a complete valid example are documented in docs/configuration.md.
Architecture
flowchart TD
C[System collectors] --> S[MonitorService]
S --> SS[Authoritative SystemSnapshot]
SS --> UI[Rich terminal UI]
SS --> A[AlertEngine]
SS --> CSV[CSV logger]
SS --> H[SQLite history]
A --> AE[Alert transition events]
AE --> H
ES[Exporter sampling loop] --> S
SS --> LS[Lock-protected latest state]
LS --> PE[Prometheus collector]
PS[Prometheus scrape] --> PE
Collectors gather raw host data. MonitorService combines it into one immutable, UTC-stamped
SystemSnapshot; presentation and persistence components consume that snapshot rather than
collecting independently. AlertEngine evaluates state transitions but never polls hardware.
The exporter has its own monotonic sampling loop that updates lock-protected latest state.
Prometheus scrapes read that state and never call MonitorService, psutil, or nvidia-smi.
SQLite is a separate sink and does not feed Prometheus. See
docs/architecture.md for module boundaries and design guarantees.
Installation from source
SystemPulse requires Python 3.11, 3.12, or 3.13.
Windows PowerShell
git clone https://github.com/guptaoni891-ctrl/systempulse.git
cd systempulse
py -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
Linux and macOS
git clone https://github.com/guptaoni891-ctrl/systempulse.git
cd systempulse
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
The dev extra includes the optional Prometheus dependency so the complete test suite can exercise
both normal exporter behavior and missing-dependency behavior. Runtime users can install . or
.[prometheus] instead.
Documentation
- Configuration
- Alerts
- SQLite history
- Prometheus exporter
- Architecture
- Development and CI
- Demo capture
- Contributing
- Security policy
- Changelog
Engineering quality
The repository enforces branch coverage at 90% and currently maintains more than 90% coverage. CI separates quality checks, the supported Python/OS test matrix, and clean package validation. Local commands are documented in docs/development.md.
Important boundaries include immutable authoritative snapshots, monotonic interval scheduling, timezone-aware UTC persistence, transactional SQLite writes, bounded Prometheus labels, optional exporter dependencies, and no scrape-triggered hardware collection.
License
SystemPulse is available under the MIT License.
Metadata
Release files for systempulse 2.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| systempulse-2.0.0.tar.gz | 145.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| systempulse-2.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 183.9 kB
Release files / systempulse-2.0.0.tar.gz
| Download URL | systempulse-2.0.0.tar.gz |
|---|---|
| Size | 145.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d383bb3fda7a05353268d19a5be83a476269b7df27990eba8303738af7995a41
|
|
BLAKE2b-256 checksum How to use checksums |
8218ca2b247a2b57abd7348f75bc1b3ee7ee5e0b5165d3c2ca5266f17d77e0c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency logRelease files / systempulse-2.0.0-py3-none-any.whl
| Download URL | systempulse-2.0.0-py3-none-any.whl |
|---|---|
| Size | 38.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bdca38df5abe1eafa06d523a34d1f5dd8dcc9d0d1681d7b846987698ce4d5f1f
|
|
BLAKE2b-256 checksum How to use checksums |
b3472aae9e21fdf8dff691559474d08b00dfad0bfa1bd8c367c4bfdcfa12f1b2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 28, 2026.
Transparency log