import { ChevronDown } from 'lucide-react' import { useState } from 'react' import { Button, Collapsible, Select } from 'ui' import throughputTable from '~/data/realtime/throughput.json' export default function RealtimeLimitsEstimater({}) { const findTableValue = ({ computeAddOn, filters, rls, concurrency }) => { return throughputTable.find( (l) => l.computeAddOn === computeAddOn && l.filters === filters && l.rls === rls && l.concurrency === concurrency ) } const [computeAddOn, setComputeAddOn] = useState('micro') const [filters, setFilters] = useState(false) const [rls, setRLS] = useState(false) const [concurrency, setConcurrency] = useState(500) const [limits, setLimits] = useState(findTableValue({ computeAddOn, filters, rls, concurrency })) const [expandPreview, setExpandPreview] = useState(false) const handleComputeAddOnSelection = (e) => { const val = e.target.value setComputeAddOn(val) setConcurrency(500) setLimits(findTableValue({ computeAddOn: val, filters, rls, concurrency: 500 })) } const handleFiltersSelection = (e) => { const val = e.target.value.toLowerCase() === 'true' setFilters(val) setConcurrency(500) setLimits(findTableValue({ computeAddOn, filters: val, rls, concurrency: 500 })) } const handleRLSSelection = (e) => { const val = e.target.value.toLowerCase() === 'true' setRLS(val) setConcurrency(500) setLimits(findTableValue({ computeAddOn, filters, rls: val, concurrency: 500 })) } const handleConcurrencySelection = (e) => { const val = parseInt(e.target.value) setConcurrency(val) setLimits(findTableValue({ computeAddOn, filters, rls, concurrency: val })) } return (
| Total DB changes /sec | Max messages per client /sec | Max total messages /sec | Latency p95 |
|---|---|---|---|
| {limits.maxDBChanges} | {limits.maxMessagesPerClient} | {Intl.NumberFormat().format(limits.totalMessagesPerSecond)} | {limits.p95Latency}ms |
View raw throughput table
} className="px-1" onClick={() => setExpandPreview(!expandPreview)} />| Filters | RLS | Connected clients | Total DB changes /sec | Max messages per client /sec | Max total messages /sec | Latency p95 |
|---|---|---|---|---|---|---|
| {l.filters ? '✅' : '🚫'} | {l.rls ? '✅' : '🚫'} | {Intl.NumberFormat().format(l.concurrency)} | {l.maxDBChanges} | {l.maxMessagesPerClient} | {Intl.NumberFormat().format(l.totalMessagesPerSecond)} | {l.p95Latency}ms |