Skip to content

BitlaForge v0.1.2 - Resource awareness + live Dashboard

Choose a tag to compare

@jetomev jetomev released this 30 May 01:02

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 to socket.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_args joins the sanitized miner_name to the wallet as wallet.workername when 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 with nice -n N when 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.py

To actually mine, also install minerd via the AUR (Setup screen has the install commands):

yay -S cpuminer

Verified

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.