mirror of
https://github.com/praveentcom/openproxy.git
synced 2026-02-12 22:12:46 +00:00
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.
196 lines
4.5 KiB
Markdown
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.
|