Skip to content

Commit 7060bd7

Browse files
ShaeOJclaude
andcommitted
v1.7.0: Benchmark History UI
New Features: - Benchmark History - View and compare past benchmark runs for each miner - Stores up to 10 benchmark results per miner - List view showing date, time, mode, hashrate, and efficiency - Detailed view with best hashrate/efficiency settings and safe limits - All Results tab showing every tested frequency/voltage combination - Compare mode - select two benchmarks to compare side-by-side - Delete individual entries or clear all history - "View History" button in benchmark configuration Technical Changes: - Added benchmark-history.ts for history storage layer - Added BenchmarkHistoryDialog component with full history viewing - Added BenchmarkHistoryEntry and BenchmarkHistory types - Updated benchmark page to save to history when saving profiles - Updated ROADMAP.md with completed Bulk Actions and Miner Groups features 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent b66473e commit 7060bd7

9 files changed

Lines changed: 988 additions & 31 deletions

File tree

ROADMAP.md

Lines changed: 69 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# AxeOS Live! Feature Roadmap
22

3-
## Current Version: 1.5.0
3+
## Current Version: 1.7.0
44

55
### Completed Features (v1.2.0)
66
- [x] Dynamic hashrate gauge scaling for high-power miners (up to 10+ TH/s)
@@ -49,6 +49,28 @@
4949
- [x] Results table - Top 5 by hashrate and efficiency
5050
- [x] Auto-apply best settings found
5151

52+
### Completed Features (v1.6.0 - v1.6.4)
53+
- [x] **Bulk Actions**
54+
- [x] Select multiple miners with selection mode toggle
55+
- [x] Apply frequency/voltage to all selected
56+
- [x] Enable/disable auto-tuner on multiple miners
57+
- [x] Restart multiple miners with confirmation
58+
- [x] Floating action bar with quick actions
59+
- [x] **Miner Groups/Tags**
60+
- [x] Create custom groups with names
61+
- [x] 14 preset color options for group identification
62+
- [x] Assign/remove miners to groups (single or bulk)
63+
- [x] Filter/group dashboard by group or status
64+
- [x] Collapsible group sections
65+
- [x] Group badge display on miner cards
66+
- [x] **Benchmark Improvements**
67+
- [x] Device-specific benchmark profiles with auto-tuner integration
68+
- [x] Benchmark profile persistence (save/load best settings per miner)
69+
- [x] Fixed benchmark profile mode dropdown and saving
70+
- [x] Improved hashrate drop detection for high-hashrate devices
71+
- [x] Performance improvements with throttled updates
72+
- [x] Miner card integration - open benchmark from card
73+
5274
### Completed Features (Previously Implemented)
5375
- [x] **Historical Data Persistence**
5476
- [x] SQLite database for storing mining history
@@ -71,43 +93,37 @@
7193

7294
### High Priority - High Impact
7395

74-
#### 1. Bulk Actions
75-
- [ ] Select multiple miners
76-
- [ ] Apply frequency/voltage to all selected
77-
- [ ] Enable/disable auto-tuner on multiple
78-
- [ ] Restart multiple miners
79-
- **Status**: Not started
80-
- **Complexity**: Medium
81-
82-
#### 2. Miner Groups/Tags
83-
- [ ] Create custom groups (e.g., "Office", "Garage")
84-
- [ ] Color-coded tags
85-
- [ ] Filter dashboard by group
86-
- [ ] Group-level stats aggregation
87-
- **Status**: Not started
96+
#### 1. Benchmark History UI - COMPLETED (v1.7.0)
97+
- [x] Dedicated dialog to view past benchmark runs
98+
- [x] List all benchmarks with timestamps per miner
99+
- [x] Compare multiple benchmark results side-by-side
100+
- [x] View detailed results from historical benchmarks
101+
- [x] Delete individual or all benchmark history
102+
- [x] Stores up to 10 benchmarks per miner
103+
- **Status**: Complete
88104
- **Complexity**: Medium
89105

90106
---
91107

92108
### Medium Priority - Quality of Life
93109

