Harden usage demo data rendering

This commit is contained in:
Anthony Stirling 2025-12-12 23:40:39 +00:00
parent 747d4d92e8
commit fab60fd7e5
3 changed files with 16 additions and 7 deletions

View File

@ -158,18 +158,21 @@ const AdminUsageSection: React.FC = () => {
const endpoints = (data?.endpoints ?? []).map((endpoint) => ({
endpoint: endpoint.endpoint ?? t('usage.table.unknownEndpoint', 'Unknown endpoint'),
visits: Number.isFinite(endpoint.visits) ? endpoint.visits : 0,
percentage: Number.isFinite(endpoint.percentage) ? endpoint.percentage : 0,
visits: Number.isFinite(endpoint.visits) ? Math.max(0, endpoint.visits) : 0,
percentage: Number.isFinite(endpoint.percentage) ? Math.max(0, endpoint.percentage) : 0,
}));
const chartData = endpoints.map((e) => ({ label: e.endpoint, value: e.visits }));
const chartData = endpoints.map((e) => ({
label: e.endpoint,
value: Number.isFinite(e.visits) ? Math.max(0, e.visits) : 0,
}));
const displayedVisits = endpoints.reduce((sum, e) => sum + e.visits, 0);
const totalVisits = Number.isFinite(data?.totalVisits)
? (data?.totalVisits as number)
? Math.max(0, data?.totalVisits as number)
: displayedVisits;
const totalEndpoints = Number.isFinite(data?.totalEndpoints)
? (data?.totalEndpoints as number)
? Math.max(0, data?.totalEndpoints as number)
: endpoints.length;
const displayedPercentage = totalVisits > 0

View File

@ -73,13 +73,19 @@ interface UsageAnalyticsChartProps {
const UsageAnalyticsChart: React.FC<UsageAnalyticsChartProps> = ({ data }) => {
const { t } = useTranslation();
const safeMaxValue = Math.max(...data.map((d) => d.value).filter((value) => Number.isFinite(value)), 1);
const safeData = data.map((item) => ({
label: item.label,
value: Number.isFinite(item.value) ? Math.max(0, item.value) : 0,
}));
return (
<Card padding="lg" radius="md" withBorder>
<Stack gap="md">
<Text size="lg" fw={600}>
{t('usage.chart.title', 'Endpoint Usage Chart')}
</Text>
<SimpleBarChart data={data} maxValue={Math.max(...data.map((d) => d.value), 1)} />
<SimpleBarChart data={safeData} maxValue={safeMaxValue} />
</Stack>
</Card>
);

View File

@ -48,7 +48,7 @@ const FREE_LICENSE_INFO: LicenseInfo = {
const BASE_NO_LOGIN_CONFIG: AppConfig = {
enableAnalytics: true,
appVersion: '2.0.0',
appVersion: '2.1.3',
serverCertificateEnabled: false,
enableAlphaFunctionality: false,
serverPort: 8080,