import React, { useState, useEffect, useRef } from 'react'; import { BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer } from 'recharts'; import { initLocalEngine, routeInference } from '../utils/inferenceRouter'; import HCaptcha from '@hcaptcha/react-hcaptcha'; import { supabase, useAuth, GATEWAY_URL, LEMON_CHECKOUT_URL } from '../context'; export default function LogsSection({ user }) { const [logs, setLogs] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const fetchLogs = async () => { try { const res = await fetch(`https://opticparse-python-sg.onrender.com/gateway/usage/${user.id}/logs`); const data = await res.json(); setLogs(data.logs || []); } catch (e) { console.error(e); } setLoading(false); }; if (user) fetchLogs(); }, [user]); const exportCSV = () => { const headers = ["Timestamp", "Service", "Endpoint", "Status", "Response Time (ms)"]; const rows = logs.map(l => [ new Date(l.created_at).toLocaleString(), l.service, l.endpoint, l.status_code, l.response_time_ms ]); const csvContent = "data:text/csv;charset=utf-8," + [headers.join(","), ...rows.map(r => r.join(","))].join("\n"); const encodedUri = encodeURI(csvContent); const link = document.createElement("a"); link.setAttribute("href", encodedUri); link.setAttribute("download", "opticparse_api_logs.csv"); document.body.appendChild(link); link.click(); document.body.removeChild(link); }; return (
| Timestamp | Service | Endpoint | Status | Time |
|---|---|---|---|---|
| {new Date(l.created_at).toLocaleString()} | {l.service?.toUpperCase()} | {l.endpoint} | = 400 ? 'var(--red)' : 'var(--green)' }}>{l.status_code} | {l.response_time_ms}ms |