94-
#### 3. Export Data (Enhanced)
110+
#### 2. Export Data (Enhanced)
95111
- [x] Export current stats to CSV
96112
- [ ] Export historical data to CSV/JSON
97113
- [x] Export miner configurations (via Backup)
98114
- [ ] Scheduled auto-export
99115
- **Status**: Partially complete (v1.3.0)
100116
- **Complexity**: Low
101117

102-
#### 4. Custom Dashboard Layouts
118+
#### 3. Custom Dashboard Layouts
103119
- [ ] Drag-and-drop card arrangement
104120
- [ ] Configurable card size (compact/normal/expanded)
105121
- [ ] Choose which stats to display
106122
- [ ] Save layout preferences
107123
- **Status**: Not started
108124
- **Complexity**: High
109125

110-
#### 5. System Tray Notifications
126+
#### 4. System Tray Notifications
111127
- [ ] Native system tray notifications (Tauri)
112128
- [ ] Background monitoring when minimized
113129
- [ ] Tray icon with quick status
@@ -118,7 +134,7 @@
118134

119135
### Lower Priority - Nice to Have
120136

121-
#### 6. Multi-language Support (i18n)
137+
#### 5. Multi-language Support (i18n)
122138
- [ ] Extract all strings to translation files
123139
- [ ] English (default)
124140
- [ ] Spanish
@@ -128,21 +144,21 @@
128144
- **Status**: Not started
129145
- **Complexity**: Medium
130146

131-
#### 7. WebSocket Support
147+
#### 6. WebSocket Support
132148
- [ ] Real-time updates (if miners support it)
133149
- [ ] Reduce polling overhead
134150
- [ ] Instant status changes
135151
- **Status**: Not started
136152
- **Complexity**: High (depends on miner firmware)
137153

138-
#### 8. Dark/Light Theme Scheduling
154+
#### 7. Dark/Light Theme Scheduling
139155
- [ ] Auto-switch based on time
140156
- [ ] Follow system preference
141157
- [ ] Custom schedule
142158
- **Status**: Not started
143159
- **Complexity**: Low
144160

145-
#### 9. Cloud Backup
161+
#### 8. Cloud Backup
146162
- [ ] Optional cloud sync for settings
147163
- [ ] Cross-device configuration sharing
148164
- **Status**: Not started
@@ -156,9 +172,9 @@
156172
- Nothing in progress
157173

158174
### Next Up
159-
- Bulk Actions
160-
- Miner Groups/Tags
161-
- Benchmark Results History
175+
- Export historical data to CSV/JSON
176+
- System Tray Notifications
177+
- Custom Dashboard Layouts
162178

163179
---
164180

@@ -217,6 +233,34 @@
217233
- Added to Tools menu for easy access
218234
- Released v1.5.0
219235

236+
### Session 6 (2025-12-02 - 2025-12-03)
237+
- **Benchmark Fixes (v1.6.0 - v1.6.4)**
238+
- Fixed benchmark window not connecting when opened from miner card
239+
- Improved benchmark error handling
240+
- Simplified miner card benchmark button to open Tools window
241+
- Fixed APP_VERSION not updated in update-checker
242+
- Improved benchmark performance with throttled updates
243+
- Improved hashrate drop detection for benchmark and high-hashrate devices
244+
- Fixed benchmark profile mode dropdown and increase voltage limits
245+
- Fixed benchmarkProfileMode not saving (was being converted to NaN)
246+
- **Bulk Actions & Groups** (completed but not documented)
247+
- Full bulk actions implementation with floating action bar
248+
- Complete miner groups/tags with color coding and filtering
249+
- Updated roadmap to reflect v1.6.4 status
250+
251+
### Session 7 (2025-12-03)
252+
- Updated ROADMAP.md to reflect completed features (Bulk Actions, Miner Groups)
253+
- **Benchmark History UI**
254+
- Created `benchmark-history.ts` for history storage (up to 10 entries per miner)
255+
- Created `BenchmarkHistoryDialog` component with full history viewing
256+
- List view showing all past benchmarks with date/time/mode/results
257+
- Detailed view with summary stats, best hashrate, best efficiency, safe limits
258+
- All Results tab showing every tested frequency/voltage combination
259+
- Compare mode to compare two benchmark runs side-by-side
260+
- Delete individual entries or clear all history
261+
- Integrated into benchmark page with "View History" button
262+
- Auto-saves to history when saving benchmark profile
263+
220264
---
221265

