Files
Atomizer/atomizer-dashboard/README.md

237 lines
6.3 KiB
Markdown
Raw Normal View History

# Atomizer Dashboard
Real-time optimization monitoring and control dashboard for the Atomizer optimization engine.
## Features
### ✅ Live Dashboard (Current)
- **Real-time WebSocket streaming** - Instant updates on new trials
- **Interactive charts** - Convergence plots and parameter space visualization
- **Pruning alerts** - Toast notifications for failed trials
- **Data export** - Download trial history as JSON or CSV
- **Study discovery** - Automatically detects all active studies
- **Connection monitoring** - WebSocket status indicator
### 🔮 Future Features
- React + TypeScript frontend
- Study Configurator page
- Results Report Viewer
- LLM chat interface for configuration
- Study control (start/stop/pause)
---
## Quick Start
### 1. Install Backend Dependencies
```bash
cd atomizer-dashboard/backend
pip install -r requirements.txt
```
### 2. Start the Backend
```bash
# From backend directory
python -m uvicorn api.main:app --reload --host 0.0.0.0 --port 8000
```
### 3. Access the Dashboard
Open your browser: **http://localhost:8000**
### 4. Monitor an Optimization
```bash
# In a separate terminal
cd ../..
python studies/circular_plate_frequency_tuning/run_optimization.py
```
The dashboard will automatically detect the running study and stream updates in real-time!
---
## Architecture
### Backend Stack
- **FastAPI** - Modern async Python web framework
- **Uvicorn** - ASGI server
- **Watchdog** - File system event monitoring
- **WebSockets** - Bidirectional real-time communication
### Current Frontend
- **HTML/CSS/JavaScript** - Single-page application
- **Chart.js** - Interactive charts
- **WebSocket API** - Real-time data streaming
### Planned Frontend
- **React 18** + **Vite** + **TypeScript**
- **TailwindCSS** - Utility-first CSS
- **Recharts** - React charting library
- **React Query** - Server state management
---
## File Structure
```
atomizer-dashboard/
├── backend/ ✅ COMPLETE
│ ├── api/
│ │ ├── main.py # FastAPI app entry
│ │ ├── routes/
│ │ │ └── optimization.py # REST endpoints
│ │ └── websocket/
│ │ └── optimization_stream.py # WebSocket + file watching
│ ├── requirements.txt
│ └── README.md # Backend API docs
├── dashboard-test.html ✅ Basic live dashboard
├── dashboard-enhanced.html ✅ Enhanced with charts & export
└── README.md (this file)
```
---
## API Documentation
### REST Endpoints
- `GET /api/optimization/studies` - List all studies
- `GET /api/optimization/studies/{id}/status` - Get study status
- `GET /api/optimization/studies/{id}/history` - Get trial history
- `GET /api/optimization/studies/{id}/pruning` - Get pruning diagnostics
### WebSocket Endpoint
- `ws://localhost:8000/api/ws/optimization/{study_id}` - Real-time trial stream
**Message Types**:
- `connected` - Initial connection confirmation
- `trial_completed` - New trial finished
- `new_best` - New best trial found
- `progress` - Progress update (X/Y trials)
- `trial_pruned` - Trial pruned with diagnostics
---
## Dashboard Features
### Convergence Chart
Line chart showing:
- **Objective value** progression over trials
- **Best so far** trajectory
- Real-time updates without animation lag
### Parameter Space Chart
Scatter plot showing:
- 2D visualization of first two design variables
- Points colored by objective value
- Best trial highlighted in green
### Pruning Alerts
- Toast notifications for pruned trials
- Auto-dismiss after 5 seconds
- Warning styling (orange) with pruning cause
### Data Export
- **Export JSON** - Download complete trial history
- **Export CSV** - Export as spreadsheet-compatible format
- Success alerts on export
### Metrics Dashboard
- **Total Trials** - Number of completed trials
- **Best Value** - Best objective value found
- **Avg Objective** - Average objective value
- **Pruned** - Number of failed trials
---
## Testing
### Verify Backend is Running
```bash
curl http://localhost:8000/health
# Should return: {"status":"healthy"}
curl http://localhost:8000/api/optimization/studies
# Should return: {"studies":[...]}
```
### Test WebSocket Connection
```bash
# Using wscat (npm install -g wscat)
wscat -c ws://localhost:8000/api/ws/optimization/circular_plate_frequency_tuning
# Or using Python
python -c "
import asyncio
import websockets
import json
async def test():
uri = 'ws://localhost:8000/api/ws/optimization/circular_plate_frequency_tuning'
async with websockets.connect(uri) as ws:
while True:
msg = await ws.recv()
print(json.loads(msg))
asyncio.run(test())
"
```
---
## Documentation
- [Master Plan](../docs/DASHBOARD_MASTER_PLAN.md) - Complete architecture roadmap
- [Implementation Status](../docs/DASHBOARD_IMPLEMENTATION_STATUS.md) - Current progress
- [Session Summary](../docs/DASHBOARD_SESSION_SUMMARY.md) - Implementation notes
- [Backend API](backend/README.md) - Detailed API documentation
---
## Next Steps
### Short Term
1. Build full React + Vite + TypeScript frontend
2. Migrate to Recharts for React-compatible charts
3. Add parameter importance visualization
4. Polish UI/UX with TailwindCSS
### Medium Term
5. Build Study Configurator page
6. Build Results Report Viewer page
7. Add study control (start/stop/pause)
8. Implement authentication
### Long Term
9. Add LLM chat interface for configuration
10. Deploy with Docker
11. Add user management
12. Implement study templates
---
## Troubleshooting
### Dashboard shows "Failed to fetch"
- Ensure backend is running: `http://localhost:8000/health`
- Check CORS settings in `backend/api/main.py`
- Access dashboard via `http://localhost:8000` (not `file://`)
### WebSocket not connecting
- Verify backend is running on port 8000
- Check firewall settings
- Look for errors in browser console (F12)
### No studies appearing
- Ensure studies directory exists: `studies/`
- Check study has `1_setup/optimization_config.json`
- Verify `2_results/optimization_history_incremental.json` exists
### Charts not updating
- Check WebSocket connection status in dashboard
- Verify file watcher is running (check backend console)
- Ensure optimization is actually running and creating trials
---
**Status**: ✅ Live dashboard functional and ready for use!