mirror of
https://github.com/getnora-io/nora.git
synced 2026-04-12 22:00:31 +00:00
153 lines
5.2 KiB
Markdown
153 lines
5.2 KiB
Markdown
# NORA Development Session Notes
|
|
|
|
---
|
|
|
|
## 2026-01-26 - Dashboard Expansion
|
|
|
|
### Iteration 1: Planning & Exploration
|
|
- Received detailed implementation plan for dashboard expansion
|
|
- Explored codebase structure using Task agent
|
|
- Identified key files to modify:
|
|
- `main.rs` - AppState
|
|
- `ui/api.rs`, `ui/mod.rs`, `ui/components.rs`, `ui/templates.rs`
|
|
- `registry/docker.rs`, `npm.rs`, `maven.rs`, `cargo_registry.rs`
|
|
|
|
### Iteration 2: Infrastructure (Phase 1)
|
|
- Created `src/dashboard_metrics.rs`:
|
|
- `DashboardMetrics` struct with AtomicU64 counters
|
|
- Per-registry tracking (docker, npm, maven, cargo, pypi)
|
|
- `record_download()`, `record_upload()`, `record_cache_hit/miss()`
|
|
- `cache_hit_rate()` calculation
|
|
|
|
- Created `src/activity_log.rs`:
|
|
- `ActionType` enum: Pull, Push, CacheHit, ProxyFetch
|
|
- `ActivityEntry` struct with timestamp, action, artifact, registry, source
|
|
- `ActivityLog` with RwLock<VecDeque> (bounded to 50 entries)
|
|
|
|
### Iteration 3: AppState Update (Phase 2)
|
|
- Updated `main.rs`:
|
|
- Added `mod activity_log` and `mod dashboard_metrics`
|
|
- Extended `AppState` with `metrics: DashboardMetrics` and `activity: ActivityLog`
|
|
- Initialized in `run_server()`
|
|
|
|
### Iteration 4: API Endpoint (Phase 3)
|
|
- Updated `ui/api.rs`:
|
|
- Added structs: `DashboardResponse`, `GlobalStats`, `RegistryCardStats`, `MountPoint`
|
|
- Implemented `api_dashboard()` - aggregates all metrics, storage stats, activity
|
|
|
|
- Updated `ui/mod.rs`:
|
|
- Added route `/api/ui/dashboard`
|
|
- Modified `dashboard()` handler to use new response
|
|
|
|
### Iteration 5: Dark Theme UI (Phase 4)
|
|
- Updated `ui/components.rs` with ~400 new lines:
|
|
- `layout_dark()` - dark theme wrapper (#0f172a background)
|
|
- `sidebar_dark()`, `header_dark()` - dark theme navigation
|
|
- `render_global_stats()` - 5-column stats grid
|
|
- `render_registry_card()` - extended card with metrics
|
|
- `render_mount_points_table()` - registry paths and proxies
|
|
- `render_activity_row()`, `render_activity_log()` - activity display
|
|
- `render_polling_script()` - 5-second auto-refresh JS
|
|
|
|
### Iteration 6: Dashboard Template (Phase 5)
|
|
- Updated `ui/templates.rs`:
|
|
- Refactored `render_dashboard()` to accept `DashboardResponse`
|
|
- Added uptime display, global stats, registry cards grid
|
|
- Added mount points table and activity log
|
|
- Added `format_relative_time()` helper
|
|
|
|
### Iteration 7: Registry Instrumentation (Phase 6)
|
|
- `registry/docker.rs`:
|
|
- `download_blob()` - record download + cache hit + activity
|
|
- `get_manifest()` - record download + cache hit + activity
|
|
- `upload_blob()` - record upload + activity
|
|
- `put_manifest()` - record upload + activity
|
|
|
|
- `registry/npm.rs`:
|
|
- Cache hit tracking for local storage
|
|
- Cache miss + proxy fetch tracking
|
|
|
|
- `registry/maven.rs`:
|
|
- `download()` - cache hit/miss + activity
|
|
- `upload()` - record upload + activity
|
|
|
|
- `registry/cargo_registry.rs`:
|
|
- `download()` - record download + activity
|
|
|
|
### Iteration 8: Build & Test
|
|
- `cargo build` - compiled successfully with minor warnings
|
|
- Fixed warnings:
|
|
- Removed unused `RegistryStats` import
|
|
- Added `#[allow(dead_code)]` to `stat_card()`
|
|
- `cargo test` - all 75 tests passed
|
|
|
|
### Iteration 9: Server Testing
|
|
- Started server: `cargo run --release --bin nora`
|
|
- Tested endpoints:
|
|
```
|
|
GET /health - OK
|
|
GET /api/ui/dashboard - returns full metrics JSON
|
|
GET /ui/ - dark theme dashboard HTML
|
|
GET /v2/test/manifests/v1 - triggered Docker metrics
|
|
GET /npm/lodash/-/lodash-4.17.21.tgz - triggered npm proxy metrics
|
|
```
|
|
- Verified metrics tracking:
|
|
- Downloads: 3 (2 Docker + 1 npm)
|
|
- Cache hit rate: 66.67%
|
|
- Activity log populated with Pull, ProxyFetch events
|
|
|
|
### Iteration 10: Git Commit & Push
|
|
- Staged 11 files (2 new, 9 modified)
|
|
- Commit: `93f9655 Add dashboard metrics, activity log, and dark theme`
|
|
- Pushed to `origin/main`
|
|
|
|
### Iteration 11: Documentation
|
|
- Updated `TODO.md` with v0.2.1 section
|
|
- Created this `SESSION_NOTES.md`
|
|
|
|
---
|
|
|
|
### Key Decisions Made
|
|
1. **In-memory metrics** - AtomicU64 for thread-safety, reset on restart
|
|
2. **Bounded activity log** - 50 entries max, oldest evicted
|
|
3. **Polling over WebSocket** - simpler, 5-second interval sufficient
|
|
4. **Dark theme only for dashboard** - registry list pages keep light theme
|
|
|
|
### Files Changed Summary
|
|
```
|
|
New:
|
|
nora-registry/src/activity_log.rs
|
|
nora-registry/src/dashboard_metrics.rs
|
|
|
|
Modified:
|
|
nora-registry/src/main.rs (+8 lines)
|
|
nora-registry/src/registry/cargo_registry.rs (+13 lines)
|
|
nora-registry/src/registry/docker.rs (+47 lines)
|
|
nora-registry/src/registry/maven.rs (+36 lines)
|
|
nora-registry/src/registry/npm.rs (+29 lines)
|
|
nora-registry/src/ui/api.rs (+154 lines)
|
|
nora-registry/src/ui/components.rs (+394 lines)
|
|
nora-registry/src/ui/mod.rs (+5 lines)
|
|
nora-registry/src/ui/templates.rs (+180/-79 lines)
|
|
|
|
Total: ~1004 insertions, 79 deletions
|
|
```
|
|
|
|
### Useful Commands
|
|
```bash
|
|
# Start server
|
|
cargo run --release --bin nora
|
|
|
|
# Test dashboard
|
|
curl http://127.0.0.1:4000/api/ui/dashboard
|
|
|
|
# View UI
|
|
open http://127.0.0.1:4000/ui/
|
|
|
|
# Trigger metrics
|
|
curl http://127.0.0.1:4000/v2/test/manifests/v1
|
|
curl http://127.0.0.1:4000/npm/lodash/-/lodash-4.17.21.tgz -o /dev/null
|
|
```
|
|
|
|
---
|