import {$, api, escapeHtml, exposeHandlers, pageWrap, setPanel} from './core.js?v=20260819-3'; function usageRows(rows) { if (!rows.length) return 'No usage data for this period.'; return rows.map(row => `${escapeHtml(row.day)}${escapeHtml(row.provider)}${escapeHtml(row.model || 'Not reported')}${Number(row.requests || 0).toLocaleString()}${Number(row.cache_hits || 0).toLocaleString()}${Number(row.input_tokens || 0).toLocaleString()}${Number(row.output_tokens || 0).toLocaleString()}$${Number(row.estimated_cost || 0).toFixed(6)}`).join(''); } export async function renderUsage() { const [stats, history] = await Promise.all([api('/api/stats'), api('/api/usage/history?days=30')]); const today = stats.today || {}; const requests = Number(today.requests || 0); const cacheHits = Number(today.cache_hits || 0); const cacheRate = requests ? Math.round((cacheHits / requests) * 100) : 0; const metrics = `
R
Requests today
${requests.toLocaleString()}
C
Cache hits
${cacheHits.toLocaleString()}
%
Cache hit rate
${cacheRate}%
$
Estimated cost
$${Number(today.estimated_cost || 0).toFixed(4)}
`; setPanel('Usage', pageWrap('

Usage

', `
${metrics}

Usage history

Provider activity during the last 30 days

${usageRows(history.rows || [])}
DateProviderModelRequestsCache hitsInput tokensOutput tokensEst. cost
`, 'Monitor requests, cache efficiency, token volume, and provider cost.')); } export async function filterUsage() { const provider = $('usage-provider-filter').value; const history = await api(`/api/usage/history?days=30${provider ? `&provider=${encodeURIComponent(provider)}` : ''}`); const body = $('usage-body'); if (body) body.innerHTML = usageRows(history.rows || []); } exposeHandlers({filterUsage});