in webui/src/pages/diagnosis/index.tsx [44:122]
export default function Diagnosis() {
const [data, setData] = useState<DiagnosisResult[]>([]);;
const [message, setMessage] = useState('');
const [dialogVisible, setDialogVisible] = useState(false);
const [refreshCount, setRefreshCount] = useState(0);
const refreshDiagnosisList = () => {
diagnosisService.listDiagnosis()
.then(res => {
res = res || []
setData(res)
})
.catch(err => {
Message.error(`Error fetching diagnosis results: ${getErrorMessage(err)}`)
}).finally(() => {
setRefreshCount(refreshCount + 1)
})
};
const submitDiagnosis = (props) => {
const task: DiagnosisTask = {
source: props.src,
destination: {
address: props.dst,
port: props.port
},
protocol: props.protocol
};
diagnosisService.createDiagnosis(task)
.then(res => {
Message.success('Diagnosis task submitted')
refreshDiagnosisList()
})
.catch(err => {
Message.error(`Error when submitting diagnosis taskļ¼${getErrorMessage(err)}`)
})
};
const showMessageDialog = (message) => {
setMessage(message)
setDialogVisible(true)
}
useEffect(refreshDiagnosisList, [])
useEffect(() => {
if (data.find(i => i.status == 'running')) {
const id = setTimeout(refreshDiagnosisList, 3000);
return () => clearTimeout(id);
}
return () => {}
}, [refreshCount]);
return (
<div>
<PageHeader
title='Connectivity Diagnosis'
breadcrumbs={[{ name: 'Console' }, { name: 'Diagnosis' }, { name: 'Connectivity Diagnosis' }]}
/>
<Card id="card-diagnosis" title="Diagnose" contentHeight="auto">
<Card.Content>
<DiagnosisForm onSubmit={submitDiagnosis} />
</Card.Content>
</Card>
<Card id="card-history" title="History" contentHeight="auto">
<Card.Content>
<DiagnosisHistory data={toTableData(data, showMessageDialog)} />
</Card.Content>
</Card>
<Dialog
v2
visible={dialogVisible}
footerActions={['ok']}
onOk={() => setDialogVisible(false)}
onClose={() => setDialogVisible(false)}>
{message}
</Dialog>
</div>
);
}