/** * Usage & Analytics Page * Tabs: Credit Usage, API Usage, Cost Breakdown */ import { useState, useEffect } from 'react'; import { TrendingUp, Activity, DollarSign } from 'lucide-react'; import PageMeta from '../../components/common/PageMeta'; import { useToast } from '../../components/ui/toast/ToastContainer'; import { getUsageAnalytics, UsageAnalytics } from '../../services/billing.api'; import { Card } from '../../components/ui/card'; import Badge from '../../components/ui/badge/Badge'; type TabType = 'credits' | 'api' | 'costs'; export default function UsageAnalyticsPage() { const toast = useToast(); const [activeTab, setActiveTab] = useState('credits'); const [analytics, setAnalytics] = useState(null); const [loading, setLoading] = useState(true); const [period, setPeriod] = useState(30); useEffect(() => { loadAnalytics(); }, [period]); const loadAnalytics = async () => { try { setLoading(true); const data = await getUsageAnalytics(period); setAnalytics(data); } catch (error: any) { toast.error(`Failed to load usage analytics: ${error.message}`); } finally { setLoading(false); } }; if (loading) { return (
Loading...
); } const tabs = [ { id: 'credits' as TabType, label: 'Credit Usage', icon: }, { id: 'api' as TabType, label: 'API Usage', icon: }, { id: 'costs' as TabType, label: 'Cost Breakdown', icon: }, ]; return (

Usage & Analytics

Monitor credit usage, API calls, and cost breakdown

{/* Tabs */}
{/* Period Selector */}
{/* Tab Content */}
{/* Credit Usage Tab */} {activeTab === 'credits' && (
{/* Summary Cards */}
Total Credits Used
{analytics?.total_usage.toLocaleString() || 0}
Total Purchases
{analytics?.total_purchases.toLocaleString() || 0}
Current Balance
{analytics?.current_balance.toLocaleString() || 0}
{/* Usage by Type */}

Usage by Operation Type

{analytics?.usage_by_type.map((item, idx) => (
{item.transaction_type}
{item.count} operations
{item.total.toLocaleString()} credits
))} {(!analytics?.usage_by_type || analytics.usage_by_type.length === 0) && (
No usage in this period
)}
)} {/* API Usage Tab */} {activeTab === 'api' && (
Total API Calls
{analytics?.usage_by_type.reduce((sum, item) => sum + item.count, 0).toLocaleString() || 0}
Avg Calls/Day
{Math.round((analytics?.usage_by_type.reduce((sum, item) => sum + item.count, 0) || 0) / period)}
Success Rate
98.5%

API Calls by Endpoint

/api/v1/content/generate
Content generation
1,234
calls
/api/v1/keywords/cluster
Keyword clustering
567
calls
)} {/* Cost Breakdown Tab */} {activeTab === 'costs' && (
Total Cost
${((analytics?.total_usage || 0) * 0.01).toFixed(2)}
Estimated USD
Avg Cost/Day
${(((analytics?.total_usage || 0) * 0.01) / period).toFixed(2)}
Estimated USD
Cost per Credit
$0.01
Average rate

Cost by Operation

{analytics?.usage_by_type.map((item, idx) => (
{item.transaction_type}
{item.total.toLocaleString()} credits used
${(item.total * 0.01).toFixed(2)}
USD
))} {(!analytics?.usage_by_type || analytics.usage_by_type.length === 0) && (
No cost data available
)}
)}
{/* Summary Cards */}
Total Credits Used
{analytics?.total_usage.toLocaleString() || 0}
Total Purchases
{analytics?.total_purchases.toLocaleString() || 0}
Current Balance
{analytics?.current_balance.toLocaleString() || 0}
); }