Skip to main content

Cross-platform system stats made easy

Project description

statz

PyPI - Downloads PyPI Version License GitHub issues Last Commit

statz is a cross-platform Python package that fetches real-time system usage and hardware specs โ€” all wrapped in a simple, clean API.

Works on macOS, Linux, and Windows, and handles OS-specific madness under the hood so you donโ€™t have to.

statz logo

โœจ Features

  • ๐Ÿ“Š Get real-time CPU, RAM, and disk usage
  • ๐Ÿ’ป Fetch detailed system specifications (CPU, RAM, OS, etc.)
  • ๐Ÿ Run comprehensive performance benchmarks (CPU, memory, disk)
  • ๐Ÿ“‹ Beautiful table output with Rich formatting
  • ๐Ÿ“Š CSV export for all data types (specs, usage, processes, benchmarks)
  • ๐Ÿฅ System health scoring and monitoring
  • ๐ŸŒก๏ธ Temperature sensor readings (when available)
  • ๐Ÿ“ˆ Top process monitoring with filtering options
  • ๐Ÿง  Automatically handles platform-specific logic
  • ๐Ÿงผ Super clean API โ€” just a few functions, no fluff

๐Ÿ“ฆ Installation

pip install statz

๐Ÿ’ป CLI Usage

statz comes with a powerful command-line interface that lets you get system information right from your terminal.

Basic Usage

# Get all system specs
statz --specs

# Get all system usage
statz --usage

# Get top processes
statz --processes

# Get temperature readings
statz --temp

# Get system health score
statz --health

# Run system performance benchmarks
statz --benchmark

# Check version
statz --version

# Launch live dashboard
statz --dashboard

Live Dashboard

The live dashboard provides real-time monitoring of your system with an interactive interface:

# Launch the dashboard
statz --dashboard

The dashboard displays:

  • ๐Ÿ“Š Real-time CPU usage per core
  • ๐Ÿง  Memory usage and availability
  • ๐Ÿ’พ Disk I/O speeds
  • ๐ŸŒ Network upload/download speeds
  • ๐Ÿ”‹ Battery status (if available)
  • ๐ŸŒก๏ธ Temperature readings (if available)

Press Ctrl+C to exit the dashboard.


### Component-Specific Information

You can get information for specific components using these flags:

```bash
# Individual components
statz --specs --cpu        # CPU specifications
statz --specs --ram        # RAM information
statz --specs --disk       # Disk/storage info
statz --specs --gpu        # GPU information (Windows only)
statz --specs --network    # Network adapter info
statz --specs --battery    # Battery information
statz --specs --os         # Operating system info

# Component benchmarks
statz --benchmark --cpu    # CPU performance benchmark
statz --benchmark --ram    # Memory performance benchmark
statz --benchmark --disk   # Disk performance benchmark

# Combine multiple components
statz --specs --cpu --ram --disk
statz --usage --cpu --ram --network
statz --benchmark --cpu --ram --disk

Process Monitoring

# Get top 5 processes by CPU usage (default)
statz --processes

# Get top 10 processes by CPU usage
statz --processes --process-count 10

# Get top 5 processes by memory usage
statz --processes --process-type mem

# Get top 15 processes by memory usage
statz --processes --process-count 15 --process-type mem

Output Formats

# JSON output
statz --specs --json
statz --usage --cpu --ram --json

# Table output (formatted tables)
statz --specs --table
statz --usage --cpu --ram --table
statz --processes --table
statz --benchmark --table

# CSV export
statz --specs --csv
statz --usage --csv
statz --processes --csv
statz --benchmark --csv

# Export to JSON file
statz --specs --out
statz --usage --processes --out

Available Flags

Flag Description
--specs Get system specifications
--usage Get real-time system usage
--processes Get top processes information
--temp Get temperature readings
--health Get system health score
--benchmark Run system performance benchmarks
--dashboard Launch live monitoring dashboard
--version Show statz version
--os Operating system information
--cpu CPU information
--gpu GPU information (Windows only)
--ram RAM/memory information
--disk Disk/storage information
--network Network adapter information
--battery Battery information
--json Output in JSON format
--table Output in formatted table format
--csv Export to CSV file
--out Export to JSON file
--process-count N Number of processes to show (default: 5)
--process-type {cpu,mem} Sort processes by CPU or memory usage

Examples

# Get CPU and RAM specs in JSON format
statz --specs --cpu --ram --json

# Get CPU and RAM specs in table format
statz --specs --cpu --ram --table

# Monitor top 10 memory-intensive processes
statz --processes --process-count 10 --process-type mem

# Export all usage data to CSV
statz --usage --csv

# Export system specs to JSON file
statz --specs --out

# Get system temperatures and CPU usage in table format
statz --temp --usage --cpu --table

# Run comprehensive system benchmark
statz --benchmark

# Run specific component benchmarks
statz --benchmark --cpu --ram

# Get complete system overview
statz --specs --usage --processes --temp

# Get system health score
statz --health

# Check system health with other components in table format
statz --specs --health --cpu --ram --table

# Export benchmark results to CSV
statz --benchmark --csv

# Launch interactive dashboard for real-time monitoring
statz --dashboard

๐Ÿ”— Links

PyPi Project ๐Ÿ

Github Repository ๐Ÿง‘โ€๐Ÿ’ป

๐Ÿ“œ Script Usage

statz provides a clean Python API for accessing system information programmatically. Here are examples of all available functions:

Basic System Information

import statz.stats as stats

# Get complete system specifications
specs = stats.get_system_specs()
print(specs)

# Get selective system specifications (improves performance)
specs = stats.get_system_specs(
    get_os=True,     # Operating system info
    get_cpu=True,    # CPU specifications
    get_gpu=False,   # GPU info (Windows only)
    get_ram=True,    # RAM specifications
    get_disk=True,   # Disk/storage info
    get_network=False, # Network adapters (Windows only)
    get_battery=False  # Battery info (Windows only)
)

Real-Time Usage Data

# Get all hardware usage data
usage = stats.get_hardware_usage()
print(usage)

# Get selective usage data (improves performance)
usage = stats.get_hardware_usage(
    get_cpu=True,     # CPU usage per core
    get_ram=True,     # Memory usage stats
    get_disk=True,    # Disk I/O speeds
    get_network=False, # Network speeds
    get_battery=True   # Battery status
)

Temperature Monitoring

import statz.temp as temp

# Get system temperature readings
temps = temp.get_system_temps()
print(temps)

# Returns platform-specific temperature data:
# macOS: {"CPU": 45.2, "GPU": 38.5}
# Linux: {"coretemp-isa-0000": 42.0, "acpi-0": 35.5}
# Windows: {"ThermalZone _TZ.TZ00": 41.3}

Process Monitoring

# Get top 5 processes by CPU usage (default)
top_processes = stats.get_top_n_processes()
print(top_processes)

# Get top 10 processes by CPU usage
top_cpu = stats.get_top_n_processes(n=10, type="cpu")

# Get top 15 processes by memory usage
top_memory = stats.get_top_n_processes(n=15, type="mem")

# Returns: [{"pid": 1234, "name": "chrome", "usage": 15.2}, ...]

System Health Score

import statz.health as health

# Get simple health score (0-100)
health_score = health.system_health_score()
print(f"System Health: {health_score}/100")

# Get detailed health breakdown
health_details = health.system_health_score(cliVersion=True)
print(health_details)
# Returns: {
#   "cpu": 85.2,
#   "memory": 76.8,
#   "disk": 64.1,
#   "temperature": 70.5,
#   "battery": 100.0,
#   "total": 78.4
# }

Performance Benchmarking

import statz.benchmark as benchmark

# Run CPU performance benchmark
cpu_bench = benchmark.cpu_benchmark()
print(cpu_bench)
# Returns: {"execution_time": 0.025, "fibonacci_10000th": "...", "prime_count": 1229, "score": 750.2}

# Run memory performance benchmark
mem_bench = benchmark.mem_benchmark()
print(mem_bench)
# Returns: {"execution_time": 0.15, "sum_calculated": 999999000000, "score": 666.7}

# Run disk performance benchmark
disk_bench = benchmark.disk_benchmark()
print(disk_bench)
# Returns: {"write_speed": 450.2, "read_speed": 380.1, "write_score": 450.2, "read_score": 380.1, "overall_score": 415.15}

Data Export & File Operations

import statz.file as file

# Export any function's output to a JSON file
file.export_into_file(stats.get_system_specs)
file.export_into_file(stats.get_hardware_usage)
file.export_into_file(lambda: health.system_health_score(cliVersion=True))

# Export to CSV format
file.export_into_file(stats.get_system_specs, csv=True)
file.export_into_file(stats.get_hardware_usage, csv=True)
file.export_into_file(stats.get_top_n_processes, csv=True)

# Export with function parameters
file.export_into_file(stats.get_top_n_processes, csv=True, params=(True, [10, "cpu"]))
file.export_into_file(benchmark.cpu_benchmark, csv=False)

# Files are saved as: statz_export_YYYY-MM-DD_HH-MM-SS.json or .csv

File Comparison

import statz.file as file

# Compare two system spec files to see what changed
differences = file.compare(
    "statz_export_2025-01-23_10-30-15.json",  # Current specs
    "statz_export_2025-01-20_10-30-15.csv"    # Baseline specs
)

print(differences)
# Returns: {
#   "added": {"GPU.newProperty": "new_value"},
#   "removed": {"CPU.oldProperty": "old_value"}, 
#   "changed": {"RAM.capacity": {"from": "8192", "to": "16384"}},
#   "summary": {
#     "total_added": 1,
#     "total_removed": 1, 
#     "total_changed": 1,
#     "current_file": "statz_export_2025-01-23_10-30-15.json",
#     "baseline_file": "statz_export_2025-01-20_10-30-15.csv"
#   }
# }

# Supports cross-format comparison (JSON vs CSV, CSV vs JSON)
json_vs_csv = file.compare("specs.json", "baseline.csv")
csv_vs_json = file.compare("current.csv", "baseline.json")

Platform-Specific Notes

import platform
import statz.stats as stats

# Check current platform
current_os = platform.system()

if current_os == "Windows":
    # Windows supports all features including GPU, network, and battery specs
    specs = stats.get_system_specs(get_gpu=True, get_network=True, get_battery=True)
    
elif current_os in ["Darwin", "Linux"]:  # macOS or Linux
    # macOS/Linux don't support GPU, network, or battery specs
    specs = stats.get_system_specs(get_gpu=False, get_network=False, get_battery=False)

Error Handling

import statz.stats as stats
import statz.temp as temp
import statz.benchmark as benchmark
import statz.health as health
import statz.file as file

try:
    # System information functions
    specs = stats.get_system_specs()
    usage = stats.get_hardware_usage()
    temps = temp.get_system_temps()
    processes = stats.get_top_n_processes()
    health_score = health.system_health_score()
    
    # Performance benchmarks
    cpu_bench = benchmark.cpu_benchmark()
    mem_bench = benchmark.mem_benchmark()
    disk_bench = benchmark.disk_benchmark()
    
    # File operations
    file.export_into_file(stats.get_system_specs, csv=True)
    differences = file.compare("current.json", "baseline.csv")
    
except OSError as e:
    print(f"Unsupported operating system: {e}")
except Exception as e:
    print(f"Error getting system information: {e}")

๐Ÿ“ Changelog

v2.1.0 โ€“ Major Improvements and File Management

โœจ New Features

  • ๐Ÿ•› Top Process Monitoring in Dashboard - The live dashboard now displays real-time top CPU and memory processes alongside system usage metrics
  • ๐Ÿ” File Comparison System - Compare system specifications between JSON and CSV export files to track hardware changes over time
  • ๐Ÿ’พ Dedicated File Module - File operations (export and comparison) moved to a separate statz.file module for better organization

๐Ÿ”ง Improvements

  • ๐Ÿ”’ Enhanced Security - Internal platform-specific files moved to internal/ folder to reduce direct access
  • ๐Ÿ› ๏ธ Fixed CLI Issues - Resolved broken CLI behavior for statz --specs and statz --usage commands when used without component flags
  • ๐Ÿ› Better Error Handling - Improved error handling and graceful failure management across all functions

๐Ÿ—๏ธ Architecture Changes

  • ๐Ÿ“ Modular Structure - File export and comparison functionality separated into dedicated file.py module
  • ๐Ÿ–ฅ๏ธ Dashboard Enhancement - Live dashboard now shows three side-by-side tables: system usage, top CPU processes, and top memory processes
  • ๐Ÿ”ง CLI Robustness - Fixed import errors and function references that caused CLI crashes

๐Ÿ“‹ Technical Details

  • Export functions moved from stats.py to file.py
  • New compare() function supports JSON-to-CSV and CSV-to-JSON comparisons
  • Dashboard layout improved with Rich Columns for better visualization
  • Internal cross-platform modules reorganized for security

๐Ÿ”„ Breaking Changes

  • export_into_file() moved from statz.stats to statz.file
  • Import statements for file operations need to be updated

๐Ÿ“ Side Note

If you find any errors on Linux, please report them to me with as much detail as possible as I do not have a Linux machine.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

statz-2.1.0.tar.gz (39.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

statz-2.1.0-py3-none-any.whl (40.5 kB view details)

Uploaded Python 3

File details

Details for the file statz-2.1.0.tar.gz.

File metadata

  • Download URL: statz-2.1.0.tar.gz
  • Upload date:
  • Size: 39.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for statz-2.1.0.tar.gz
Algorithm Hash digest
SHA256 b54f62d0d7595fd84138aa5db6740455cd262856709388f51f21be6704247542
MD5 edeaa2d82a7d54d57c2622abcfd902c9
BLAKE2b-256 186c7414409d9d64e3f030b49b45456dc383ece11b920a314be6c189e9e3ea46

See more details on using hashes here.

File details

Details for the file statz-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: statz-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 40.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for statz-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c2c19bf5d0acff30ef7509142b4fddb8bd0b04ce820b4874af39377efb23ad1c
MD5 923c993b39105aa7a634f7fd9e4e0949
BLAKE2b-256 1f03b26940ba0a9a6ac34f64f6073307f0f578c640c49c1311dae730c1eb4f84

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page