in frontend/src/old-pages/Clusters/Scheduling.tsx [258:354]
export default function ClusterScheduling() {
const {t} = useTranslation()
const clusterName = useState(['app', 'clusters', 'selected'])
const clusterPath = ['clusters', 'index', clusterName]
const cluster = useState(clusterPath)
const fleetStatus = useState([...clusterPath, 'computeFleetStatus'])
const clusterMinor = cluster.version
? parseInt(cluster.version.split('.')[1])
: 0
const jobs: JobSummary[] = useState([
'clusters',
'index',
clusterName,
'jobs',
])
const defaultRegion = useState(['aws', 'region'])
const region = useState(['app', 'selectedRegion']) || defaultRegion
function isSsmPolicy(p: any) {
return p.hasOwnProperty('Policy') && p.Policy === ssmPolicy(region)
}
const iamPolicies = useState([
...clusterPath,
'config',
'HeadNode',
'Iam',
'AdditionalIamPolicies',
])
const ssmEnabled = iamPolicies && findFirst(iamPolicies, isSsmPolicy)
React.useEffect(() => {
const tick = () => {
clusterMinor > 0 && ssmEnabled && refreshQueues()
}
clusterMinor > 0 && ssmEnabled && refreshQueues()
const timerId = setInterval(tick, 10000)
return () => {
clearInterval(timerId)
}
}, [clusterMinor, ssmEnabled])
const selectJobCallback = (jobInfo: any) => {
setState(['app', 'clusters', 'jobInfo', 'data'], jobInfo)
}
const selectJob = (jobId: string) => {
const clusterName = getState(['app', 'clusters', 'selected'])
if (clusterName) {
const clusterPath = ['clusters', 'index', clusterName]
const cluster = getState(clusterPath)
let user = clusterDefaultUser(cluster)
const headNode = getState([...clusterPath, 'headNode'])
clearState(['app', 'clusters', 'jobInfo', 'data'])
headNode && setState(['app', 'clusters', 'jobInfo', 'dialog'], true)
headNode && JobInfo(headNode.instanceId, user, jobId, selectJobCallback)
}
}
const {
items,
actions,
filteredItemsCount,
collectionProps,
filterProps,
paginationProps,
} = useCollection(
jobs || [],
extendCollectionsOptions({
filtering: {
empty: (
<EmptyState
title={t('cluster.scheduling.filter.empty.title')}
subtitle={t('cluster.scheduling.filter.empty.subtitle')}
/>
),
noMatch: (
<EmptyState
title="No matches"
subtitle="No jobs match the filters."
action={
<Button onClick={() => actions.setFiltering('')}>
Clear filter
</Button>
}
/>
),
},
sorting: {
defaultState: {
sortingColumn: {
sortingField: 'job_id',
},
},
},
selection: {},
}),