'use client';
import {
LineChart,
Line,
XAxis,
YAxis,
CartesianGrid,
Tooltip,
Legend,
ResponsiveContainer,
} from 'recharts';
interface TrendsChartProps {
trends: {
hour: string;
requests: string;
tokens: string;
cost: string;
avg_response_time: string;
}[];
}
export default function TrendsChart({ trends }: TrendsChartProps) {
if (!trends || trends.length === 0) {
return (
);
}
const chartData = trends.map((trend) => ({
time: new Date(trend.hour).toLocaleString('en-US', {
month: 'short',
day: 'numeric',
hour: '2-digit',
}),
requests: Number.parseInt(trend.requests),
tokens: Number.parseInt(trend.tokens),
cost: Number.parseFloat(trend.cost),
responseTime: Math.round(Number.parseFloat(trend.avg_response_time)),
}));
return (
Hourly Trends
Requests & Response Time
Tokens & Cost
);
}
const styles = {
container: {
marginBottom: '2rem',
},
title: {
fontSize: '1.5rem',
marginBottom: '1.5rem',
color: '#2c3e50',
},
card: {
backgroundColor: '#fff',
borderRadius: '8px',
boxShadow: '0 2px 4px rgba(0,0,0,0.1)',
padding: '1.5rem',
},
chartContainer: {
marginBottom: '2rem',
},
chartTitle: {
fontSize: '1.1rem',
marginBottom: '1rem',
color: '#2c3e50',
},
noData: {
padding: '2rem',
textAlign: 'center' as const,
color: '#7f8c8d',
},
};