import { ALink } from '@/components/ui/button'; import { chQuery, TABLE_NAMES } from '@openpanel/db'; import { cacheable } from '../../../../packages/redis'; import AnimatedText from './animated-text'; import { Heading1, Lead2 } from './copy'; function shortNumber(num: number) { if (num < 1e3) return num; if (num >= 1e3 && num < 1e6) return +(num / 1e3).toFixed(1) + 'K'; if (num >= 1e6 && num < 1e9) return +(num / 1e6).toFixed(1) + 'M'; if (num >= 1e9 && num < 1e12) return +(num / 1e9).toFixed(1) + 'B'; if (num >= 1e12) return +(num / 1e12).toFixed(1) + 'T'; } const getProjectsWithCount = cacheable(async () => { const projects = await chQuery<{ project_id: string; count: number }>( `SELECT project_id, count(*) as count from ${TABLE_NAMES.events} GROUP by project_id order by count()` ); return projects; }, 60 * 10); export async function Hero() { const projects = await getProjectsWithCount(); const projectCount = projects.length; const eventCount = projects.reduce((acc, { count }) => acc + count, 0); return (