in frontend/src/pages/Configure/Queues.js [103:210]
function ComputeResource({index, queueIndex, computeResource}) {
const parentPath = [...queuesPath, queueIndex];
const queue = useState(parentPath);
const computeResources = useState([...parentPath, 'ComputeResources']);
const path = [...parentPath, 'ComputeResources', index];
const typeError = useState([...queuesErrorsPath, queueIndex, 'computeResource', index, 'type']);
const tInstances = new Set(["t2.micro", "t2.medium"]);
const gravitonInstances = new Set([]);
const instanceTypePath = [...path, "InstanceType"]
const instanceType = useState(instanceTypePath);
const disableHTPath = [...path, "DisableSimultaneousMultithreading"]
const disableHT = useState(disableHTPath);
const efaPath = [...path, "Efa"];
const enableEFAPath = [...path, "Efa", "Enabled"]
const enableEFA = useState(enableEFAPath);
const enablePlacementGroupPath = [parentPath, 'Networking', "PlacementGroup", "Enabled"]
const enableGPUDirectPath = [...path, "Efa", "GdrSupport"]
const enableGPUDirect = useState(enableGPUDirectPath);
const minCount = useState([...path, 'MinCount']);
const maxCount = useState([...path, 'MaxCount']);
const remove = () => {
setState([...parentPath, 'ComputeResources'], [...computeResources.slice(0, index), ...computeResources.slice(index + 1)]);
}
const setMinCount = (staticCount) => {
const dynamicCount = maxCount - minCount;
if(staticCount > 0)
setState([...path, 'MinCount'], staticCount);
else
clearState([...path, 'MinCount']);
setState([...path, 'MaxCount'], staticCount + dynamicCount);
}
const setMaxCount = (dynamicCount) => {
const staticCount = minCount;
setState([...path, 'MaxCount'], staticCount + dynamicCount);
}
const setDisableHT = (disable) => {
if(disable)
setState(disableHTPath, disable);
else
clearState(disableHTPath);
}
const setEnableEFA = (enable) => {
if(enable)
{
setState(enableEFAPath, enable);
setState(enablePlacementGroupPath, enable);
}
else
clearState(efaPath);
}
const setEnableGPUDirect = (enable) => {
if(enable)
setState(enableGPUDirectPath, enable);
else
clearState(enableGPUDirectPath);
}
const setInstanceType = (instanceType) => {
// setting the instance type on the queue happens in the component
// this updates the name which is derived from the instance type
setState([...path, 'Name'], `${queue.Name}-${instanceType.replace(".", "")}`);
}
React.useEffect(() => {
if(!instanceType)
setState([...queuesPath, queueIndex, 'ComputeResources', index, "InstanceType"], 'c5n.large');
}, [queueIndex, index, instanceType]);
return (
<div className="compute-resource">
<div style={{display: "flex", flexDirection: "column", gap: "10px"}}>
<Box margin={{top: "xs"}} textAlign="right">{index > 0 && <Button onClick={remove}>Remove Resource</Button>}</Box>
<ColumnLayout columns={2}>
<div style={{display: "flex", flexDirection: "row", gap: "20px"}}>
<FormField label="Static Nodes">
<Input
value={computeResource.MinCount || 0}
type="number"
onChange={(({detail}) => setMinCount(parseInt(detail.value)))} />
</FormField>
<FormField label="Dynamic Nodes">
<Input
value={Math.max((computeResource.MaxCount || 0) - (computeResource.MinCount || 0), 0)}
type="number"
onChange={({detail}) => setMaxCount(parseInt(detail.value))} />
</FormField>
</div>
<FormField label="Instance Type" errorText={typeError}>
<InstanceSelect path={instanceTypePath} callback={setInstanceType}/>
</FormField>
</ColumnLayout>
<div style={{display: "flex", flexDirection: "row", gap: "20px"}}>
<Toggle disabled={tInstances.has(instanceType) || gravitonInstances.has(instanceType)} checked={disableHT} onChange={(event) => {setDisableHT(!disableHT)}}>Disable Hyperthreading</Toggle>
<Toggle disabled={!efaInstances.has(instanceType)} checked={enableEFA} onChange={(event) => {setEnableEFA(!enableEFA)}}>Enable EFA</Toggle>