Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
56be400c
Commit
56be400c
authored
Dec 23, 2019
by
Lijiao
Committed by
Yan Ni
Dec 23, 2019
Browse files
[webui] eslint fix (#1864)
parent
f9580cd1
Changes
39
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
120 additions
and
111 deletions
+120
-111
azure-pipelines.yml
azure-pipelines.yml
+2
-2
src/webui/.eslintrc
src/webui/.eslintrc
+2
-1
src/webui/src/App.tsx
src/webui/src/App.tsx
+7
-7
src/webui/src/components/Modal/Compare.tsx
src/webui/src/components/Modal/Compare.tsx
+10
-10
src/webui/src/components/Modal/CustomizedTrial.tsx
src/webui/src/components/Modal/CustomizedTrial.tsx
+11
-11
src/webui/src/components/Modal/ExperimentDrawer.tsx
src/webui/src/components/Modal/ExperimentDrawer.tsx
+8
-8
src/webui/src/components/Modal/LogDrawer.tsx
src/webui/src/components/Modal/LogDrawer.tsx
+10
-10
src/webui/src/components/Overview.tsx
src/webui/src/components/Overview.tsx
+7
-6
src/webui/src/components/SlideBar.tsx
src/webui/src/components/SlideBar.tsx
+20
-20
src/webui/src/components/TrialsDetail.tsx
src/webui/src/components/TrialsDetail.tsx
+16
-13
src/webui/src/components/overview/Accuracy.tsx
src/webui/src/components/overview/Accuracy.tsx
+1
-1
src/webui/src/components/overview/BasicInfo.tsx
src/webui/src/components/overview/BasicInfo.tsx
+1
-1
src/webui/src/components/overview/NumInput.tsx
src/webui/src/components/overview/NumInput.tsx
+4
-4
src/webui/src/components/overview/Progress.tsx
src/webui/src/components/overview/Progress.tsx
+8
-4
src/webui/src/components/overview/ProgressItem.tsx
src/webui/src/components/overview/ProgressItem.tsx
+2
-2
src/webui/src/components/overview/SearchSpace.tsx
src/webui/src/components/overview/SearchSpace.tsx
+1
-1
src/webui/src/components/overview/SuccessTable.tsx
src/webui/src/components/overview/SuccessTable.tsx
+6
-6
src/webui/src/components/overview/Title1.tsx
src/webui/src/components/overview/Title1.tsx
+1
-1
src/webui/src/components/overview/TrialProfile.tsx
src/webui/src/components/overview/TrialProfile.tsx
+2
-2
src/webui/src/components/public-child/DefaultMetrc.tsx
src/webui/src/components/public-child/DefaultMetrc.tsx
+1
-1
No files found.
azure-pipelines.yml
View file @
56be400c
...
@@ -22,8 +22,8 @@ jobs:
...
@@ -22,8 +22,8 @@ jobs:
cd src/nni_manager
cd src/nni_manager
yarn eslint
yarn eslint
# uncomment following 2 lines to enable webui eslint
# uncomment following 2 lines to enable webui eslint
#
cd ../webui
cd ../webui
#
yarn eslint
yarn eslint
displayName
:
'
Run
eslint'
displayName
:
'
Run
eslint'
-
script
:
|
-
script
:
|
python3 -m pip install torch==0.4.1 --user
python3 -m pip install torch==0.4.1 --user
...
...
src/webui/.eslintrc
View file @
56be400c
...
@@ -23,7 +23,8 @@
...
@@ -23,7 +23,8 @@
"@typescript-eslint/consistent-type-assertions": 0,
"@typescript-eslint/consistent-type-assertions": 0,
"@typescript-eslint/no-inferrable-types": 0,
"@typescript-eslint/no-inferrable-types": 0,
"no-inner-declarations": 0,
"no-inner-declarations": 0,
"@typescript-eslint/no-var-requires": 0
"@typescript-eslint/no-var-requires": 0,
"react/display-name": 0
},
},
"ignorePatterns": [
"ignorePatterns": [
"node_modules/",
"node_modules/",
...
...
src/webui/src/App.tsx
View file @
56be400c
...
@@ -27,7 +27,7 @@ class App extends React.Component<{}, AppState> {
...
@@ -27,7 +27,7 @@ class App extends React.Component<{}, AppState> {
};
};
}
}
async
componentDidMount
()
{
async
componentDidMount
()
:
Promise
<
void
>
{
await
Promise
.
all
([
EXPERIMENT
.
init
(),
TRIALS
.
init
()
]);
await
Promise
.
all
([
EXPERIMENT
.
init
(),
TRIALS
.
init
()
]);
this
.
setState
(
state
=>
({
experimentUpdateBroadcast
:
state
.
experimentUpdateBroadcast
+
1
}));
this
.
setState
(
state
=>
({
experimentUpdateBroadcast
:
state
.
experimentUpdateBroadcast
+
1
}));
this
.
setState
(
state
=>
({
trialsUpdateBroadcast
:
state
.
trialsUpdateBroadcast
+
1
}));
this
.
setState
(
state
=>
({
trialsUpdateBroadcast
:
state
.
trialsUpdateBroadcast
+
1
}));
...
@@ -35,7 +35,7 @@ class App extends React.Component<{}, AppState> {
...
@@ -35,7 +35,7 @@ class App extends React.Component<{}, AppState> {
this
.
setState
({
metricGraphMode
:
(
EXPERIMENT
.
optimizeMode
===
'
minimize
'
?
'
min
'
:
'
max
'
)
});
this
.
setState
({
metricGraphMode
:
(
EXPERIMENT
.
optimizeMode
===
'
minimize
'
?
'
min
'
:
'
max
'
)
});
}
}
changeInterval
=
(
interval
:
number
)
=>
{
changeInterval
=
(
interval
:
number
)
:
void
=>
{
this
.
setState
({
interval
});
this
.
setState
({
interval
});
if
(
this
.
timerId
===
null
&&
interval
!==
0
)
{
if
(
this
.
timerId
===
null
&&
interval
!==
0
)
{
window
.
setTimeout
(
this
.
refresh
);
window
.
setTimeout
(
this
.
refresh
);
...
@@ -45,15 +45,15 @@ class App extends React.Component<{}, AppState> {
...
@@ -45,15 +45,15 @@ class App extends React.Component<{}, AppState> {
}
}
// TODO: use local storage
// TODO: use local storage
changeColumn
=
(
columnList
:
Array
<
string
>
)
=>
{
changeColumn
=
(
columnList
:
Array
<
string
>
)
:
void
=>
{
this
.
setState
({
columnList
:
columnList
});
this
.
setState
({
columnList
:
columnList
});
}
}
changeMetricGraphMode
=
(
val
:
'
max
'
|
'
min
'
)
=>
{
changeMetricGraphMode
=
(
val
:
'
max
'
|
'
min
'
)
:
void
=>
{
this
.
setState
({
metricGraphMode
:
val
});
this
.
setState
({
metricGraphMode
:
val
});
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
interval
,
columnList
,
experimentUpdateBroadcast
,
trialsUpdateBroadcast
,
metricGraphMode
}
=
this
.
state
;
const
{
interval
,
columnList
,
experimentUpdateBroadcast
,
trialsUpdateBroadcast
,
metricGraphMode
}
=
this
.
state
;
if
(
experimentUpdateBroadcast
===
0
||
trialsUpdateBroadcast
===
0
)
{
if
(
experimentUpdateBroadcast
===
0
||
trialsUpdateBroadcast
===
0
)
{
return
null
;
// TODO: render a loading page
return
null
;
// TODO: render a loading page
...
@@ -86,7 +86,7 @@ class App extends React.Component<{}, AppState> {
...
@@ -86,7 +86,7 @@ class App extends React.Component<{}, AppState> {
);
);
}
}
private
refresh
=
async
()
=>
{
private
refresh
=
async
()
:
Promise
<
void
>
=>
{
const
[
experimentUpdated
,
trialsUpdated
]
=
await
Promise
.
all
([
EXPERIMENT
.
update
(),
TRIALS
.
update
()
]);
const
[
experimentUpdated
,
trialsUpdated
]
=
await
Promise
.
all
([
EXPERIMENT
.
update
(),
TRIALS
.
update
()
]);
if
(
experimentUpdated
)
{
if
(
experimentUpdated
)
{
this
.
setState
(
state
=>
({
experimentUpdateBroadcast
:
state
.
experimentUpdateBroadcast
+
1
}));
this
.
setState
(
state
=>
({
experimentUpdateBroadcast
:
state
.
experimentUpdateBroadcast
+
1
}));
...
@@ -107,7 +107,7 @@ class App extends React.Component<{}, AppState> {
...
@@ -107,7 +107,7 @@ class App extends React.Component<{}, AppState> {
}
}
}
}
private
async
lastRefresh
()
{
private
async
lastRefresh
()
:
Promise
<
void
>
{
await
EXPERIMENT
.
update
();
await
EXPERIMENT
.
update
();
await
TRIALS
.
update
(
true
);
await
TRIALS
.
update
(
true
);
this
.
setState
(
state
=>
({
experimentUpdateBroadcast
:
state
.
experimentUpdateBroadcast
+
1
}));
this
.
setState
(
state
=>
({
experimentUpdateBroadcast
:
state
.
experimentUpdateBroadcast
+
1
}));
...
...
src/webui/src/components/Modal/Compare.tsx
View file @
56be400c
...
@@ -20,7 +20,7 @@ class Compare extends React.Component<CompareProps, {}> {
...
@@ -20,7 +20,7 @@ class Compare extends React.Component<CompareProps, {}> {
super
(
props
);
super
(
props
);
}
}
intermediate
=
()
=>
{
intermediate
=
()
:
any
=>
{
const
{
compareRows
}
=
this
.
props
;
const
{
compareRows
}
=
this
.
props
;
const
trialIntermediate
:
Array
<
Intermedia
>
=
[];
const
trialIntermediate
:
Array
<
Intermedia
>
=
[];
const
idsList
:
Array
<
string
>
=
[];
const
idsList
:
Array
<
string
>
=
[];
...
@@ -40,7 +40,7 @@ class Compare extends React.Component<CompareProps, {}> {
...
@@ -40,7 +40,7 @@ class Compare extends React.Component<CompareProps, {}> {
const
legend
:
Array
<
string
>
=
[];
const
legend
:
Array
<
string
>
=
[];
// max length
// max length
const
length
=
trialIntermediate
[
0
]
!==
undefined
?
trialIntermediate
[
0
].
data
.
length
:
0
;
const
length
=
trialIntermediate
[
0
]
!==
undefined
?
trialIntermediate
[
0
].
data
.
length
:
0
;
const
xAxis
:
Array
<
number
>
=
[];
const
xAxis
:
number
[]
=
[];
Object
.
keys
(
trialIntermediate
).
map
(
item
=>
{
Object
.
keys
(
trialIntermediate
).
map
(
item
=>
{
const
temp
=
trialIntermediate
[
item
];
const
temp
=
trialIntermediate
[
item
];
legend
.
push
(
temp
.
name
);
legend
.
push
(
temp
.
name
);
...
@@ -52,14 +52,14 @@ class Compare extends React.Component<CompareProps, {}> {
...
@@ -52,14 +52,14 @@ class Compare extends React.Component<CompareProps, {}> {
tooltip
:
{
tooltip
:
{
trigger
:
'
item
'
,
trigger
:
'
item
'
,
enterable
:
true
,
enterable
:
true
,
position
:
function
(
point
:
Array
<
number
>
,
data
:
TooltipForIntermediate
)
{
position
:
function
(
point
:
number
[]
,
data
:
TooltipForIntermediate
)
:
number
[]
{
if
(
data
.
dataIndex
<
length
/
2
)
{
if
(
data
.
dataIndex
<
length
/
2
)
{
return
[
point
[
0
],
80
];
return
[
point
[
0
],
80
];
}
else
{
}
else
{
return
[
point
[
0
]
-
300
,
80
];
return
[
point
[
0
]
-
300
,
80
];
}
}
},
},
formatter
:
function
(
data
:
TooltipForIntermediate
)
{
formatter
:
function
(
data
:
TooltipForIntermediate
)
:
any
{
const
trialId
=
data
.
seriesName
;
const
trialId
=
data
.
seriesName
;
let
obj
=
{};
let
obj
=
{};
const
temp
=
trialIntermediate
.
find
(
key
=>
key
.
name
===
trialId
);
const
temp
=
trialIntermediate
.
find
(
key
=>
key
.
name
===
trialId
);
...
@@ -106,10 +106,10 @@ class Compare extends React.Component<CompareProps, {}> {
...
@@ -106,10 +106,10 @@ class Compare extends React.Component<CompareProps, {}> {
}
}
// render table column ---
// render table column ---
initColumn
=
()
=>
{
initColumn
=
()
:
React
.
ReactNode
=>
{
const
idList
:
Array
<
string
>
=
[];
const
idList
:
Array
<
string
>
=
[];
const
sequenceIdList
:
Array
<
number
>
=
[];
const
sequenceIdList
:
number
[]
=
[];
const
durationList
:
Array
<
number
>
=
[];
const
durationList
:
number
[]
=
[];
const
compareRows
=
this
.
props
.
compareRows
.
map
(
tableRecord
=>
TRIALS
.
getTrial
(
tableRecord
.
id
));
const
compareRows
=
this
.
props
.
compareRows
.
map
(
tableRecord
=>
TRIALS
.
getTrial
(
tableRecord
.
id
));
...
@@ -195,15 +195,15 @@ class Compare extends React.Component<CompareProps, {}> {
...
@@ -195,15 +195,15 @@ class Compare extends React.Component<CompareProps, {}> {
);
);
}
}
componentDidMount
()
{
componentDidMount
()
:
void
{
this
.
_isCompareMount
=
true
;
this
.
_isCompareMount
=
true
;
}
}
componentWillUnmount
()
{
componentWillUnmount
()
:
void
{
this
.
_isCompareMount
=
false
;
this
.
_isCompareMount
=
false
;
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
visible
,
cancelFunc
}
=
this
.
props
;
const
{
visible
,
cancelFunc
}
=
this
.
props
;
return
(
return
(
...
...
src/webui/src/components/Modal/CustomizedTrial.tsx
View file @
56be400c
...
@@ -39,7 +39,7 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
...
@@ -39,7 +39,7 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
}
}
// [submit click] user add a new trial [submit a trial]
// [submit click] user add a new trial [submit a trial]
addNewTrial
=
()
=>
{
addNewTrial
=
()
:
void
=>
{
const
{
searchSpace
,
copyTrialParameter
}
=
this
.
state
;
const
{
searchSpace
,
copyTrialParameter
}
=
this
.
state
;
// get user edited hyperParameter, ps: will change data type if you modify the input val
// get user edited hyperParameter, ps: will change data type if you modify the input val
const
customized
=
this
.
props
.
form
.
getFieldsValue
();
const
customized
=
this
.
props
.
form
.
getFieldsValue
();
...
@@ -76,19 +76,19 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
...
@@ -76,19 +76,19 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
}
}
warningConfirm
=
()
=>
{
warningConfirm
=
()
:
void
=>
{
this
.
setState
(()
=>
({
isShowWarning
:
false
}));
this
.
setState
(()
=>
({
isShowWarning
:
false
}));
const
{
customParameters
}
=
this
.
state
;
const
{
customParameters
}
=
this
.
state
;
this
.
submitCustomize
(
customParameters
);
this
.
submitCustomize
(
customParameters
);
}
}
warningCancel
=
()
=>
{
warningCancel
=
()
:
void
=>
{
this
.
setState
(()
=>
({
isShowWarning
:
false
}));
this
.
setState
(()
=>
({
isShowWarning
:
false
}));
}
}
submitCustomize
=
(
customized
:
Object
)
=>
{
submitCustomize
=
(
customized
:
Record
<
string
,
any
>
):
void
=>
{
// delete `tag` key
// delete `tag` key
for
(
le
t
i
in
customized
)
{
for
(
cons
t
i
in
customized
)
{
if
(
i
===
'
tag
'
)
{
if
(
i
===
'
tag
'
)
{
delete
customized
[
i
];
delete
customized
[
i
];
}
}
...
@@ -106,24 +106,24 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
...
@@ -106,24 +106,24 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
this
.
setState
(()
=>
({
isShowSubmitFailed
:
true
}));
this
.
setState
(()
=>
({
isShowSubmitFailed
:
true
}));
}
}
})
})
.
catch
(
error
=>
{
.
catch
(
()
=>
{
this
.
setState
(()
=>
({
isShowSubmitFailed
:
true
}));
this
.
setState
(()
=>
({
isShowSubmitFailed
:
true
}));
});
});
}
}
closeSucceedHint
=
()
=>
{
closeSucceedHint
=
()
:
void
=>
{
// also close customized trial modal
// also close customized trial modal
this
.
setState
(()
=>
({
isShowSubmitSucceed
:
false
}));
this
.
setState
(()
=>
({
isShowSubmitSucceed
:
false
}));
this
.
props
.
closeCustomizeModal
();
this
.
props
.
closeCustomizeModal
();
}
}
closeFailedHint
=
()
=>
{
closeFailedHint
=
()
:
void
=>
{
// also close customized trial modal
// also close customized trial modal
this
.
setState
(()
=>
({
isShowSubmitFailed
:
false
}));
this
.
setState
(()
=>
({
isShowSubmitFailed
:
false
}));
this
.
props
.
closeCustomizeModal
();
this
.
props
.
closeCustomizeModal
();
}
}
componentDidMount
()
{
componentDidMount
()
:
void
{
const
{
copyTrialId
}
=
this
.
props
;
const
{
copyTrialId
}
=
this
.
props
;
if
(
copyTrialId
!==
undefined
&&
TRIALS
.
getTrial
(
copyTrialId
)
!==
undefined
)
{
if
(
copyTrialId
!==
undefined
&&
TRIALS
.
getTrial
(
copyTrialId
)
!==
undefined
)
{
const
originCopyTrialPara
=
TRIALS
.
getTrial
(
copyTrialId
).
description
.
parameters
;
const
originCopyTrialPara
=
TRIALS
.
getTrial
(
copyTrialId
).
description
.
parameters
;
...
@@ -131,7 +131,7 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
...
@@ -131,7 +131,7 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
}
}
}
}
componentWillReceiveProps
(
nextProps
:
CustomizeProps
)
{
componentWillReceiveProps
(
nextProps
:
CustomizeProps
)
:
void
{
const
{
copyTrialId
}
=
nextProps
;
const
{
copyTrialId
}
=
nextProps
;
if
(
copyTrialId
!==
undefined
&&
TRIALS
.
getTrial
(
copyTrialId
)
!==
undefined
)
{
if
(
copyTrialId
!==
undefined
&&
TRIALS
.
getTrial
(
copyTrialId
)
!==
undefined
)
{
const
originCopyTrialPara
=
TRIALS
.
getTrial
(
copyTrialId
).
description
.
parameters
;
const
originCopyTrialPara
=
TRIALS
.
getTrial
(
copyTrialId
).
description
.
parameters
;
...
@@ -139,7 +139,7 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
...
@@ -139,7 +139,7 @@ class Customize extends React.Component<CustomizeProps, CustomizeState> {
}
}
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
closeCustomizeModal
,
visible
}
=
this
.
props
;
const
{
closeCustomizeModal
,
visible
}
=
this
.
props
;
const
{
isShowSubmitSucceed
,
isShowSubmitFailed
,
isShowWarning
,
customID
,
copyTrialParameter
}
=
this
.
state
;
const
{
isShowSubmitSucceed
,
isShowSubmitFailed
,
isShowWarning
,
customID
,
copyTrialParameter
}
=
this
.
state
;
const
{
const
{
...
...
src/webui/src/components/Modal/ExperimentDrawer.tsx
View file @
56be400c
...
@@ -29,7 +29,7 @@ class ExperimentDrawer extends React.Component<ExpDrawerProps, ExpDrawerState> {
...
@@ -29,7 +29,7 @@ class ExperimentDrawer extends React.Component<ExpDrawerProps, ExpDrawerState> {
};
};
}
}
getExperimentContent
=
()
=>
{
getExperimentContent
=
()
:
void
=>
{
axios
axios
.
all
([
.
all
([
axios
.
get
(
`
${
MANAGER_IP
}
/experiment`
),
axios
.
get
(
`
${
MANAGER_IP
}
/experiment`
),
...
@@ -41,7 +41,7 @@ class ExperimentDrawer extends React.Component<ExpDrawerProps, ExpDrawerState> {
...
@@ -41,7 +41,7 @@ class ExperimentDrawer extends React.Component<ExpDrawerProps, ExpDrawerState> {
if
(
res
.
data
.
params
.
searchSpace
)
{
if
(
res
.
data
.
params
.
searchSpace
)
{
res
.
data
.
params
.
searchSpace
=
JSON
.
parse
(
res
.
data
.
params
.
searchSpace
);
res
.
data
.
params
.
searchSpace
=
JSON
.
parse
(
res
.
data
.
params
.
searchSpace
);
}
}
le
t
trialMessagesArr
=
res1
.
data
;
cons
t
trialMessagesArr
=
res1
.
data
;
const
interResultList
=
res2
.
data
;
const
interResultList
=
res2
.
data
;
Object
.
keys
(
trialMessagesArr
).
map
(
item
=>
{
Object
.
keys
(
trialMessagesArr
).
map
(
item
=>
{
// not deal with trial's hyperParameters
// not deal with trial's hyperParameters
...
@@ -66,34 +66,34 @@ class ExperimentDrawer extends React.Component<ExpDrawerProps, ExpDrawerState> {
...
@@ -66,34 +66,34 @@ class ExperimentDrawer extends React.Component<ExpDrawerProps, ExpDrawerState> {
}));
}));
}
}
downExperimentParameters
=
()
=>
{
downExperimentParameters
=
()
:
void
=>
{
const
{
experiment
}
=
this
.
state
;
const
{
experiment
}
=
this
.
state
;
downFile
(
experiment
,
'
experiment.json
'
);
downFile
(
experiment
,
'
experiment.json
'
);
}
}
onWindowResize
=
()
=>
{
onWindowResize
=
()
:
void
=>
{
this
.
setState
(()
=>
({
expDrawerHeight
:
window
.
innerHeight
-
48
}));
this
.
setState
(()
=>
({
expDrawerHeight
:
window
.
innerHeight
-
48
}));
}
}
componentDidMount
()
{
componentDidMount
()
:
void
{
this
.
_isCompareMount
=
true
;
this
.
_isCompareMount
=
true
;
this
.
getExperimentContent
();
this
.
getExperimentContent
();
window
.
addEventListener
(
'
resize
'
,
this
.
onWindowResize
);
window
.
addEventListener
(
'
resize
'
,
this
.
onWindowResize
);
}
}
componentWillReceiveProps
(
nextProps
:
ExpDrawerProps
)
{
componentWillReceiveProps
(
nextProps
:
ExpDrawerProps
)
:
void
{
const
{
isVisble
}
=
nextProps
;
const
{
isVisble
}
=
nextProps
;
if
(
isVisble
===
true
)
{
if
(
isVisble
===
true
)
{
this
.
getExperimentContent
();
this
.
getExperimentContent
();
}
}
}
}
componentWillUnmount
()
{
componentWillUnmount
()
:
void
{
this
.
_isCompareMount
=
false
;
this
.
_isCompareMount
=
false
;
window
.
removeEventListener
(
'
resize
'
,
this
.
onWindowResize
);
window
.
removeEventListener
(
'
resize
'
,
this
.
onWindowResize
);
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
isVisble
,
closeExpDrawer
}
=
this
.
props
;
const
{
isVisble
,
closeExpDrawer
}
=
this
.
props
;
const
{
experiment
,
expDrawerHeight
}
=
this
.
state
;
const
{
experiment
,
expDrawerHeight
}
=
this
.
state
;
return
(
return
(
...
...
src/webui/src/components/Modal/LogDrawer.tsx
View file @
56be400c
...
@@ -33,19 +33,19 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
...
@@ -33,19 +33,19 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
};
};
}
}
downloadNNImanager
=
()
=>
{
downloadNNImanager
=
()
:
void
=>
{
if
(
this
.
state
.
nniManagerLogStr
!==
null
)
{
if
(
this
.
state
.
nniManagerLogStr
!==
null
)
{
downFile
(
this
.
state
.
nniManagerLogStr
,
'
nnimanager.log
'
);
downFile
(
this
.
state
.
nniManagerLogStr
,
'
nnimanager.log
'
);
}
}
}
}
downloadDispatcher
=
()
=>
{
downloadDispatcher
=
()
:
void
=>
{
if
(
this
.
state
.
dispatcherLogStr
!==
null
)
{
if
(
this
.
state
.
dispatcherLogStr
!==
null
)
{
downFile
(
this
.
state
.
dispatcherLogStr
,
'
dispatcher.log
'
);
downFile
(
this
.
state
.
dispatcherLogStr
,
'
dispatcher.log
'
);
}
}
}
}
dispatcherHTML
=
()
=>
{
dispatcherHTML
=
()
:
any
=>
{
return
(
return
(
<
div
>
<
div
>
<
span
>
Dispatcher Log
</
span
>
<
span
>
Dispatcher Log
</
span
>
...
@@ -56,7 +56,7 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
...
@@ -56,7 +56,7 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
);
);
}
}
nnimanagerHTML
=
()
=>
{
nnimanagerHTML
=
()
:
any
=>
{
return
(
return
(
<
div
>
<
div
>
<
span
>
NNImanager Log
</
span
>
<
span
>
NNImanager Log
</
span
>
...
@@ -65,21 +65,21 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
...
@@ -65,21 +65,21 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
);
);
}
}
setLogDrawerHeight
=
()
=>
{
setLogDrawerHeight
=
()
:
void
=>
{
this
.
setState
(()
=>
({
logDrawerHeight
:
window
.
innerHeight
-
48
}));
this
.
setState
(()
=>
({
logDrawerHeight
:
window
.
innerHeight
-
48
}));
}
}
async
componentDidMount
()
{
async
componentDidMount
()
:
Promise
<
void
>
{
this
.
refresh
();
this
.
refresh
();
window
.
addEventListener
(
'
resize
'
,
this
.
setLogDrawerHeight
);
window
.
addEventListener
(
'
resize
'
,
this
.
setLogDrawerHeight
);
}
}
componentWillUnmount
()
{
componentWillUnmount
()
:
void
{
window
.
clearTimeout
(
this
.
timerId
);
window
.
clearTimeout
(
this
.
timerId
);
window
.
removeEventListener
(
'
resize
'
,
this
.
setLogDrawerHeight
);
window
.
removeEventListener
(
'
resize
'
,
this
.
setLogDrawerHeight
);
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
closeDrawer
,
activeTab
}
=
this
.
props
;
const
{
closeDrawer
,
activeTab
}
=
this
.
props
;
const
{
nniManagerLogStr
,
dispatcherLogStr
,
isLoading
,
logDrawerHeight
}
=
this
.
state
;
const
{
nniManagerLogStr
,
dispatcherLogStr
,
isLoading
,
logDrawerHeight
}
=
this
.
state
;
return
(
return
(
...
@@ -164,7 +164,7 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
...
@@ -164,7 +164,7 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
);
);
}
}
private
refresh
=
()
=>
{
private
refresh
=
()
:
void
=>
{
window
.
clearTimeout
(
this
.
timerId
);
window
.
clearTimeout
(
this
.
timerId
);
const
dispatcherPromise
=
axios
.
get
(
`
${
DOWNLOAD_IP
}
/dispatcher.log`
);
const
dispatcherPromise
=
axios
.
get
(
`
${
DOWNLOAD_IP
}
/dispatcher.log`
);
const
nniManagerPromise
=
axios
.
get
(
`
${
DOWNLOAD_IP
}
/nnimanager.log`
);
const
nniManagerPromise
=
axios
.
get
(
`
${
DOWNLOAD_IP
}
/nnimanager.log`
);
...
@@ -184,7 +184,7 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
...
@@ -184,7 +184,7 @@ class LogDrawer extends React.Component<LogDrawerProps, LogDrawerState> {
});
});
}
}
private
manualRefresh
=
()
=>
{
private
manualRefresh
=
()
:
void
=>
{
this
.
setState
({
isLoading
:
true
});
this
.
setState
({
isLoading
:
true
});
this
.
refresh
();
this
.
refresh
();
}
}
...
...
src/webui/src/components/Overview.tsx
View file @
56be400c
...
@@ -35,30 +35,31 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -35,30 +35,31 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
};
};
}
}
clickMaxTop
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
)
=>
{
clickMaxTop
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
)
:
void
=>
{
event
.
stopPropagation
();
event
.
stopPropagation
();
// #999 panel active bgcolor; #b3b3b3 as usual
// #999 panel active bgcolor; #b3b3b3 as usual
const
{
changeMetricGraphMode
}
=
this
.
props
;
const
{
changeMetricGraphMode
}
=
this
.
props
;
changeMetricGraphMode
(
'
max
'
);
changeMetricGraphMode
(
'
max
'
);
}
}
clickMinTop
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
)
=>
{
clickMinTop
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
)
:
void
=>
{
event
.
stopPropagation
();
event
.
stopPropagation
();
const
{
changeMetricGraphMode
}
=
this
.
props
;
const
{
changeMetricGraphMode
}
=
this
.
props
;
changeMetricGraphMode
(
'
min
'
);
changeMetricGraphMode
(
'
min
'
);
}
}
changeConcurrency
=
(
val
:
number
)
=>
{
changeConcurrency
=
(
val
:
number
)
:
void
=>
{
this
.
setState
({
trialConcurrency
:
val
});
this
.
setState
({
trialConcurrency
:
val
});
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
trialConcurrency
}
=
this
.
state
;
const
{
trialConcurrency
}
=
this
.
state
;
const
{
experimentUpdateBroadcast
,
metricGraphMode
}
=
this
.
props
;
const
{
experimentUpdateBroadcast
,
metricGraphMode
}
=
this
.
props
;
const
searchSpace
=
this
.
convertSearchSpace
();
const
searchSpace
=
this
.
convertSearchSpace
();
const
bestTrials
=
this
.
findBestTrials
();
const
bestTrials
=
this
.
findBestTrials
();
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const
bestAccuracy
=
bestTrials
.
length
>
0
?
bestTrials
[
0
].
accuracy
!
:
NaN
;
const
bestAccuracy
=
bestTrials
.
length
>
0
?
bestTrials
[
0
].
accuracy
!
:
NaN
;
const
accuracyGraphData
=
this
.
generateAccuracyGraph
(
bestTrials
);
const
accuracyGraphData
=
this
.
generateAccuracyGraph
(
bestTrials
);
const
noDataMessage
=
bestTrials
.
length
>
0
?
''
:
'
No data
'
;
const
noDataMessage
=
bestTrials
.
length
>
0
?
''
:
'
No data
'
;
...
@@ -147,7 +148,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -147,7 +148,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
const
searchSpace
=
Object
.
assign
({},
EXPERIMENT
.
searchSpace
);
const
searchSpace
=
Object
.
assign
({},
EXPERIMENT
.
searchSpace
);
Object
.
keys
(
searchSpace
).
map
(
item
=>
{
Object
.
keys
(
searchSpace
).
map
(
item
=>
{
const
key
=
searchSpace
[
item
].
_type
;
const
key
=
searchSpace
[
item
].
_type
;
le
t
value
=
searchSpace
[
item
].
_value
;
cons
t
value
=
searchSpace
[
item
].
_value
;
switch
(
key
)
{
switch
(
key
)
{
case
'
quniform
'
:
case
'
quniform
'
:
case
'
qnormal
'
:
case
'
qnormal
'
:
...
@@ -161,7 +162,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -161,7 +162,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
}
}
private
findBestTrials
():
Trial
[]
{
private
findBestTrials
():
Trial
[]
{
le
t
bestTrials
=
TRIALS
.
sort
();
cons
t
bestTrials
=
TRIALS
.
sort
();
if
(
this
.
props
.
metricGraphMode
===
'
max
'
)
{
if
(
this
.
props
.
metricGraphMode
===
'
max
'
)
{
bestTrials
.
reverse
().
splice
(
10
);
bestTrials
.
reverse
().
splice
(
10
);
}
else
{
}
else
{
...
...
src/webui/src/components/SlideBar.tsx
View file @
56be400c
...
@@ -50,7 +50,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -50,7 +50,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
};
};
}
}
getNNIversion
=
()
=>
{
getNNIversion
=
()
:
void
=>
{
axios
(
`
${
MANAGER_IP
}
/version`
,
{
axios
(
`
${
MANAGER_IP
}
/version`
,
{
method
:
'
GET
'
method
:
'
GET
'
})
})
...
@@ -61,7 +61,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -61,7 +61,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
});
});
}
}
handleMenuClick
=
(
e
:
EventPer
)
=>
{
handleMenuClick
=
(
e
:
EventPer
)
:
void
=>
{
this
.
setState
({
menuVisible
:
false
});
this
.
setState
({
menuVisible
:
false
});
switch
(
e
.
key
)
{
switch
(
e
.
key
)
{
// to see & download experiment parameters
// to see & download experiment parameters
...
@@ -87,11 +87,11 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -87,11 +87,11 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
}
}
}
}
handleVisibleChange
=
(
flag
:
boolean
)
=>
{
handleVisibleChange
=
(
flag
:
boolean
)
:
void
=>
{
this
.
setState
({
menuVisible
:
flag
});
this
.
setState
({
menuVisible
:
flag
});
}
}
getInterval
=
(
value
:
string
)
=>
{
getInterval
=
(
value
:
string
)
:
void
=>
{
if
(
value
===
'
close
'
)
{
if
(
value
===
'
close
'
)
{
this
.
props
.
changeInterval
(
0
);
this
.
props
.
changeInterval
(
0
);
}
else
{
}
else
{
...
@@ -99,7 +99,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -99,7 +99,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
}
}
}
}
menu
=
()
=>
{
menu
=
()
:
any
=>
{
return
(
return
(
<
Menu
onClick
=
{
this
.
handleMenuClick
}
>
<
Menu
onClick
=
{
this
.
handleMenuClick
}
>
<
Menu
.
Item
key
=
"1"
>
Experiment Parameters
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"1"
>
Experiment Parameters
</
Menu
.
Item
>
...
@@ -110,14 +110,14 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -110,14 +110,14 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
}
}
// nav bar
// nav bar
navigationBar
=
()
=>
{
navigationBar
=
()
:
any
=>
{
const
{
version
}
=
this
.
state
;
const
{
version
}
=
this
.
state
;
const
feedBackLink
=
`https://github.com/Microsoft/nni/issues/new?labels=
${
version
}
`
;
const
feedBackLink
=
`https://github.com/Microsoft/nni/issues/new?labels=
${
version
}
`
;
return
(
return
(
<
Menu
onClick
=
{
this
.
handleMenuClick
}
className
=
"menu-list"
style
=
{
{
width
:
216
}
}
>
<
Menu
onClick
=
{
this
.
handleMenuClick
}
className
=
"menu-list"
style
=
{
{
width
:
216
}
}
>
{
/* <Menu onClick={this.handleMenuClick} className="menu-list" style={{width: window.innerWidth}}> */
}
{
/* <Menu onClick={this.handleMenuClick} className="menu-list" style={{width: window.innerWidth}}> */
}
<
Menu
.
Item
key
=
"feedback"
>
<
Menu
.
Item
key
=
"feedback"
>
<
a
href
=
{
feedBackLink
}
target
=
"_blank"
>
Feedback
</
a
>
<
a
href
=
{
feedBackLink
}
rel
=
"noopener noreferrer"
target
=
"_blank"
>
Feedback
</
a
>
</
Menu
.
Item
>
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"version"
>
Version:
{
version
}
</
Menu
.
Item
>
<
Menu
.
Item
key
=
"version"
>
Version:
{
version
}
</
Menu
.
Item
>
<
SubMenu
<
SubMenu
...
@@ -137,7 +137,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -137,7 +137,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
);
);
}
}
mobileTabs
=
()
=>
{
mobileTabs
=
()
:
any
=>
{
return
(
return
(
// <Menu className="menuModal" style={{width: 880, position: 'fixed', left: 0, top: 56}}>
// <Menu className="menuModal" style={{width: 880, position: 'fixed', left: 0, top: 56}}>
<
Menu
className
=
"menuModal"
style
=
{
{
padding
:
'
0 10px
'
}
}
>
<
Menu
className
=
"menuModal"
style
=
{
{
padding
:
'
0 10px
'
}
}
>
...
@@ -147,7 +147,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -147,7 +147,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
);
);
}
}
refreshInterval
=
()
=>
{
refreshInterval
=
()
:
any
=>
{
const
{
const
{
form
:
{
getFieldDecorator
},
form
:
{
getFieldDecorator
},
// form: { getFieldDecorator, getFieldValue },
// form: { getFieldDecorator, getFieldValue },
...
@@ -171,7 +171,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -171,7 +171,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
);
);
}
}
select
=
()
=>
{
select
=
()
:
any
=>
{
const
{
isdisabledFresh
}
=
this
.
state
;
const
{
isdisabledFresh
}
=
this
.
state
;
return
(
return
(
...
@@ -189,7 +189,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -189,7 +189,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
);
);
}
}
fresh
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
)
=>
{
fresh
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
)
:
void
=>
{
event
.
preventDefault
();
event
.
preventDefault
();
event
.
stopPropagation
();
event
.
stopPropagation
();
this
.
setState
({
isdisabledFresh
:
true
},
()
=>
{
this
.
setState
({
isdisabledFresh
:
true
},
()
=>
{
...
@@ -197,7 +197,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -197,7 +197,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
});
});
}
}
desktopHTML
=
()
=>
{
desktopHTML
=
()
:
any
=>
{
const
{
version
,
menuVisible
}
=
this
.
state
;
const
{
version
,
menuVisible
}
=
this
.
state
;
const
feed
=
`https://github.com/Microsoft/nni/issues/new?labels=
${
version
}
`
;
const
feed
=
`https://github.com/Microsoft/nni/issues/new?labels=
${
version
}
`
;
return
(
return
(
...
@@ -213,7 +213,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -213,7 +213,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
className
=
"fresh"
className
=
"fresh"
type
=
"ghost"
type
=
"ghost"
>
>
<
a
target
=
"_blank"
href
=
"https://nni.readthedocs.io/en/latest/Tutorial/WebUI.html"
>
<
a
target
=
"_blank"
rel
=
"noopener noreferrer"
href
=
"https://nni.readthedocs.io/en/latest/Tutorial/WebUI.html"
>
<
img
<
img
src
=
{
require
(
'
../static/img/icon/ques.png
'
)
}
src
=
{
require
(
'
../static/img/icon/ques.png
'
)
}
alt
=
"question"
alt
=
"question"
...
@@ -246,7 +246,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -246,7 +246,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
</
Dropdown
>
</
Dropdown
>
</
span
>
</
span
>
<
span
className
=
"feedback"
>
<
span
className
=
"feedback"
>
<
a
href
=
{
feed
}
target
=
"_blank"
>
<
a
href
=
{
feed
}
target
=
"_blank"
rel
=
"noopener noreferrer"
>
<
img
<
img
src
=
{
require
(
'
../static/img/icon/issue.png
'
)
}
src
=
{
require
(
'
../static/img/icon/issue.png
'
)
}
alt
=
"NNI github issue"
alt
=
"NNI github issue"
...
@@ -260,7 +260,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -260,7 +260,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
);
);
}
}
tabeltHTML
=
()
=>
{
tabeltHTML
=
()
:
any
=>
{
return
(
return
(
<
Row
className
=
"nav"
>
<
Row
className
=
"nav"
>
<
Col
className
=
"tabelt-left"
span
=
{
14
}
>
<
Col
className
=
"tabelt-left"
span
=
{
14
}
>
...
@@ -280,7 +280,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -280,7 +280,7 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
);
);
}
}
mobileHTML
=
()
=>
{
mobileHTML
=
()
:
any
=>
{
const
{
isdisabledFresh
}
=
this
.
state
;
const
{
isdisabledFresh
}
=
this
.
state
;
return
(
return
(
<
Row
className
=
"nav"
>
<
Row
className
=
"nav"
>
...
@@ -319,20 +319,20 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
...
@@ -319,20 +319,20 @@ class SlideBar extends React.Component<SliderProps, SliderState> {
);
);
}
}
// close log drawer (nnimanager.dispatcher)
// close log drawer (nnimanager.dispatcher)
closeLogDrawer
=
()
=>
{
closeLogDrawer
=
()
:
void
=>
{
this
.
setState
({
isvisibleLogDrawer
:
false
,
activeKey
:
''
});
this
.
setState
({
isvisibleLogDrawer
:
false
,
activeKey
:
''
});
}
}
// close download experiment parameters drawer
// close download experiment parameters drawer
closeExpDrawer
=
()
=>
{
closeExpDrawer
=
()
:
void
=>
{
this
.
setState
({
isvisibleExperimentDrawer
:
false
});
this
.
setState
({
isvisibleExperimentDrawer
:
false
});
}
}
componentDidMount
()
{
componentDidMount
()
:
void
{
this
.
getNNIversion
();
this
.
getNNIversion
();
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
mobile
=
(<
MediaQuery
maxWidth
=
{
884
}
>
{
this
.
mobileHTML
()
}
</
MediaQuery
>);
const
mobile
=
(<
MediaQuery
maxWidth
=
{
884
}
>
{
this
.
mobileHTML
()
}
</
MediaQuery
>);
const
tablet
=
(<
MediaQuery
minWidth
=
{
885
}
maxWidth
=
{
1281
}
>
{
this
.
tabeltHTML
()
}
</
MediaQuery
>);
const
tablet
=
(<
MediaQuery
minWidth
=
{
885
}
maxWidth
=
{
1281
}
>
{
this
.
tabeltHTML
()
}
</
MediaQuery
>);
const
desktop
=
(<
MediaQuery
minWidth
=
{
1282
}
>
{
this
.
desktopHTML
()
}
</
MediaQuery
>);
const
desktop
=
(<
MediaQuery
minWidth
=
{
1282
}
>
{
this
.
desktopHTML
()
}
</
MediaQuery
>);
...
...
src/webui/src/components/TrialsDetail.tsx
View file @
56be400c
...
@@ -60,13 +60,15 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
...
@@ -60,13 +60,15 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
tablePageSize
:
20
,
tablePageSize
:
20
,
whichGraph
:
'
1
'
,
whichGraph
:
'
1
'
,
searchType
:
'
id
'
,
searchType
:
'
id
'
,
searchFilter
:
trial
=>
true
,
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/no-unused-vars
searchFilter
:
trial
=>
true
};
};
}
}
// search a trial by trial No. & trial id
// search a trial by trial No. & trial id
searchTrial
=
(
event
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
=>
{
searchTrial
=
(
event
:
React
.
ChangeEvent
<
HTMLInputElement
>
)
:
void
=>
{
const
targetValue
=
event
.
target
.
value
;
const
targetValue
=
event
.
target
.
value
;
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/no-unused-vars
let
filter
=
(
trial
:
Trial
)
=>
true
;
let
filter
=
(
trial
:
Trial
)
=>
true
;
if
(
!
targetValue
.
trim
())
{
if
(
!
targetValue
.
trim
())
{
this
.
setState
({
searchFilter
:
filter
});
this
.
setState
({
searchFilter
:
filter
});
...
@@ -74,17 +76,17 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
...
@@ -74,17 +76,17 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
}
}
switch
(
this
.
state
.
searchType
)
{
switch
(
this
.
state
.
searchType
)
{
case
'
id
'
:
case
'
id
'
:
filter
=
trial
=>
trial
.
info
.
id
.
toUpperCase
().
includes
(
targetValue
.
toUpperCase
());
filter
=
(
trial
):
boolean
=>
trial
.
info
.
id
.
toUpperCase
().
includes
(
targetValue
.
toUpperCase
());
break
;
break
;
case
'
Trial No.
'
:
case
'
Trial No.
'
:
filter
=
trial
=>
trial
.
info
.
sequenceId
.
toString
()
===
targetValue
;
filter
=
(
trial
):
boolean
=>
trial
.
info
.
sequenceId
.
toString
()
===
targetValue
;
break
;
break
;
case
'
status
'
:
case
'
status
'
:
filter
=
trial
=>
trial
.
info
.
status
.
toUpperCase
().
includes
(
targetValue
.
toUpperCase
());
filter
=
(
trial
):
boolean
=>
trial
.
info
.
status
.
toUpperCase
().
includes
(
targetValue
.
toUpperCase
());
break
;
break
;
case
'
parameters
'
:
case
'
parameters
'
:
// TODO: support filters like `x: 2` (instead of `"x": 2`)
// TODO: support filters like `x: 2` (instead of `"x": 2`)
filter
=
trial
=>
JSON
.
stringify
(
trial
.
info
.
hyperParameters
,
null
,
4
).
includes
(
targetValue
);
filter
=
(
trial
):
boolean
=>
JSON
.
stringify
(
trial
.
info
.
hyperParameters
,
null
,
4
).
includes
(
targetValue
);
break
;
break
;
default
:
default
:
alert
(
`Unexpected search filter
${
this
.
state
.
searchType
}
`
);
alert
(
`Unexpected search filter
${
this
.
state
.
searchType
}
`
);
...
@@ -92,15 +94,15 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
...
@@ -92,15 +94,15 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
this
.
setState
({
searchFilter
:
filter
});
this
.
setState
({
searchFilter
:
filter
});
}
}
handleTablePageSizeSelect
=
(
value
:
string
)
=>
{
handleTablePageSizeSelect
=
(
value
:
string
)
:
void
=>
{
this
.
setState
({
tablePageSize
:
value
===
'
all
'
?
-
1
:
parseInt
(
value
,
10
)
});
this
.
setState
({
tablePageSize
:
value
===
'
all
'
?
-
1
:
parseInt
(
value
,
10
)
});
}
}
handleWhichTabs
=
(
activeKey
:
string
)
=>
{
handleWhichTabs
=
(
activeKey
:
string
)
:
void
=>
{
this
.
setState
({
whichGraph
:
activeKey
});
this
.
setState
({
whichGraph
:
activeKey
});
}
}
updateSearchFilterType
=
(
value
:
string
)
=>
{
updateSearchFilterType
=
(
value
:
string
)
:
void
=>
{
// clear input value and re-render table
// clear input value and re-render table
if
(
this
.
searchInput
!==
null
)
{
if
(
this
.
searchInput
!==
null
)
{
this
.
searchInput
.
value
=
''
;
this
.
searchInput
.
value
=
''
;
...
@@ -108,7 +110,7 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
...
@@ -108,7 +110,7 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
this
.
setState
({
searchType
:
value
});
this
.
setState
({
searchType
:
value
});
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
tablePageSize
,
whichGraph
}
=
this
.
state
;
const
{
tablePageSize
,
whichGraph
}
=
this
.
state
;
const
{
columnList
,
changeColumn
}
=
this
.
props
;
const
{
columnList
,
changeColumn
}
=
this
.
props
;
const
source
=
TRIALS
.
filter
(
this
.
state
.
searchFilter
);
const
source
=
TRIALS
.
filter
(
this
.
state
.
searchFilter
);
...
@@ -163,14 +165,14 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
...
@@ -163,14 +165,14 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
<
Col
span
=
{
14
}
className
=
"right"
>
<
Col
span
=
{
14
}
className
=
"right"
>
<
Button
<
Button
className
=
"common"
className
=
"common"
onClick
=
{
()
=>
{
if
(
this
.
tableList
)
{
this
.
tableList
.
addColumn
();
}}
}
onClick
=
{
()
:
void
=>
{
if
(
this
.
tableList
)
{
this
.
tableList
.
addColumn
();
}}
}
>
>
Add column
Add column
</
Button
>
</
Button
>
<
Button
<
Button
className
=
"mediateBtn common"
className
=
"mediateBtn common"
// use child-component tableList's function, the function is in child-component.
// use child-component tableList's function, the function is in child-component.
onClick
=
{
()
=>
{
if
(
this
.
tableList
)
{
this
.
tableList
.
compareBtn
();
}}
}
onClick
=
{
()
:
void
=>
{
if
(
this
.
tableList
)
{
this
.
tableList
.
compareBtn
();
}}
}
>
>
Compare
Compare
</
Button
>
</
Button
>
...
@@ -186,6 +188,7 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
...
@@ -186,6 +188,7 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
placeholder
=
{
`Search by
${
this
.
state
.
searchType
}
`
}
placeholder
=
{
`Search by
${
this
.
state
.
searchType
}
`
}
onChange
=
{
this
.
searchTrial
}
onChange
=
{
this
.
searchTrial
}
style
=
{
{
width
:
230
}
}
style
=
{
{
width
:
230
}
}
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
ref
=
{
text
=>
(
this
.
searchInput
)
=
text
}
ref
=
{
text
=>
(
this
.
searchInput
)
=
text
}
/>
/>
</
Col
>
</
Col
>
...
@@ -196,7 +199,7 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
...
@@ -196,7 +199,7 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
columnList
=
{
columnList
}
columnList
=
{
columnList
}
changeColumn
=
{
changeColumn
}
changeColumn
=
{
changeColumn
}
trialsUpdateBroadcast
=
{
this
.
props
.
trialsUpdateBroadcast
}
trialsUpdateBroadcast
=
{
this
.
props
.
trialsUpdateBroadcast
}
ref
=
{
(
tabList
)
=>
this
.
tableList
=
tabList
}
ref
=
{
(
tabList
)
=>
this
.
tableList
=
tabList
}
// eslint-disable-line @typescript-eslint/explicit-function-return-type
/>
/>
</
div
>
</
div
>
);
);
...
...
src/webui/src/components/overview/Accuracy.tsx
View file @
56be400c
...
@@ -21,7 +21,7 @@ class Accuracy extends React.Component<AccuracyProps, {}> {
...
@@ -21,7 +21,7 @@ class Accuracy extends React.Component<AccuracyProps, {}> {
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
accNodata
,
accuracyData
,
height
}
=
this
.
props
;
const
{
accNodata
,
accuracyData
,
height
}
=
this
.
props
;
return
(
return
(
<
div
>
<
div
>
...
...
src/webui/src/components/overview/BasicInfo.tsx
View file @
56be400c
...
@@ -12,7 +12,7 @@ class BasicInfo extends React.Component<BasicInfoProps, {}> {
...
@@ -12,7 +12,7 @@ class BasicInfo extends React.Component<BasicInfoProps, {}> {
super
(
props
);
super
(
props
);
}
}
render
()
{
render
()
:
React
.
ReactNode
{
return
(
return
(
<
Row
className
=
"main"
>
<
Row
className
=
"main"
>
<
Col
span
=
{
8
}
className
=
"padItem basic"
>
<
Col
span
=
{
8
}
className
=
"padItem basic"
>
...
...
src/webui/src/components/overview/NumInput.tsx
View file @
56be400c
...
@@ -18,22 +18,22 @@ class ConcurrencyInput extends React.Component<ConcurrencyInputProps, Concurrenc
...
@@ -18,22 +18,22 @@ class ConcurrencyInput extends React.Component<ConcurrencyInputProps, Concurrenc
this
.
state
=
{
editting
:
false
};
this
.
state
=
{
editting
:
false
};
}
}
save
=
()
=>
{
save
=
()
:
void
=>
{
if
(
this
.
input
.
current
!==
null
)
{
if
(
this
.
input
.
current
!==
null
)
{
this
.
props
.
updateValue
(
this
.
input
.
current
.
value
);
this
.
props
.
updateValue
(
this
.
input
.
current
.
value
);
this
.
setState
({
editting
:
false
});
this
.
setState
({
editting
:
false
});
}
}
}
}
cancel
=
()
=>
{
cancel
=
()
:
void
=>
{
this
.
setState
({
editting
:
false
});
this
.
setState
({
editting
:
false
});
}
}
edit
=
()
=>
{
edit
=
()
:
void
=>
{
this
.
setState
({
editting
:
true
});
this
.
setState
({
editting
:
true
});
}
}
render
()
{
render
()
:
React
.
ReactNode
{
if
(
this
.
state
.
editting
)
{
if
(
this
.
state
.
editting
)
{
return
(
return
(
<
Row
className
=
"inputBox"
>
<
Row
className
=
"inputBox"
>
...
...
src/webui/src/components/overview/Progress.tsx
View file @
56be400c
...
@@ -29,7 +29,7 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
...
@@ -29,7 +29,7 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
};
};
}
}
editTrialConcurrency
=
async
(
userInput
:
string
)
=>
{
editTrialConcurrency
=
async
(
userInput
:
string
)
:
Promise
<
void
>
=>
{
if
(
!
userInput
.
match
(
/^
[
1-9
]\d
*$/
))
{
if
(
!
userInput
.
match
(
/^
[
1-9
]\d
*$/
))
{
message
.
error
(
'
Please enter a positive integer!
'
,
2
);
message
.
error
(
'
Please enter a positive integer!
'
,
2
);
return
;
return
;
...
@@ -46,6 +46,7 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
...
@@ -46,6 +46,7 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
// rest api, modify trial concurrency value
// rest api, modify trial concurrency value
try
{
try
{
const
res
=
await
axios
.
put
(
`
${
MANAGER_IP
}
/experiment`
,
newProfile
,
{
const
res
=
await
axios
.
put
(
`
${
MANAGER_IP
}
/experiment`
,
newProfile
,
{
// eslint-disable-next-line @typescript-eslint/camelcase
params
:
{
update_type
:
'
TRIAL_CONCURRENCY
'
}
params
:
{
update_type
:
'
TRIAL_CONCURRENCY
'
}
});
});
if
(
res
.
status
===
200
)
{
if
(
res
.
status
===
200
)
{
...
@@ -66,20 +67,22 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
...
@@ -66,20 +67,22 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
}
}
}
}
isShowDrawer
=
()
=>
{
isShowDrawer
=
()
:
void
=>
{
this
.
setState
({
isShowLogDrawer
:
true
});
this
.
setState
({
isShowLogDrawer
:
true
});
}
}
closeDrawer
=
()
=>
{
closeDrawer
=
()
:
void
=>
{
this
.
setState
({
isShowLogDrawer
:
false
});
this
.
setState
({
isShowLogDrawer
:
false
});
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
bestAccuracy
}
=
this
.
props
;
const
{
bestAccuracy
}
=
this
.
props
;
const
{
isShowLogDrawer
}
=
this
.
state
;
const
{
isShowLogDrawer
}
=
this
.
state
;
const
count
=
TRIALS
.
countStatus
();
const
count
=
TRIALS
.
countStatus
();
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const
stoppedCount
=
count
.
get
(
'
USER_CANCELED
'
)
!
+
count
.
get
(
'
SYS_CANCELED
'
)
!
+
count
.
get
(
'
EARLY_STOPPED
'
)
!
;
const
stoppedCount
=
count
.
get
(
'
USER_CANCELED
'
)
!
+
count
.
get
(
'
SYS_CANCELED
'
)
!
+
count
.
get
(
'
EARLY_STOPPED
'
)
!
;
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const
bar2
=
count
.
get
(
'
RUNNING
'
)
!
+
count
.
get
(
'
SUCCEEDED
'
)
!
+
count
.
get
(
'
FAILED
'
)
!
+
stoppedCount
;
const
bar2
=
count
.
get
(
'
RUNNING
'
)
!
+
count
.
get
(
'
SUCCEEDED
'
)
!
+
count
.
get
(
'
FAILED
'
)
!
+
stoppedCount
;
const
bar2Percent
=
(
bar2
/
EXPERIMENT
.
profile
.
params
.
maxTrialNum
)
*
100
;
const
bar2Percent
=
(
bar2
/
EXPERIMENT
.
profile
.
params
.
maxTrialNum
)
*
100
;
...
@@ -98,6 +101,7 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
...
@@ -98,6 +101,7 @@ class Progressed extends React.Component<ProgressProps, ProgressState> {
</
div
>
</
div
>
);
);
}
}
return
(
return
(
<
Row
className
=
"progress"
id
=
"barBack"
>
<
Row
className
=
"progress"
id
=
"barBack"
>
<
Row
className
=
"basic lineBasic"
>
<
Row
className
=
"basic lineBasic"
>
...
...
src/webui/src/components/overview/ProgressItem.tsx
View file @
56be400c
...
@@ -16,7 +16,7 @@ class ProgressBar extends React.Component<ProItemProps, {}> {
...
@@ -16,7 +16,7 @@ class ProgressBar extends React.Component<ProItemProps, {}> {
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
who
,
percent
,
description
,
maxString
,
bgclass
}
=
this
.
props
;
const
{
who
,
percent
,
description
,
maxString
,
bgclass
}
=
this
.
props
;
return
(
return
(
...
@@ -31,7 +31,7 @@ class ProgressBar extends React.Component<ProItemProps, {}> {
...
@@ -31,7 +31,7 @@ class ProgressBar extends React.Component<ProItemProps, {}> {
percent
=
{
percent
}
percent
=
{
percent
}
strokeWidth
=
{
30
}
strokeWidth
=
{
30
}
// strokeLinecap={'square'}
// strokeLinecap={'square'}
format
=
{
()
=>
description
}
format
=
{
()
:
string
=>
description
}
/>
/>
</
div
>
</
div
>
<
Row
className
=
"description"
>
<
Row
className
=
"description"
>
...
...
src/webui/src/components/overview/SearchSpace.tsx
View file @
56be400c
...
@@ -13,7 +13,7 @@ class SearchSpace extends React.Component<SearchspaceProps, {}> {
...
@@ -13,7 +13,7 @@ class SearchSpace extends React.Component<SearchspaceProps, {}> {
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
searchSpace
}
=
this
.
props
;
const
{
searchSpace
}
=
this
.
props
;
return
(
return
(
<
div
className
=
"searchSpace"
>
<
div
className
=
"searchSpace"
>
...
...
src/webui/src/components/overview/SuccessTable.tsx
View file @
56be400c
...
@@ -12,7 +12,7 @@ interface SuccessTableProps {
...
@@ -12,7 +12,7 @@ interface SuccessTableProps {
trialIds
:
string
[];
trialIds
:
string
[];
}
}
function
openRow
(
record
:
TableRecord
)
{
function
openRow
(
record
:
TableRecord
)
:
any
{
return
(
return
(
<
OpenRow
trialId
=
{
record
.
id
}
/>
<
OpenRow
trialId
=
{
record
.
id
}
/>
);
);
...
@@ -23,7 +23,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
...
@@ -23,7 +23,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
super
(
props
);
super
(
props
);
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
columns
=
[
const
columns
=
[
{
{
title
:
'
Trial No.
'
,
title
:
'
Trial No.
'
,
...
@@ -35,7 +35,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
...
@@ -35,7 +35,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
dataIndex
:
'
id
'
,
dataIndex
:
'
id
'
,
width
:
60
,
width
:
60
,
className
:
'
tableHead leftTitle
'
,
className
:
'
tableHead leftTitle
'
,
render
:
(
text
:
string
,
record
:
TableRecord
)
=>
{
render
:
(
text
:
string
,
record
:
TableRecord
)
:
React
.
ReactNode
=>
{
return
(
return
(
<
div
>
{
record
.
id
}
</
div
>
<
div
>
{
record
.
id
}
</
div
>
);
);
...
@@ -44,7 +44,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
...
@@ -44,7 +44,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
title
:
'
Duration
'
,
title
:
'
Duration
'
,
dataIndex
:
'
duration
'
,
dataIndex
:
'
duration
'
,
width
:
140
,
width
:
140
,
render
:
(
text
:
string
,
record
:
TableRecord
)
=>
{
render
:
(
text
:
string
,
record
:
TableRecord
)
:
React
.
ReactNode
=>
{
return
(
return
(
<
div
className
=
"durationsty"
><
div
>
{
convertDuration
(
record
.
duration
)
}
</
div
></
div
>
<
div
className
=
"durationsty"
><
div
>
{
convertDuration
(
record
.
duration
)
}
</
div
></
div
>
);
);
...
@@ -54,7 +54,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
...
@@ -54,7 +54,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
dataIndex
:
'
status
'
,
dataIndex
:
'
status
'
,
width
:
150
,
width
:
150
,
className
:
'
tableStatus
'
,
className
:
'
tableStatus
'
,
render
:
(
text
:
string
,
record
:
TableRecord
)
=>
{
render
:
(
text
:
string
,
record
:
TableRecord
)
:
React
.
ReactNode
=>
{
return
(
return
(
<
div
className
=
{
`
${
record
.
status
}
commonStyle`
}
>
{
record
.
status
}
</
div
>
<
div
className
=
{
`
${
record
.
status
}
commonStyle`
}
>
{
record
.
status
}
</
div
>
);
);
...
@@ -62,7 +62,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
...
@@ -62,7 +62,7 @@ class SuccessTable extends React.Component<SuccessTableProps, {}> {
},
{
},
{
title
:
'
Default metric
'
,
title
:
'
Default metric
'
,
dataIndex
:
'
accuracy
'
,
dataIndex
:
'
accuracy
'
,
render
:
(
text
:
string
,
record
:
TableRecord
)
=>
{
render
:
(
text
:
string
,
record
:
TableRecord
)
:
React
.
ReactNode
=>
{
return
(
return
(
<
DefaultMetric
trialId
=
{
record
.
id
}
/>
<
DefaultMetric
trialId
=
{
record
.
id
}
/>
);
);
...
...
src/webui/src/components/overview/Title1.tsx
View file @
56be400c
...
@@ -12,7 +12,7 @@ class Title1 extends React.Component<Title1Props, {}> {
...
@@ -12,7 +12,7 @@ class Title1 extends React.Component<Title1Props, {}> {
super
(
props
);
super
(
props
);
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
{
text
,
icon
,
bgcolor
}
=
this
.
props
;
const
{
text
,
icon
,
bgcolor
}
=
this
.
props
;
return
(
return
(
<
div
>
<
div
>
...
...
src/webui/src/components/overview/TrialProfile.tsx
View file @
56be400c
...
@@ -14,12 +14,12 @@ class TrialInfo extends React.Component<TrialInfoProps, {}> {
...
@@ -14,12 +14,12 @@ class TrialInfo extends React.Component<TrialInfoProps, {}> {
super
(
props
);
super
(
props
);
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
blacklist
=
[
const
blacklist
=
[
'
id
'
,
'
logDir
'
,
'
startTime
'
,
'
endTime
'
,
'
id
'
,
'
logDir
'
,
'
startTime
'
,
'
endTime
'
,
'
experimentName
'
,
'
searchSpace
'
,
'
trainingServicePlatform
'
'
experimentName
'
,
'
searchSpace
'
,
'
trainingServicePlatform
'
];
];
const
filter
=
(
key
:
string
,
val
:
any
)
=>
{
const
filter
=
(
key
:
string
,
val
:
any
)
:
any
=>
{
if
(
key
===
'
trialConcurrency
'
)
{
if
(
key
===
'
trialConcurrency
'
)
{
return
this
.
props
.
concurrency
;
return
this
.
props
.
concurrency
;
}
}
...
...
src/webui/src/components/public-child/DefaultMetrc.tsx
View file @
56be400c
...
@@ -11,7 +11,7 @@ class DefaultMetric extends React.Component<DefaultMetricProps, {}> {
...
@@ -11,7 +11,7 @@ class DefaultMetric extends React.Component<DefaultMetricProps, {}> {
super
(
props
);
super
(
props
);
}
}
render
()
{
render
()
:
React
.
ReactNode
{
const
accuracy
=
TRIALS
.
getTrial
(
this
.
props
.
trialId
).
accuracy
;
const
accuracy
=
TRIALS
.
getTrial
(
this
.
props
.
trialId
).
accuracy
;
return
(
return
(
<
div
>
{
accuracy
!==
undefined
?
formatAccuracy
(
accuracy
)
:
'
--
'
}
</
div
>
<
div
>
{
accuracy
!==
undefined
?
formatAccuracy
(
accuracy
)
:
'
--
'
}
</
div
>
...
...
Prev
1
2
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment