Skip to content

Commit cb38f51

Browse files
kriszypdawsontoth
authored andcommitted
feat: Move resource limit reporting to region level and adjust for distribution
1 parent acbef78 commit cb38f51

File tree

4 files changed

+30
-19
lines changed

4 files changed

+30
-19
lines changed

src/features/clusters/upsert/ClusterDetails.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { Input } from '@/components/ui/input';
1010
import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
1111
import { ClusterRegions } from '@/features/clusters/upsert/ClusterRegions';
1212
import { ClusterInstances } from '@/features/clusters/upsert/components/ClusterInstances';
13-
import { ResourcesPerInstance } from '@/features/clusters/upsert/components/ResourcesPerInstance';
1413
import { UpsertClusterSchema } from '@/features/clusters/upsert/upsertClusterSchema';
1514
import { SchemaPlan, SchemaRegion } from '@/lib/api.gen';
1615
import { ArrowRight } from 'lucide-react';
@@ -32,6 +31,12 @@ interface ClusterDetailsProps {
3231
totalPrice: number;
3332
}
3433

34+
const DEPLOYMENT_FULL_DESCRIPTION: { [key: string]: string } = {
35+
"Colocated": "Colocated (shared infrastructure for optimized value)",
36+
"Dedicated": "Dedicated (dedicated infrastructure for consistent performance)",
37+
"Self-Hosted": "Self-Hosted (your own infrastructure)",
38+
}
39+
3540
export function ClusterDetails({
3641
calculatedNames,
3742
clusterId,
@@ -106,7 +111,7 @@ export function ClusterDetails({
106111
<SelectItem
107112
key={deploymentDescription}
108113
value={deploymentDescription}
109-
>{deploymentDescription}</SelectItem>
114+
>{DEPLOYMENT_FULL_DESCRIPTION[deploymentDescription] ?? deploymentDescription}</SelectItem>
110115
))}
111116
</SelectGroup>
112117
</SelectContent>
@@ -222,7 +227,6 @@ export function ClusterDetails({
222227
/>)
223228
}
224229

225-
<ResourcesPerInstance planLimits={selectedPlan?.planLimits} resourcesPerInstance={selectedPlan?.resourcesPerInstance} />
226230
</div>
227231
<DialogFooter className="mt-3 mb-12">
228232
<Button type="submit" variant="submit" className="rounded-full" disabled={isPending || !isDirty || !isValid}>

src/features/clusters/upsert/components/RegionFormInputs.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { TrashIcon } from 'lucide-react';
1919
import { useCallback, useEffect, useMemo } from 'react';
2020
import { Control, UseFieldArrayReturn, UseFormReturn } from 'react-hook-form';
2121
import { z } from 'zod';
22+
import { ResourcesPerInstance } from '@/features/clusters/upsert/components/ResourcesPerInstance.tsx';
2223

2324
type RegionFormInputsProps = {
2425
control: Control<z.infer<typeof UpsertClusterSchema>>,
@@ -35,6 +36,7 @@ export function RegionFormInputs({
3536
form,
3637
index,
3738
regionNameToLatencyToRegion,
39+
selectedPlan
3840
}: RegionFormInputsProps) {
3941
const availableRegionNames = useMemo(() =>
4042
Object.keys(regionNameToLatencyToRegion).sort(), [regionNameToLatencyToRegion]);
@@ -121,6 +123,8 @@ export function RegionFormInputs({
121123
</Button>
122124
</div>
123125
)}
126+
<ResourcesPerInstance planLimits={selectedPlan?.planLimits} resourcesPerInstance={selectedPlan?.resourcesPerInstance} selectedRegion={regionNameToLatencyToRegion[selectedRegionName]?.[selectedLatencyDescription
127+
]}/>
124128
</div>
125129
);
126130
}

src/features/clusters/upsert/components/ResourcesPerInstance.tsx

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FormControl } from '@/components/ui/form/FormControl';
33
import { FormItem } from '@/components/ui/form/FormItem';
44
import { FormLabel } from '@/components/ui/form/FormLabel';
55
import { FormMessage } from '@/components/ui/form/FormMessage';
6-
import { SchemaPlanLimits, SchemaResourcesPerInstance } from '@/lib/api.gen';
6+
import { SchemaRegion, SchemaPlanLimits, SchemaResourcesPerInstance } from '@/lib/api.gen';
77
import { excludeFalsy } from '@/lib/arrays/excludeFalsy';
88
import { cn } from '@/lib/cn';
99
import { humanFileSize } from '@/lib/humanFileSize';
@@ -13,37 +13,39 @@ import { isPositive } from '@/lib/types/isPositive';
1313
import { ArrowDownIcon, ArrowRightIcon } from 'lucide-react';
1414
import { useCallback, useMemo, useState } from 'react';
1515

