// Generated, do not edit. sha256:1196ce67207fc0b54b2fc602d2f16cc37c4414638c2f9a09a7c16d83c58acd2f
import { apiMetricsGlobal } from '../data/api-metrics.js';
import { getSettings } from '../data/preferences.js';
import { t } from '../i18n/index.js';
import { esc } from '../ui/escape.js';
import { fmtInt } from '../ui/format.js';
import { CONFIG, METRICS } from '../../shared/config.js';
function sinceBucket(minutes) {
return new Date(Date.now() - minutes * 60000).toISOString().slice(0, 16);
}
function failState(calls, fail) {
if (!calls) return 'ok';
const ratio = fail / calls;
if (ratio >= METRICS.FAIL_BAD) return 'bad';
if (ratio >= METRICS.FAIL_WARN) return 'warn';
return 'ok';
}
function tileHtml(label, value, state) {
return `
`;
}
export async function renderMetricsWidget(host) {
try {
const settings = await getSettings();
const schema = settings ? settings.version : null;
const dbState = schema === CONFIG.SCHEMA_VERSION ? 'ok' : 'warn';
const m = await apiMetricsGlobal(sinceBucket(METRICS.WINDOW_MINUTES));
const errState = failState(m.calls, m.fail);
const errPct = m.calls ? Math.round((m.fail / m.calls) * 100) : 0;
const tiles = [
tileHtml(t('sysmetrics.db'), `v${schema != null ? schema : '?'}`, dbState),
tileHtml(t('sysmetrics.calls'), fmtInt(m.calls), m.calls ? 'ok' : 'warn'),
tileHtml(t('sysmetrics.errors'), `${errPct}%`, errState),
];
host.innerHTML = `
${t('dashboard.widget.metrics')}
${tiles.join('')}
${t('sysmetrics.window')} ${METRICS.WINDOW_MINUTES} min
`;
} catch (err) {
console.error('[metrics-widget]', err);
host.innerHTML = `${t('dashboard.widget.metrics')}
⚠ ${esc(err.message)}
`;
}
}