242 lines
5.7 KiB
Markdown
242 lines
5.7 KiB
Markdown
# Admin Web UI
|
|
|
|
The LLM Gateway includes a built-in admin web interface for monitoring and managing the gateway.
|
|
|
|
## Features
|
|
|
|
### System Information
|
|
- Version and build details
|
|
- Platform information (OS, architecture)
|
|
- Go version
|
|
- Server uptime
|
|
- Git commit hash
|
|
|
|
### Health Status
|
|
- Overall system health
|
|
- Individual health checks:
|
|
- Server status
|
|
- Provider availability
|
|
- Conversation store connectivity
|
|
|
|
### Provider Management
|
|
- View all configured providers
|
|
- See provider types (OpenAI, Anthropic, Google, etc.)
|
|
- List models available for each provider
|
|
- Monitor provider status
|
|
|
|
### Configuration Viewing
|
|
- View current gateway configuration
|
|
- Secrets are automatically masked for security
|
|
- Collapsible JSON view
|
|
- Shows all config sections:
|
|
- Server settings
|
|
- Providers
|
|
- Models
|
|
- Authentication
|
|
- Conversations
|
|
- Logging
|
|
- Rate limiting
|
|
- Observability
|
|
|
|
## Setup
|
|
|
|
### Production Build
|
|
|
|
1. **Enable admin UI in config:**
|
|
```yaml
|
|
admin:
|
|
enabled: true
|
|
```
|
|
|
|
2. **Build frontend and backend together:**
|
|
```bash
|
|
make build-all
|
|
```
|
|
|
|
This command:
|
|
- Builds the Vue 3 frontend
|
|
- Copies frontend assets to `internal/admin/dist`
|
|
- Embeds assets into the Go binary using `embed.FS`
|
|
- Compiles the gateway with embedded admin UI
|
|
|
|
3. **Run the gateway:**
|
|
```bash
|
|
./bin/llm-gateway --config config.yaml
|
|
```
|
|
|
|
4. **Access the admin UI:**
|
|
Navigate to `http://localhost:8080/admin/`
|
|
|
|
### Development Mode
|
|
|
|
For faster frontend development with hot reload:
|
|
|
|
**Terminal 1 - Backend:**
|
|
```bash
|
|
make dev-backend
|
|
# or
|
|
go run ./cmd/gateway --config config.yaml
|
|
```
|
|
|
|
**Terminal 2 - Frontend:**
|
|
```bash
|
|
make dev-frontend
|
|
# or
|
|
cd frontend/admin && npm run dev
|
|
```
|
|
|
|
The frontend dev server runs on `http://localhost:5173` and automatically proxies API requests to the backend on `http://localhost:8080`.
|
|
|
|
## Architecture
|
|
|
|
### Backend Components
|
|
|
|
**Package:** `internal/admin/`
|
|
|
|
- `server.go` - AdminServer struct and initialization
|
|
- `handlers.go` - API endpoint handlers
|
|
- `routes.go` - Route registration
|
|
- `response.go` - JSON response helpers
|
|
- `static.go` - Embedded frontend asset serving
|
|
|
|
### API Endpoints
|
|
|
|
All admin API endpoints are under `/admin/api/v1/`:
|
|
|
|
- `GET /admin/api/v1/system/info` - System information
|
|
- `GET /admin/api/v1/system/health` - Health checks
|
|
- `GET /admin/api/v1/config` - Configuration (secrets masked)
|
|
- `GET /admin/api/v1/providers` - Provider list and status
|
|
|
|
### Frontend Components
|
|
|
|
**Framework:** Vue 3 + TypeScript + Vite
|
|
|
|
**Directory:** `frontend/admin/`
|
|
|
|
```
|
|
frontend/admin/
|
|
├── src/
|
|
│ ├── main.ts # App entry point
|
|
│ ├── App.vue # Root component
|
|
│ ├── router.ts # Vue Router config
|
|
│ ├── api/
|
|
│ │ ├── client.ts # Axios HTTP client
|
|
│ │ ├── system.ts # System API calls
|
|
│ │ ├── config.ts # Config API calls
|
|
│ │ └── providers.ts # Providers API calls
|
|
│ ├── components/ # Reusable components
|
|
│ ├── views/
|
|
│ │ └── Dashboard.vue # Main dashboard view
|
|
│ └── types/
|
|
│ └── api.ts # TypeScript type definitions
|
|
├── index.html
|
|
├── package.json
|
|
├── vite.config.ts
|
|
└── tsconfig.json
|
|
```
|
|
|
|
## Security Features
|
|
|
|
### Secret Masking
|
|
|
|
All sensitive data is automatically masked in API responses:
|
|
|
|
- API keys show only first 4 and last 4 characters
|
|
- Database connection strings are partially hidden
|
|
- OAuth secrets are masked
|
|
|
|
Example:
|
|
```json
|
|
{
|
|
"api_key": "sk-p...xyz"
|
|
}
|
|
```
|
|
|
|
### Authentication
|
|
|
|
In MVP version, the admin UI inherits the gateway's existing authentication:
|
|
|
|
- If `auth.enabled: true`, admin UI requires valid JWT token
|
|
- If `auth.enabled: false`, admin UI is publicly accessible
|
|
|
|
**Note:** Production deployments should always enable authentication.
|
|
|
|
## Auto-Refresh
|
|
|
|
The dashboard automatically refreshes data every 30 seconds to keep information current.
|
|
|
|
## Browser Support
|
|
|
|
The admin UI works in all modern browsers:
|
|
- Chrome/Edge (recommended)
|
|
- Firefox
|
|
- Safari
|
|
|
|
## Build Process
|
|
|
|
### Frontend Build
|
|
|
|
```bash
|
|
cd frontend/admin
|
|
npm install
|
|
npm run build
|
|
```
|
|
|
|
Output: `frontend/admin/dist/`
|
|
|
|
### Embedding in Go Binary
|
|
|
|
The `internal/admin/static.go` file uses Go's `embed` directive:
|
|
|
|
```go
|
|
//go:embed all:dist
|
|
var frontendAssets embed.FS
|
|
```
|
|
|
|
This embeds all files from the `dist` directory into the compiled binary, creating a single-file deployment artifact.
|
|
|
|
### SPA Routing
|
|
|
|
The admin UI is a Single Page Application (SPA). The static file server implements fallback to `index.html` for client-side routing, allowing Vue Router to handle navigation.
|
|
|
|
## Troubleshooting
|
|
|
|
### Admin UI shows 404
|
|
|
|
- Ensure `admin.enabled: true` in config
|
|
- Rebuild with `make build-all` to embed frontend assets
|
|
- Check that `internal/admin/dist/` exists and contains built assets
|
|
|
|
### API calls fail
|
|
|
|
- Check that backend is running on port 8080
|
|
- Verify CORS is not blocking requests (should not be an issue as UI is served from same origin)
|
|
- Check browser console for errors
|
|
|
|
### Frontend won't build
|
|
|
|
- Ensure Node.js 18+ is installed: `node --version`
|
|
- Install dependencies: `cd frontend/admin && npm install`
|
|
- Check for npm errors in build output
|
|
|
|
### Assets not loading
|
|
|
|
- Verify Vite config has correct `base: '/admin/'`
|
|
- Check that asset paths in `index.html` are correct
|
|
- Ensure Go's embed is finding the dist folder
|
|
|
|
## Future Enhancements
|
|
|
|
Planned features for future releases:
|
|
|
|
- [ ] RBAC with admin/viewer roles
|
|
- [ ] Audit logging for all admin actions
|
|
- [ ] Configuration editing (hot reload)
|
|
- [ ] Provider management (add/edit/delete)
|
|
- [ ] Model management
|
|
- [ ] Circuit breaker reset controls
|
|
- [ ] Real-time metrics and charts
|
|
- [ ] Request/response inspection
|
|
- [ ] Rate limit management
|