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
', `| Date | Provider | Model | Requests | Cache hits | Input tokens | Output tokens | Est. cost |
${usageRows(history.rows || [])}
`, '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});