Files
openproxy/dashboard/README.md
Claude b88fc8ead7 feat: add Next.js metrics dashboard for real-time visualization
Add a lightweight Next.js dashboard to visualize OpenProxy metrics in real-time. The dashboard provides comprehensive insights into LLM API usage, costs, and performance.

Features:
- Real-time metrics overview (requests, tokens, costs, response times)
- Model breakdown with usage statistics
- Hourly trends visualization with charts
- Recent requests table with detailed information
- Auto-refresh every 30 seconds
- Configurable time ranges (1h, 6h, 24h, 7d)

Technical details:
- Built with Next.js 14 and React 18
- Uses Recharts for data visualization
- Connects directly to PostgreSQL database
- Runs on port 3008 by default
- TypeScript for type safety
- Minimal dependencies for lightweight deployment

The dashboard complements the proxy server by providing a user-friendly interface for monitoring and analyzing LLM API usage patterns.
2025-11-19 00:04:28 +00:00

196 lines
4.5 KiB
Markdown

# OpenProxy Metrics Dashboard
A lightweight Next.js dashboard for visualizing OpenProxy LLM request metrics in real-time.
## Features
- **Real-time Metrics Overview**: Total requests, tokens, costs, and response times
- **Model Breakdown**: Usage statistics grouped by LLM model
- **Hourly Trends**: Visual charts showing request patterns over time
- **Recent Requests**: Detailed table of recent API calls
- **Auto-refresh**: Automatic updates every 30 seconds
- **Time Range Selection**: View metrics for the last hour, 6 hours, 24 hours, or 7 days
## Prerequisites
- Node.js 18 or higher
- PostgreSQL database (same as the proxy server)
- OpenProxy proxy server running
## Installation
1. Navigate to the dashboard directory:
```bash
cd dashboard
```
2. Install dependencies:
```bash
npm install
```
3. Create a `.env` file (copy from `.env.example`):
```bash
cp .env.example .env
```
4. Configure your `.env` file:
```env
DATABASE_URL=postgresql://user:password@localhost:5432/database
DATABASE_TABLE=llm_proxy
```
## Running the Dashboard
### Development Mode
```bash
npm run dev
```
The dashboard will be available at `http://localhost:3008`
### Production Mode
1. Build the application:
```bash
npm run build
```
2. Start the production server:
```bash
npm start
```
## Dashboard Sections
### 1. Overview Cards
Displays key metrics at a glance:
- Total requests processed
- Total tokens consumed
- Total cost incurred
- Average response time
- Number of unique models used
- Number of unique client IPs
### 2. Hourly Trends
Two charts showing:
- Requests count and average response time over time
- Token usage and costs over time
### 3. Model Breakdown
Table showing per-model statistics:
- Request count
- Total tokens used
- Total cost
- Average response time
### 4. Recent Requests
Detailed table of recent API calls showing:
- Timestamp
- Model used
- Token breakdown (prompt + completion = total)
- Cost
- Response time
- HTTP status code
- Client IP address
- Whether the request was streamed
## Configuration
### Port
The dashboard runs on port 3008 by default. To change this, modify the `dev` and `start` scripts in `package.json`:
```json
"dev": "next dev -p YOUR_PORT",
"start": "next start -p YOUR_PORT"
```
### Database Connection
Ensure the `DATABASE_URL` in your `.env` file matches the PostgreSQL connection string used by the proxy server.
### Time Ranges
Available time ranges:
- Last Hour (1 hour)
- Last 6 Hours
- Last 24 Hours (default)
- Last 7 Days (168 hours)
## Troubleshooting
### "Failed to fetch metrics" Error
- Verify that the `DATABASE_URL` in `.env` is correct
- Ensure PostgreSQL is running and accessible
- Check that the `llm_proxy` table exists in your database
- Verify network connectivity to the database
### Empty Dashboard
- Ensure the proxy server is running and processing requests
- Verify that requests are being logged to the database
- Check that the `DATABASE_TABLE` name matches your configuration
### Port Conflicts
If port 3008 is already in use, change the port in `package.json` scripts.
## Technology Stack
- **Framework**: Next.js 14 (React 18)
- **Charts**: Recharts
- **Database**: PostgreSQL (via `pg` driver)
- **Language**: TypeScript
- **Styling**: Inline CSS (no external dependencies)
## Architecture
```
dashboard/
├── app/
│ ├── api/
│ │ └── metrics/
│ │ └── route.ts # API endpoint for fetching metrics
│ ├── layout.tsx # Root layout
│ └── page.tsx # Main dashboard page
├── components/
│ ├── MetricsOverview.tsx # Overview cards component
│ ├── ModelBreakdown.tsx # Model statistics table
│ ├── RecentRequests.tsx # Recent requests table
│ └── TrendsChart.tsx # Hourly trends charts
├── package.json
├── tsconfig.json
├── next.config.js
└── README.md
```
## API Endpoints
### GET `/api/metrics`
Query parameters:
- `hours` (optional): Number of hours to look back (default: 24)
- `limit` (optional): Maximum number of recent requests to return (default: 100)
Response:
```json
{
"success": true,
"data": {
"summary": {
"totalRequests": 1234,
"totalTokens": 567890,
"totalCost": 12.34,
"avgResponseTime": 450.5,
"uniqueModels": 3,
"uniqueClients": 15
},
"recentRequests": [...],
"modelBreakdown": [...],
"hourlyTrends": [...]
},
"timeRange": "24 hours"
}
```
## License
Same as OpenProxy parent project.