Commit f437107d authored by Lijiao's avatar Lijiao Committed by fishyds
Browse files

[WebUI] Fix issue#458 about final result as dict (#563)

* [WebUI] Fix issue#458 about final result as dict

* Fix comments

* fix bug
parent 95d19478
...@@ -209,6 +209,10 @@ class Overview extends React.Component<{}, OverviewState> { ...@@ -209,6 +209,10 @@ class Overview extends React.Component<{}, OverviewState> {
profile.failTrial += 1; profile.failTrial += 1;
break; break;
case 'RUNNING':
profile.runTrial += 1;
break;
case 'USER_CANCELED': case 'USER_CANCELED':
case 'SYS_CANCELED': case 'SYS_CANCELED':
profile.stopTrial += 1; profile.stopTrial += 1;
......
import * as React from 'react'; import * as React from 'react';
import axios from 'axios'; import axios from 'axios';
import { MANAGER_IP } from '../static/const'; import { MANAGER_IP } from '../static/const';
import { Row, Col, Tabs, Input, Select } from 'antd'; import { Row, Col, Tabs, Input, Select, Button } from 'antd';
const Option = Select.Option; const Option = Select.Option;
import { TableObj, Parameters, DetailAccurPoint, TooltipForAccuracy } from '../static/interface'; import { TableObjFianl, Parameters, DetailAccurPoint, TooltipForAccuracy } from '../static/interface';
import { getFinalResult } from '../static/function'; import { getFinalResult, getFinal } from '../static/function';
import Accuracy from './overview/Accuracy'; import Accuracy from './overview/Accuracy';
import Duration from './trial-detail/Duration'; import Duration from './trial-detail/Duration';
import Title1 from './overview/Title1'; import Title1 from './overview/Title1';
...@@ -16,8 +16,8 @@ import '../static/style/trialsDetail.scss'; ...@@ -16,8 +16,8 @@ import '../static/style/trialsDetail.scss';
interface TrialDetailState { interface TrialDetailState {
accSource: object; accSource: object;
accNodata: string; accNodata: string;
tableListSource: Array<TableObj>; tableListSource: Array<TableObjFianl>;
searchResultSource: Array<TableObj>; searchResultSource: Array<TableObjFianl>;
isHasSearch: boolean; isHasSearch: boolean;
experimentStatus: string; experimentStatus: string;
entriesTable: number; entriesTable: number;
...@@ -30,6 +30,8 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -30,6 +30,8 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
public interTableList = 1; public interTableList = 1;
public interAllTableList = 2; public interAllTableList = 2;
public tableList: TableList | null;
constructor(props: {}) { constructor(props: {}) {
super(props); super(props);
...@@ -40,7 +42,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -40,7 +42,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
searchResultSource: [], searchResultSource: [],
experimentStatus: '', experimentStatus: '',
entriesTable: 20, entriesTable: 20,
isHasSearch: false isHasSearch: false,
}; };
} }
// trial accuracy graph // trial accuracy graph
...@@ -132,7 +134,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -132,7 +134,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
.then(res => { .then(res => {
if (res.status === 200) { if (res.status === 200) {
const trialJobs = res.data; const trialJobs = res.data;
const trialTable: Array<TableObj> = []; const trialTable: Array<TableObjFianl> = [];
Object.keys(trialJobs).map(item => { Object.keys(trialJobs).map(item => {
// only succeeded trials have finalMetricData // only succeeded trials have finalMetricData
let desc: Parameters = { let desc: Parameters = {
...@@ -167,7 +169,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -167,7 +169,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
if (trialJobs[item].logPath !== undefined) { if (trialJobs[item].logPath !== undefined) {
desc.logPath = trialJobs[item].logPath; desc.logPath = trialJobs[item].logPath;
} }
const acc = getFinalResult(trialJobs[item].finalMetricData); const acc = getFinal(trialJobs[item].finalMetricData);
trialTable.push({ trialTable.push({
key: trialTable.length, key: trialTable.length,
sequenceId: trialJobs[item].sequenceId, sequenceId: trialJobs[item].sequenceId,
...@@ -185,7 +187,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -185,7 +187,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
Object.keys(searchResultSource).map(index => { Object.keys(searchResultSource).map(index => {
temp.push(searchResultSource[index].id); temp.push(searchResultSource[index].id);
}); });
const searchResultList: Array<TableObj> = []; const searchResultList: Array<TableObjFianl> = [];
for (let i = 0; i < temp.length; i++) { for (let i = 0; i < temp.length; i++) {
Object.keys(trialTable).map(key => { Object.keys(trialTable).map(key => {
const item = trialTable[key]; const item = trialTable[key];
...@@ -217,7 +219,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -217,7 +219,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
.then(res => { .then(res => {
if (res.status === 200) { if (res.status === 200) {
const trialJobs = res.data; const trialJobs = res.data;
const trialTable: Array<TableObj> = []; const trialTable: Array<TableObjFianl> = [];
Object.keys(trialJobs).map(item => { Object.keys(trialJobs).map(item => {
// only succeeded trials have finalMetricData // only succeeded trials have finalMetricData
let desc: Parameters = { let desc: Parameters = {
...@@ -252,7 +254,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -252,7 +254,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
if (trialJobs[item].logPath !== undefined) { if (trialJobs[item].logPath !== undefined) {
desc.logPath = trialJobs[item].logPath; desc.logPath = trialJobs[item].logPath;
} }
const acc = getFinalResult(trialJobs[item].finalMetricData); const acc = getFinal(trialJobs[item].finalMetricData);
trialTable.push({ trialTable.push({
key: trialTable.length, key: trialTable.length,
sequenceId: trialJobs[item].sequenceId, sequenceId: trialJobs[item].sequenceId,
...@@ -308,7 +310,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -308,7 +310,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
} else { } else {
window.clearInterval(this.interAllTableList); window.clearInterval(this.interAllTableList);
const { tableListSource } = this.state; const { tableListSource } = this.state;
const searchResultList: Array<TableObj> = []; const searchResultList: Array<TableObjFianl> = [];
Object.keys(tableListSource).map(key => { Object.keys(tableListSource).map(key => {
const item = tableListSource[key]; const item = tableListSource[key];
if (item.sequenceId.toString() === targetValue || item.id.includes(targetValue)) { if (item.sequenceId.toString() === targetValue || item.id.includes(targetValue)) {
...@@ -364,6 +366,10 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -364,6 +366,10 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
} }
} }
test = () => {
alert('TableList component was not properly initialized.');
}
componentDidMount() { componentDidMount() {
this._isMounted = true; this._isMounted = true;
...@@ -429,13 +435,26 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -429,13 +435,26 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
<span>entries</span> <span>entries</span>
</Col> </Col>
<Col span={12} className="right"> <Col span={12} className="right">
{/* <span>Search:</span> */} <Row>
<Input <Col span={12}>
type="text" <Button
placeholder="search by Trial No. and id" type="primary"
onChange={this.searchTrial} className="tableButton editStyle"
style={{ width: 200, marginLeft: 6 }} onClick={this.tableList ? this.tableList.addColumn : this.test}
/> >
AddColumn
</Button>
</Col>
<Col span={12}>
{/* <span>Search:</span> */}
<Input
type="text"
placeholder="search by Trial No. and id"
onChange={this.searchTrial}
style={{ width: 200, marginLeft: 6 }}
/>
</Col>
</Row>
</Col> </Col>
</Row> </Row>
<TableList <TableList
...@@ -444,6 +463,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> { ...@@ -444,6 +463,7 @@ class TrialsDetail extends React.Component<{}, TrialDetailState> {
updateList={this.drawTableList} updateList={this.drawTableList}
searchResult={searchResultSource} searchResult={searchResultSource}
isHasSearch={isHasSearch} isHasSearch={isHasSearch}
ref={(tabList) => this.tableList = tabList}
/> />
</div> </div>
); );
......
...@@ -242,45 +242,45 @@ class Progressed extends React.Component<ProgressProps, ProgressState> { ...@@ -242,45 +242,45 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
maxString={`MaxTrialNumber: ${trialProfile.MaxTrialNum}`} maxString={`MaxTrialNumber: ${trialProfile.MaxTrialNum}`}
/> />
<Row className="basic colorOfbasic mess"> <Row className="basic colorOfbasic mess">
<p>Best Default Metric</p> <p>best metric</p>
<div>{bestAccuracy}</div> <div>{bestAccuracy}</div>
</Row> </Row>
<Row className="mess"> <Row className="mess">
<Col span={8}> <Col span={8}>
<Row className="basic colorOfbasic"> <Row className="basic colorOfbasic">
<p>Time Spent</p> <p>spent</p>
<div>{convertTime(trialProfile.execDuration)}</div> <div>{convertTime(trialProfile.execDuration)}</div>
</Row> </Row>
</Col> </Col>
<Col span={9}> <Col span={9}>
<Row className="basic colorOfbasic"> <Row className="basic colorOfbasic">
<p>Remaining Time</p> <p>remaining</p>
<div>{remaining}</div> <div>{remaining}</div>
</Row> </Row>
</Col> </Col>
<Col span={7}> <Col span={7}>
<Row className="basic colorOfbasic"> <Row className="basic colorOfbasic">
<p>MaxDuration</p> <p>running</p>
<div>{convertTime(trialProfile.maxDuration)}</div> <div>{trialNumber.runTrial}</div>
</Row> </Row>
</Col> </Col>
</Row> </Row>
<Row className="mess"> <Row className="mess">
<Col span={8}> <Col span={8}>
<Row className="basic colorOfbasic"> <Row className="basic colorOfbasic">
<p>Succeed Trial</p> <p>succeed</p>
<div>{trialNumber.succTrial}</div> <div>{trialNumber.succTrial}</div>
</Row> </Row>
</Col> </Col>
<Col span={9}> <Col span={9}>
<Row className="basic"> <Row className="basic">
<p>Stopped Trial</p> <p>stopped</p>
<div>{trialNumber.stopTrial}</div> <div>{trialNumber.stopTrial}</div>
</Row> </Row>
</Col> </Col>
<Col span={7}> <Col span={7}>
<Row className="basic"> <Row className="basic">
<p>Failed Trial</p> <p>failed</p>
<div>{trialNumber.failTrial}</div> <div>{trialNumber.failTrial}</div>
</Row> </Row>
</Col> </Col>
......
export const MANAGER_IP = `/api/v1/nni`; const MANAGER_IP = `/api/v1/nni`;
export const DOWNLOAD_IP = `/logs`; const DOWNLOAD_IP = `/logs`;
export const trialJobStatus = [ const trialJobStatus = [
'UNKNOWN', 'UNKNOWN',
'WAITING', 'WAITING',
'RUNNING', 'RUNNING',
...@@ -10,12 +10,47 @@ export const trialJobStatus = [ ...@@ -10,12 +10,47 @@ export const trialJobStatus = [
'SYS_CANCELED', 'SYS_CANCELED',
'EARLY_STOPPED' 'EARLY_STOPPED'
]; ];
export const CONTROLTYPE = [ const CONTROLTYPE = [
'SEARCH_SPACE', 'SEARCH_SPACE',
'TRIAL_CONCURRENCY', 'TRIAL_CONCURRENCY',
'MAX_EXEC_DURATION' 'MAX_EXEC_DURATION'
]; ];
export const MONACO = { const MONACO = {
readOnly: true, readOnly: true,
automaticLayout: true automaticLayout: true
}; };
const COLUMN_INDEX = [
{
name: 'Trial No',
index: 1
},
{
name: 'id',
index: 2
},
{
name: 'duration',
index: 3
},
{
name: 'status',
index: 4
},
{
name: 'Default',
index: 5
},
{
name: 'Operation',
index: 10000
},
{
name: 'Intermediate Result',
index: 10001
}
];
const COLUMN = ['Trial No', 'id', 'duration', 'status', 'Default', 'Operation', 'Intermediate Result'];
export {
MANAGER_IP, DOWNLOAD_IP, trialJobStatus,
CONTROLTYPE, MONACO, COLUMN, COLUMN_INDEX
};
import { FinalResult } from './interface'; import { FinalResult, FinalType } from './interface';
const convertTime = (num: number) => { const convertTime = (num: number) => {
if (num % 3600 === 0) { if (num % 3600 === 0) {
...@@ -28,6 +28,7 @@ const convertDuration = (num: number) => { ...@@ -28,6 +28,7 @@ const convertDuration = (num: number) => {
}; };
// get final result value // get final result value
// draw Accuracy point graph
const getFinalResult = (final: FinalResult) => { const getFinalResult = (final: FinalResult) => {
let acc; let acc;
let showDefault = 0; let showDefault = 0;
...@@ -46,6 +47,21 @@ const getFinalResult = (final: FinalResult) => { ...@@ -46,6 +47,21 @@ const getFinalResult = (final: FinalResult) => {
} }
}; };
// get final result value // acc obj
const getFinal = (final: FinalResult) => {
let showDefault: FinalType;
if (final) {
showDefault = JSON.parse(final[0].data);
if (typeof showDefault === 'number') {
showDefault = { default: showDefault };
}
return showDefault;
} else {
return undefined;
}
};
export { export {
convertTime, convertDuration, getFinalResult convertTime, convertDuration, getFinalResult,
getFinal
}; };
// draw accuracy graph data interface
interface TableObj { interface TableObj {
key: number; key: number;
sequenceId: number; sequenceId: number;
id: string; id: string;
duration: number; duration: number;
status: string; status: string;
acc?: number; acc?: number; // draw accuracy graph
description: Parameters; description: Parameters;
color?: string; color?: string;
} }
interface TableObjFianl {
key: number;
sequenceId: number;
id: string;
duration: number;
status: string;
acc?: FinalType;
description: Parameters;
color?: string;
}
interface FinalType {
default: string;
}
interface ErrorParameter { interface ErrorParameter {
error?: string; error?: string;
} }
interface Parameters { interface Parameters {
parameters: ErrorParameter; parameters: ErrorParameter;
logPath?: string; logPath?: string;
...@@ -93,5 +111,6 @@ export { ...@@ -93,5 +111,6 @@ export {
TableObj, Parameters, Experiment, TableObj, Parameters, Experiment,
AccurPoint, TrialNumber, TrialJob, AccurPoint, TrialNumber, TrialJob,
DetailAccurPoint, TooltipForAccuracy, DetailAccurPoint, TooltipForAccuracy,
ParaObj, VisualMapValue, Dimobj, FinalResult ParaObj, VisualMapValue, Dimobj, FinalResult,
TableObjFianl, FinalType
}; };
/* some buttons about trial-detail table */
.allList{ .allList{
width: 96%; width: 96%;
margin: 0 auto; margin: 0 auto;
...@@ -17,4 +18,17 @@ ...@@ -17,4 +18,17 @@
} }
} }
.titleColumn{
.ant-checkbox-group-item{
display: block;
}
}
.applyfooter{
/* apply button style */
.apply{
text-align: right;
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment