BitlaForge v0.1.2 - Resource awareness + live Dashboard
BitlaForge v0.1.2 — Resource awareness + live Dashboard.
v0.1.1 made BitlaForge actually mine; v0.1.2 makes it feel alive while doing it, and gives you the knobs to leave the system usable.
What v0.1.2 ships (5 per-group commits)
🖥️ G1 — System info on Setup
New bitlaforge/system_info.py reads /proc/cpuinfo, /proc/meminfo, os.getloadavg(), and os.cpu_count() into a SystemInfo dataclass. The Setup screen gains a block above the minerd status showing:
- CPU model + logical/physical cores (parses unique
(physical id, core id)pairs) - Memory total + available with % used
- Load avg colour-graded: green when load_1 < cores × 0.5, yellow up to 0.9 × cores, red above
Stdlib only. Refreshes on R.
⚙ G2 — Config: miner name + niceness + threads-available hint
Two new fields in ~/.config/bitlaforge/config.toml:
miner_name— defaults tosocket.gethostname(). Local label and pool worker name.niceness— 0–19, default 19 (lowest priority; lets your system stay responsive).
The Thread count label dynamically shows "of N available" sourced from os.cpu_count(). A v0.1.1 TOML loads cleanly with the new defaults silently applied — no migration required.
🏷 G3 — miner_runner: Stratum worker name + nice wrapper
_build_argsjoins the sanitizedminer_nameto the wallet aswallet.workernamewhen set — pools show per-rig stats on their dashboards via Stratum's standard convention. Sanitization: alphanumeric +-+_, lowercased (so "Laptop" and "laptop" don't become two workers).start()wraps the spawn withnice -n Nwhen niceness > 0. niceness ≤ 0 spawns directly with no overhead.
⏱ G4 — Dashboard live tick + name in header
App installs a 1-second set_interval timer when the miner starts, cancels on stop (and when the parser sees the process end on its own). Each tick re-renders the Dashboard so uptime advances smoothly between minerd hashmeter dumps — no more frozen counter when the pool is quiet. The Dashboard title now shows the miner name in mauve: ⚡ BitlaForge — Miner Overview — workstation-rig.
📊 G5 — Live minerd CPU% / RAM from /proc/<pid>/
New bitlaforge/process_stats.py parses /proc/<pid>/stat (utime + stime ticks) and /proc/<pid>/status (VmRSS) — stdlib only, no psutil. The tick captures a baseline at miner start, computes deltas on each interval, and writes cpu_pct (htop-style: 100% = one logical core) + mem_mb into MinerStats. Dashboard shows them in the Performance section.
This is the validation knob for niceness: with niceness=19, you can watch minerd's CPU% drop the moment any other process needs cycles.
What did not ship in v0.1.2 (next cycle)
The original v0.1.2 plan included pool/wallet validation, persistent log archive, and per-session totals — those are now v0.1.3. The Forge release machinery + AUR submission becomes v0.1.4.
Install (v0.1.2, from source)
sudo pacman -S python-textual python-rich python-tomli-w
git clone https://github.com/jetomev/bitlaforge.git
cd bitlaforge
python main.pyTo actually mine, also install minerd via the AUR (Setup screen has the install commands):
yay -S cpuminerVerified
Textual Pilot tests across all five groups: system info parsing on a real Ryzen 7 7700 (16L/8P, 31GB total, load color-grading), 6-field TOML round-trip, sanitized worker name in -u, nice -n N actually wrapping the exec, uptime advancing smoothly across multiple tick intervals without new stats events, live CPU% reading 98.8% for a single-core busy loop with a clean baseline + delta.
Co-developed by Javier (@jetomev) and Claude (Anthropic). Fourth tool in the KognogOS Forge suite.