222266
## Device Specs Database

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "nextn",
3-
"version": "1.6.4",
3+
"version": "1.7.0",
44
"private": true,
55
"scripts": {
66
"dev": "next dev -p 9002 -H 0.0.0.0",

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "app"
3-
version = "1.6.3"
3+
version = "1.7.0"
44
description = "AxeOS Live! - Monitor and manage your AxeOS miners"
55
authors = ["Shae Jones Thomson"]
66
license = ""

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "../node_modules/@tauri-apps/cli/config.schema.json",
33
"productName": "AxeOS Live!",
4-
"version": "1.6.4",
4+
"version": "1.7.0",
55
"identifier": "com.axeos.live",
66
"build": {
77
"frontendDist": "../out",

src/app/benchmark/page.tsx

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
BarChart3,
2828
Save,
2929
FileCheck,
30+
History,
3031
} from 'lucide-react';
3132
import Link from 'next/link';
3233
import type { MinerConfig, MinerState, MinerInfo } from '@/lib/types';
@@ -51,7 +52,9 @@ import {
5152
createProfileFromSummary,
5253
formatProfileSummary,
5354
} from '@/lib/benchmark-profiles';
54-
import type { BenchmarkProfile } from '@/lib/types';
55+
import { addBenchmarkToHistory, getMinerBenchmarkHistory } from '@/lib/benchmark-history';
56+
import { BenchmarkHistoryDialog } from '@/components/benchmark-history-dialog';
57+
import type { BenchmarkProfile, BenchmarkHistoryEntry } from '@/lib/types';
5558

5659
interface ToolsData {
5760
miners: MinerConfig[];
@@ -81,6 +84,7 @@ export default function BenchmarkPage() {
8184
// Profile state
8285
const [existingProfile, setExistingProfile] = useState<BenchmarkProfile | null>(null);
8386
const [profileSaved, setProfileSaved] = useState(false);
87+
const [historyCount, setHistoryCount] = useState(0);
8488

8589
// Direct miner info for preselected miners (when event system doesn't work)
8690
const [directMinerInfo, setDirectMinerInfo] = useState<MinerInfo | null>(null);
@@ -184,6 +188,11 @@ export default function BenchmarkPage() {
184188
setExistingProfile(profile);
185189
setProfileSaved(false);
186190
});
191+
192+
// Load history count
193+
getMinerBenchmarkHistory(selectedMiner).then(entries => {
194+
setHistoryCount(entries.length);
195+
});
187196
}
188197
}, [selectedMiner, data]);
189198

@@ -239,7 +248,7 @@ export default function BenchmarkPage() {
239248
benchmarkRef.current?.stop();
240249
};
241250

242-
// Save benchmark profile
251+
// Save benchmark profile (saves to both current profile and history)
243252
const handleSaveProfile = async () => {
244253
if (!summary || !selectedMinerInfo) return;
245254

@@ -248,8 +257,14 @@ export default function BenchmarkPage() {
248257
ASICModel: selectedMinerInfo.ASICModel,
249258
});
250259

260+
// Save as current profile for auto-tuner
251261
await saveBenchmarkProfile(profile);
252262
setExistingProfile(profile);
263+
264+
// Also save to history
265+
await addBenchmarkToHistory(profile);
266+
setHistoryCount(prev => prev + 1);
267+
253268
setProfileSaved(true);
254269
};
255270

@@ -363,6 +378,19 @@ export default function BenchmarkPage() {
363378
<span>Saved profile: {formatProfileSummary(existingProfile)}</span>
364379
</div>
365380
)}
381+
{/* History Button */}
382+
{selectedMiner && historyCount > 0 && (
383+
<BenchmarkHistoryDialog
384+
minerIp={selectedMiner}
385+
minerName={selectedMinerConfig?.name || selectedMiner}
386+
trigger={
387+
<Button variant="outline" size="sm" className="w-full mt-2" disabled={isRunning}>
388+
<History className="h-4 w-4 mr-2" />
389+
View History ({historyCount} runs)
390+
</Button>
391+
}
392+
/>
393+
)}
366394
</div>
367395

368396
{/* Benchmark Mode */}

0 commit comments

Comments
 (0)