16-
export function ResourcesPerInstance({ planLimits, resourcesPerInstance }: {
16+
export function ResourcesPerInstance({ planLimits, resourcesPerInstance, selectedRegion }: {
1717
readonly planLimits: SchemaPlanLimits | undefined,
1818
readonly resourcesPerInstance: SchemaResourcesPerInstance | undefined
19+
readonly selectedRegion: SchemaRegion | undefined
1920
}) {
2021
const [toggled, setToggled] = useState(false);
2122
const onUsageLimitsClick = useCallback(() => {
2223
setToggled(!toggled);
2324
}, [toggled, setToggled]);
2425

2526
const expirationMonths = isPositive(planLimits?.expirationMonths) && planLimits.expirationMonths < 1000 && planLimits.expirationMonths;
26-
27+
console.log(selectedRegion);
28+
const multiplier = selectedRegion?.purchasedBlockMultiplier ?? 1;
2729
const rows = useMemo(() => {
2830
if (!planLimits || !resourcesPerInstance) {
2931
return [];
3032
}
3133
return [
3234
isPositive(planLimits.totalReadCount) && {
3335
label: 'Total Reads',
34-
value: `${humanNumber(planLimits.totalReadCount)} reads`,
36+
value: `${humanNumber(planLimits.totalReadCount * multiplier)} reads`,
3537
},
3638
isPositive(planLimits.totalReadsBytes) && {
3739
label: 'Total Read Transfer',
38-
value: `${humanFileSize(planLimits.totalReadsBytes)}`,
40+
value: `${humanFileSize(planLimits.totalReadsBytes * multiplier)}`,
3941
},
4042
isPositive(planLimits.readsPerMinuteCount) && {
4143
label: 'Read Rate',
42-
value: `${humanNumber(planLimits.readsPerMinuteCount * 60)}/min`,
44+
value: `${humanNumber(planLimits.readsPerMinuteCount * 60 * multiplier)}/min`,
4345
},
4446
isPositive(planLimits.readsPerMinuteBytes) && {
4547
label: 'Read Bandwidth',
46-
value: `${humanFileSize(planLimits.readsPerMinuteBytes * 60)}/min`,
48+
value: `${humanFileSize(planLimits.readsPerMinuteBytes * 60 * multiplier)}/min`,
4749
},
4850
isPositive(planLimits.totalWriteCount) && {
4951
label: 'Total Writes',
@@ -63,27 +65,27 @@ export function ResourcesPerInstance({ planLimits, resourcesPerInstance }: {
6365
},
6466
isPositive(planLimits.totalRealTimeMessageDeliveries) && {
6567
label: 'Total Real-Time Messages',
66-
value: `${humanNumber(planLimits.totalRealTimeMessageDeliveries)} messages`,
68+
value: `${humanNumber(planLimits.totalRealTimeMessageDeliveries * multiplier)} messages`,
6769
},
6870
isPositive(planLimits.totalRealTimeMessageDeliveryBytes) && {
6971
label: 'Total Real-Time Message Transfer',
70-
value: `${humanFileSize(planLimits.totalRealTimeMessageDeliveryBytes)}`,
72+
value: `${humanFileSize(planLimits.totalRealTimeMessageDeliveryBytes * multiplier)}`,
7173
},
7274
isPositive(planLimits.realTimeMessageDeliveriesPerMinute) && {
7375
label: 'Real-Time Message Rate',
74-
value: `${humanNumber(planLimits.realTimeMessageDeliveriesPerMinute * 60)}/min`,
76+
value: `${humanNumber(planLimits.realTimeMessageDeliveriesPerMinute * 60 * multiplier)}/min`,
7577
},
7678
isPositive(planLimits.realTimeMessageDeliveryBytesPerMinute) && {
7779
label: 'Real-Time Message Bandwidth',
78-
value: `${humanFileSize(planLimits.realTimeMessageDeliveryBytesPerMinute * 60)}/min`,
80+
value: `${humanFileSize(planLimits.realTimeMessageDeliveryBytesPerMinute * 60 * multiplier)}/min`,
7981
},
8082
isPositive(planLimits.tlsHandshakes) && {
8183
label: 'TLS Handshakes',
82-
value: `${humanNumber(planLimits.tlsHandshakes * 60)}`,
84+
value: `${humanNumber(planLimits.tlsHandshakes * 60 * multiplier)}`,
8385
},
8486
isPositive(planLimits.applicationComputeHours) && {
8587
label: 'Application Compute Hours',
86-
value: `${humanNumber(planLimits.applicationComputeHours * 60)}`,
88+
value: `${humanNumber(planLimits.applicationComputeHours * 60 * multiplier)}`,
8789
},
8890
isPositive(resourcesPerInstance?.storageGb) && {
8991
label: 'Storage',
@@ -94,7 +96,7 @@ export function ResourcesPerInstance({ planLimits, resourcesPerInstance }: {
9496
value: pluralize(expirationMonths, 'month', 'months'),
9597
},
9698
].filter(excludeFalsy);
97-
}, [expirationMonths, planLimits, resourcesPerInstance]);
99+
}, [expirationMonths, planLimits, resourcesPerInstance, multiplier]);
98100

99101
if (!planLimits || !resourcesPerInstance) {
100102
// The user hasn't selected a plan yet. so let's not show anything for the ResourcesPerInstance space yet.
@@ -107,8 +109,8 @@ export function ResourcesPerInstance({ planLimits, resourcesPerInstance }: {
107109

108110
return <FormItem className="col-span-3 md:col-span-6">
109111
<FormLabel>
110-
Purchasing usage block for {isPositive(planLimits.readsPerMinuteCount) ? `${humanNumber(planLimits.readsPerMinuteCount)} reads/min & ` : ''}
111-
{humanNumber(planLimits.totalReadCount)} total reads per {isPositive(planLimits.readsPerMinuteCount) ? 'region' : 'server'},<br className="hidden sm:block" />
112+
Purchasing usage block for {isPositive(planLimits.readsPerMinuteCount) ? `${humanNumber(planLimits.readsPerMinuteCount * multiplier)} reads/min & ` : ''}
113+
{humanNumber(planLimits.totalReadCount * multiplier)} total reads {isPositive(planLimits.readsPerMinuteCount) ? 'in ' + (selectedRegion?.region ?? '') + ' region' : 'per server'},<br className="hidden sm:block" />
112114
{isPositive(planLimits.writesPerMinuteCount) ? ` ${humanNumber(planLimits.writesPerMinuteCount)} writes/min & ` : ' '}
113115
{humanNumber(planLimits.totalWriteCount)} total writes{expirationMonths && `, for ${pluralize(expirationMonths, 'month', 'months')}`}.
114116
<br className="block sm:hidden" />

src/lib/api.gen.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4624,6 +4624,7 @@ export interface components {
46244624
id: string;
46254625
/** Format: Int */
46264626
instanceCount: number;
4627+
purchasedBlockMultiplier: number;
46274628
latencyDescription: string;
46284629
region: string;
46294630
};

0 commit comments

Comments
 (0)