Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenDAS
nni
Commits
af800213
Unverified
Commit
af800213
authored
May 11, 2020
by
Lijiaoa
Committed by
GitHub
May 11, 2020
Browse files
refactor best trials (#2417)
Co-authored-by:
Lijiao
<
15910218274@163.com
>
parent
3efc59ee
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
128 additions
and
92 deletions
+128
-92
src/webui/src/App.scss
src/webui/src/App.scss
+12
-1
src/webui/src/App.tsx
src/webui/src/App.tsx
+11
-3
src/webui/src/components/Overview.tsx
src/webui/src/components/Overview.tsx
+44
-16
src/webui/src/components/TrialsDetail.tsx
src/webui/src/components/TrialsDetail.tsx
+46
-45
src/webui/src/components/overview/BasicInfo.tsx
src/webui/src/components/overview/BasicInfo.tsx
+6
-0
src/webui/src/components/overview/Title1.tsx
src/webui/src/components/overview/Title1.tsx
+4
-4
src/webui/src/static/style/overview.scss
src/webui/src/static/style/overview.scss
+0
-1
src/webui/src/static/style/overviewTitle.scss
src/webui/src/static/style/overviewTitle.scss
+3
-10
src/webui/src/static/style/trialsDetail.scss
src/webui/src/static/style/trialsDetail.scss
+2
-12
No files found.
src/webui/src/App.scss
View file @
af800213
...
@@ -29,7 +29,18 @@
...
@@ -29,7 +29,18 @@
margin
:
0
auto
;
margin
:
0
auto
;
margin-top
:
74px
;
margin-top
:
74px
;
margin-bottom
:
30px
;
margin-bottom
:
30px
;
background
:
#fff
;
}
.bottomDiv
{
margin-bottom
:
10px
;
}
.bgNNI
{
background-color
:
#fff
;
}
.borderRight
{
margin-right
:
10px
;
}
}
/* office-fabric-ui */
/* office-fabric-ui */
...
...
src/webui/src/App.tsx
View file @
af800213
...
@@ -14,6 +14,7 @@ interface AppState {
...
@@ -14,6 +14,7 @@ interface AppState {
metricGraphMode
:
'
max
'
|
'
min
'
;
// tuner's optimize_mode filed
metricGraphMode
:
'
max
'
|
'
min
'
;
// tuner's optimize_mode filed
isillegalFinal
:
boolean
;
isillegalFinal
:
boolean
;
expWarningMessage
:
string
;
expWarningMessage
:
string
;
bestTrialEntries
:
string
;
// for overview page: best trial entreis
}
}
class
App
extends
React
.
Component
<
{},
AppState
>
{
class
App
extends
React
.
Component
<
{},
AppState
>
{
...
@@ -30,7 +31,8 @@ class App extends React.Component<{}, AppState> {
...
@@ -30,7 +31,8 @@ class App extends React.Component<{}, AppState> {
trialsUpdateBroadcast
:
0
,
trialsUpdateBroadcast
:
0
,
metricGraphMode
:
'
max
'
,
metricGraphMode
:
'
max
'
,
isillegalFinal
:
false
,
isillegalFinal
:
false
,
expWarningMessage
:
''
expWarningMessage
:
''
,
bestTrialEntries
:
'
10
'
};
};
}
}
...
@@ -92,9 +94,14 @@ class App extends React.Component<{}, AppState> {
...
@@ -92,9 +94,14 @@ class App extends React.Component<{}, AppState> {
this
.
setState
({
metricGraphMode
:
val
});
this
.
setState
({
metricGraphMode
:
val
});
}
}
// overview best trial module
changeEntries
=
(
entries
:
string
):
void
=>
{
this
.
setState
({
bestTrialEntries
:
entries
});
}
render
():
React
.
ReactNode
{
render
():
React
.
ReactNode
{
const
{
interval
,
columnList
,
experimentUpdateBroadcast
,
trialsUpdateBroadcast
,
const
{
interval
,
columnList
,
experimentUpdateBroadcast
,
trialsUpdateBroadcast
,
metricGraphMode
,
isillegalFinal
,
expWarningMessage
metricGraphMode
,
isillegalFinal
,
expWarningMessage
,
bestTrialEntries
}
=
this
.
state
;
}
=
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
...
@@ -106,7 +113,8 @@ class App extends React.Component<{}, AppState> {
...
@@ -106,7 +113,8 @@ class App extends React.Component<{}, AppState> {
columnList
,
changeColumn
:
this
.
changeColumn
,
columnList
,
changeColumn
:
this
.
changeColumn
,
experimentUpdateBroadcast
,
experimentUpdateBroadcast
,
trialsUpdateBroadcast
,
trialsUpdateBroadcast
,
metricGraphMode
,
changeMetricGraphMode
:
this
.
changeMetricGraphMode
metricGraphMode
,
changeMetricGraphMode
:
this
.
changeMetricGraphMode
,
bestTrialEntries
,
changeEntries
:
this
.
changeEntries
})
})
);
);
...
...
src/webui/src/components/Overview.tsx
View file @
af800213
import
*
as
React
from
'
react
'
;
import
*
as
React
from
'
react
'
;
import
{
Stack
,
IStackTokens
}
from
'
office-ui-fabric-react
'
;
import
{
Stack
,
IStackTokens
,
Dropdown
}
from
'
office-ui-fabric-react
'
;
import
{
EXPERIMENT
,
TRIALS
}
from
'
../static/datamodel
'
;
import
{
EXPERIMENT
,
TRIALS
}
from
'
../static/datamodel
'
;
import
{
Trial
}
from
'
../static/model/trial
'
;
import
{
Trial
}
from
'
../static/model/trial
'
;
import
Title1
from
'
./overview/Title1
'
;
import
Title1
from
'
./overview/Title1
'
;
...
@@ -16,7 +16,9 @@ interface OverviewProps {
...
@@ -16,7 +16,9 @@ interface OverviewProps {
experimentUpdateBroadcast
:
number
;
experimentUpdateBroadcast
:
number
;
trialsUpdateBroadcast
:
number
;
trialsUpdateBroadcast
:
number
;
metricGraphMode
:
'
max
'
|
'
min
'
;
metricGraphMode
:
'
max
'
|
'
min
'
;
bestTrialEntries
:
string
;
changeMetricGraphMode
:
(
val
:
'
max
'
|
'
min
'
)
=>
void
;
changeMetricGraphMode
:
(
val
:
'
max
'
|
'
min
'
)
=>
void
;
changeEntries
:
(
entries
:
string
)
=>
void
;
}
}
interface
OverviewState
{
interface
OverviewState
{
...
@@ -38,6 +40,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -38,6 +40,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
changeMetricGraphMode
(
'
max
'
);
changeMetricGraphMode
(
'
max
'
);
}
}
clickMinTop
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
):
void
=>
{
clickMinTop
=
(
event
:
React
.
SyntheticEvent
<
EventTarget
>
):
void
=>
{
event
.
stopPropagation
();
event
.
stopPropagation
();
const
{
changeMetricGraphMode
}
=
this
.
props
;
const
{
changeMetricGraphMode
}
=
this
.
props
;
...
@@ -48,9 +51,16 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -48,9 +51,16 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
this
.
setState
({
trialConcurrency
:
val
});
this
.
setState
({
trialConcurrency
:
val
});
}
}
// updateEntries = (event: React.FormEvent<HTMLDivElement>, item: IDropdownOption | undefined): void => {
updateEntries
=
(
event
:
React
.
FormEvent
<
HTMLDivElement
>
,
item
:
any
):
void
=>
{
if
(
item
!==
undefined
)
{
this
.
props
.
changeEntries
(
item
.
key
);
}
}
render
():
React
.
ReactNode
{
render
():
React
.
ReactNode
{
const
{
trialConcurrency
}
=
this
.
state
;
const
{
trialConcurrency
}
=
this
.
state
;
const
{
experimentUpdateBroadcast
,
metricGraphMode
}
=
this
.
props
;
const
{
experimentUpdateBroadcast
,
metricGraphMode
,
bestTrialEntries
}
=
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
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
...
@@ -58,23 +68,31 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -58,23 +68,31 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
const
accuracyGraphData
=
this
.
generateAccuracyGraph
(
bestTrials
);
const
accuracyGraphData
=
this
.
generateAccuracyGraph
(
bestTrials
);
const
noDataMessage
=
bestTrials
.
length
>
0
?
''
:
'
No data
'
;
const
noDataMessage
=
bestTrials
.
length
>
0
?
''
:
'
No data
'
;
const
titleMaxbgcolor
=
(
metricGraphMode
===
'
max
'
?
'
#
999
'
:
'
#b3b3b3
'
);
const
titleMaxbgcolor
=
(
metricGraphMode
===
'
max
'
?
'
#
333
'
:
'
#b3b3b3
'
);
const
titleMinbgcolor
=
(
metricGraphMode
===
'
min
'
?
'
#
999
'
:
'
#b3b3b3
'
);
const
titleMinbgcolor
=
(
metricGraphMode
===
'
min
'
?
'
#
333
'
:
'
#b3b3b3
'
);
const
stackTokens
:
IStackTokens
=
{
const
stackTokens
:
IStackTokens
=
{
childrenGap
:
30
,
childrenGap
:
30
,
};
};
const
entriesOption
=
[
{
key
:
'
10
'
,
text
:
'
Display top 10 trials
'
},
{
key
:
'
20
'
,
text
:
'
Display top 20 trials
'
},
{
key
:
'
30
'
,
text
:
'
Display top 30 trials
'
},
{
key
:
'
50
'
,
text
:
'
Display top 50 trials
'
},
{
key
:
'
100
'
,
text
:
'
Display top 100 trials
'
}
];
return
(
return
(
<
div
className
=
"overview"
>
<
div
className
=
"overview"
>
{
/* status and experiment block */
}
{
/* status and experiment block */
}
<
Stack
>
<
Stack
className
=
"bottomDiv bgNNI"
>
<
Title1
text
=
"Experiment"
icon
=
"11.png"
/>
<
Title1
text
=
"Experiment"
icon
=
"11.png"
/>
<
BasicInfo
experimentUpdateBroadcast
=
{
experimentUpdateBroadcast
}
/>
<
BasicInfo
experimentUpdateBroadcast
=
{
experimentUpdateBroadcast
}
/>
</
Stack
>
</
Stack
>
<
Stack
horizontal
className
=
"overMessage"
>
<
Stack
horizontal
className
=
"overMessage
bottomDiv
"
>
{
/* status block */
}
{
/* status block */
}
<
Stack
.
Item
grow
className
=
"prograph
overviewBoder cc
"
>
<
Stack
.
Item
grow
className
=
"prograph
bgNNI borderRight
"
>
<
Title1
text
=
"Status"
icon
=
"5.png"
/>
<
Title1
text
=
"Status"
icon
=
"5.png"
/>
<
Progressed
<
Progressed
bestAccuracy
=
{
bestAccuracy
}
bestAccuracy
=
{
bestAccuracy
}
...
@@ -84,13 +102,14 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -84,13 +102,14 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
/>
/>
</
Stack
.
Item
>
</
Stack
.
Item
>
{
/* experiment parameters search space tuner assessor... */
}
{
/* experiment parameters search space tuner assessor... */
}
<
Stack
.
Item
grow
styles
=
{
{
root
:
{
width
:
450
}}
}
className
=
"overviewBoder"
>
<
Stack
.
Item
grow
styles
=
{
{
root
:
{
width
:
450
}}
}
className
=
"overviewBoder
borderRight bgNNI
"
>
<
Title1
text
=
"Search space"
icon
=
"10.png"
/>
<
Title1
text
=
"Search space"
icon
=
"10.png"
/>
<
Stack
className
=
"experiment"
>
<
Stack
className
=
"experiment"
>
<
SearchSpace
searchSpace
=
{
searchSpace
}
/>
<
SearchSpace
searchSpace
=
{
searchSpace
}
/>
</
Stack
>
</
Stack
>
</
Stack
.
Item
>
</
Stack
.
Item
>
<
Stack
.
Item
grow
styles
=
{
{
root
:
{
width
:
450
}}
}
>
{
/* <Stack.Item grow styles={{root: {width: 450}}} className="bgNNI"> */
}
<
Stack
.
Item
grow
styles
=
{
{
root
:
{
width
:
450
}}
}
className
=
"bgNNI"
>
<
Title1
text
=
"Config"
icon
=
"4.png"
/>
<
Title1
text
=
"Config"
icon
=
"4.png"
/>
<
Stack
className
=
"experiment"
>
<
Stack
className
=
"experiment"
>
{
/* the scroll bar all the trial profile in the searchSpace div*/
}
{
/* the scroll bar all the trial profile in the searchSpace div*/
}
...
@@ -104,19 +123,27 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -104,19 +123,27 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
</
Stack
.
Item
>
</
Stack
.
Item
>
</
Stack
>
</
Stack
>
<
Stack
>
<
Stack
style
=
{
{
backgroundColor
:
'
#fff
'
}
}
>
<
Stack
horizontal
className
=
"top10bg"
>
<
Stack
horizontal
className
=
"top10bg"
style
=
{
{
position
:
'
relative
'
}
}
>
<
div
<
div
className
=
"title"
className
=
"title"
onClick
=
{
this
.
clickMaxTop
}
onClick
=
{
this
.
clickMaxTop
}
>
>
<
Title1
text
=
"Top
10
Maximal trials"
icon
=
"max.png"
bgc
olor
=
{
titleMaxbgcolor
}
/>
<
Title1
text
=
"Top Maximal trials"
icon
=
"max.png"
fontC
olor
=
{
titleMaxbgcolor
}
/>
</
div
>
</
div
>
<
div
<
div
className
=
"title minTitle"
className
=
"title minTitle"
onClick
=
{
this
.
clickMinTop
}
onClick
=
{
this
.
clickMinTop
}
>
>
<
Title1
text
=
"Top10 Minimal trials"
icon
=
"min.png"
bgcolor
=
{
titleMinbgcolor
}
/>
<
Title1
text
=
"Top Minimal trials"
icon
=
"min.png"
fontColor
=
{
titleMinbgcolor
}
/>
</
div
>
<
div
style
=
{
{
position
:
'
absolute
'
,
right
:
52
,
top
:
6
}
}
>
<
Dropdown
selectedKey
=
{
bestTrialEntries
}
options
=
{
entriesOption
}
onChange
=
{
this
.
updateEntries
}
styles
=
{
{
root
:
{
width
:
170
}
}
}
/>
</
div
>
</
div
>
</
Stack
>
</
Stack
>
<
Stack
horizontal
tokens
=
{
stackTokens
}
>
<
Stack
horizontal
tokens
=
{
stackTokens
}
>
...
@@ -128,7 +155,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -128,7 +155,7 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
/>
/>
</
div
>
</
div
>
<
div
style
=
{
{
width
:
'
60%
'
}
}
>
<
div
style
=
{
{
width
:
'
60%
'
}
}
>
<
SuccessTable
trialIds
=
{
bestTrials
.
map
(
trial
=>
trial
.
info
.
id
)
}
/>
<
SuccessTable
trialIds
=
{
bestTrials
.
map
(
trial
=>
trial
.
info
.
id
)
}
/>
</
div
>
</
div
>
</
Stack
>
</
Stack
>
</
Stack
>
</
Stack
>
...
@@ -155,10 +182,11 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
...
@@ -155,10 +182,11 @@ class Overview extends React.Component<OverviewProps, OverviewState> {
private
findBestTrials
():
Trial
[]
{
private
findBestTrials
():
Trial
[]
{
const
bestTrials
=
TRIALS
.
sort
();
const
bestTrials
=
TRIALS
.
sort
();
const
{
bestTrialEntries
}
=
this
.
props
;
if
(
this
.
props
.
metricGraphMode
===
'
max
'
)
{
if
(
this
.
props
.
metricGraphMode
===
'
max
'
)
{
bestTrials
.
reverse
().
splice
(
10
);
bestTrials
.
reverse
().
splice
(
JSON
.
parse
(
bestTrialEntries
)
);
}
else
{
}
else
{
bestTrials
.
splice
(
10
);
bestTrials
.
splice
(
JSON
.
parse
(
bestTrialEntries
)
);
}
}
return
bestTrials
;
return
bestTrials
;
}
}
...
...
src/webui/src/components/TrialsDetail.tsx
View file @
af800213
...
@@ -142,53 +142,54 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
...
@@ -142,53 +142,54 @@ class TrialsDetail extends React.Component<TrialsDetailProps, TrialDetailState>
</
Pivot
>
</
Pivot
>
</
div
>
</
div
>
{
/* trial table list */
}
{
/* trial table list */
}
<
Stack
horizontal
className
=
"panelTitle"
>
<
div
style
=
{
{
backgroundColor
:
'
#fff
'
}
}
>
<
span
style
=
{
{
marginRight
:
12
}
}
>
{
tableListIcon
}
</
span
>
<
Stack
horizontal
className
=
"panelTitle"
style
=
{
{
marginTop
:
10
}
}
>
<
span
>
Trial jobs
</
span
>
<
span
style
=
{
{
marginRight
:
12
}
}
>
{
tableListIcon
}
</
span
>
</
Stack
>
<
span
>
Trial jobs
</
span
>
<
Stack
horizontal
className
=
"allList"
>
</
Stack
>
<
StackItem
grow
=
{
50
}
>
<
Stack
horizontal
className
=
"allList"
>
<
DefaultButton
<
StackItem
grow
=
{
50
}
>
text
=
"Compare"
className
=
"allList-compare"
// use child-component tableList's function, the function is in child-component.
onClick
=
{
():
void
=>
{
if
(
this
.
tableList
)
{
this
.
tableList
.
compareBtn
();
}
}
}
/>
</
StackItem
>
<
StackItem
grow
=
{
50
}
>
<
Stack
horizontal
horizontalAlign
=
"end"
className
=
"allList"
>
<
DefaultButton
<
DefaultButton
className
=
"allList-button-gap"
text
=
"Compare"
text
=
"Add column"
className
=
"allList-compare"
onClick
=
{
():
void
=>
{
if
(
this
.
tableList
)
{
this
.
tableList
.
addColumn
();
}
}
}
// use child-component tableList's function, the function is in child-component.
onClick
=
{
():
void
=>
{
if
(
this
.
tableList
)
{
this
.
tableList
.
compareBtn
();
}
}
}
/>
/>
<
Dropdown
</
StackItem
>
selectedKey
=
{
searchType
}
<
StackItem
grow
=
{
50
}
>
options
=
{
searchOptions
}
<
Stack
horizontal
horizontalAlign
=
"end"
className
=
"allList"
>
onChange
=
{
this
.
updateSearchFilterType
}
<
DefaultButton
styles
=
{
{
root
:
{
width
:
150
}
}
}
className
=
"allList-button-gap"
/>
text
=
"Add column"
<
input
onClick
=
{
():
void
=>
{
if
(
this
.
tableList
)
{
this
.
tableList
.
addColumn
();
}
}
}
type
=
"text"
/>
className
=
"allList-search-input"
<
Dropdown
placeholder
=
{
`Search by
${
this
.
state
.
searchType
}
`
}
selectedKey
=
{
searchType
}
onChange
=
{
this
.
searchTrial
}
options
=
{
searchOptions
}
style
=
{
{
width
:
230
}
}
onChange
=
{
this
.
updateSearchFilterType
}
ref
=
{
(
text
):
any
=>
(
this
.
searchInput
)
=
text
}
styles
=
{
{
root
:
{
width
:
150
}
}
}
/>
/>
</
Stack
>
<
input
type
=
"text"
</
StackItem
>
className
=
"allList-search-input"
</
Stack
>
placeholder
=
{
`Search by
${
this
.
state
.
searchType
}
`
}
<
TableList
onChange
=
{
this
.
searchTrial
}
pageSize
=
{
tablePageSize
}
style
=
{
{
width
:
230
}
}
tableSource
=
{
source
.
map
(
trial
=>
trial
.
tableRecord
)
}
ref
=
{
(
text
):
any
=>
(
this
.
searchInput
)
=
text
}
columnList
=
{
columnList
}
/>
changeColumn
=
{
changeColumn
}
</
Stack
>
trialsUpdateBroadcast
=
{
this
.
props
.
trialsUpdateBroadcast
}
</
StackItem
>
// TODO: change any to specific type
</
Stack
>
ref
=
{
(
tabList
):
any
=>
this
.
tableList
=
tabList
}
<
TableList
/>
pageSize
=
{
tablePageSize
}
tableSource
=
{
source
.
map
(
trial
=>
trial
.
tableRecord
)
}
columnList
=
{
columnList
}
changeColumn
=
{
changeColumn
}
trialsUpdateBroadcast
=
{
this
.
props
.
trialsUpdateBroadcast
}
// TODO: change any to specific type
ref
=
{
(
tabList
):
any
=>
this
.
tableList
=
tabList
}
/>
</
div
>
</
div
>
</
div
>
);
);
}
}
...
...
src/webui/src/components/overview/BasicInfo.tsx
View file @
af800213
...
@@ -22,12 +22,16 @@ class BasicInfo extends React.Component<BasicInfoProps, {}> {
...
@@ -22,12 +22,16 @@ class BasicInfo extends React.Component<BasicInfoProps, {}> {
<
Stack
.
Item
grow
=
{
3
}
className
=
"padItem basic"
>
<
Stack
.
Item
grow
=
{
3
}
className
=
"padItem basic"
>
<
p
>
Name
</
p
>
<
p
>
Name
</
p
>
<
div
>
{
EXPERIMENT
.
profile
.
params
.
experimentName
}
</
div
>
<
div
>
{
EXPERIMENT
.
profile
.
params
.
experimentName
}
</
div
>
</
Stack
.
Item
>
<
Stack
.
Item
grow
=
{
3
}
className
=
"padItem basic"
>
<
p
>
ID
</
p
>
<
p
>
ID
</
p
>
<
div
>
{
EXPERIMENT
.
profile
.
id
}
</
div
>
<
div
>
{
EXPERIMENT
.
profile
.
id
}
</
div
>
</
Stack
.
Item
>
</
Stack
.
Item
>
<
Stack
.
Item
grow
=
{
3
}
className
=
"padItem basic"
>
<
Stack
.
Item
grow
=
{
3
}
className
=
"padItem basic"
>
<
p
>
Start time
</
p
>
<
p
>
Start time
</
p
>
<
div
className
=
"nowrap"
>
{
formatTimestamp
(
EXPERIMENT
.
profile
.
startTime
)
}
</
div
>
<
div
className
=
"nowrap"
>
{
formatTimestamp
(
EXPERIMENT
.
profile
.
startTime
)
}
</
div
>
</
Stack
.
Item
>
<
Stack
.
Item
grow
=
{
3
}
className
=
"padItem basic"
>
<
p
>
End time
</
p
>
<
p
>
End time
</
p
>
<
div
className
=
"nowrap"
>
{
formatTimestamp
(
EXPERIMENT
.
profile
.
endTime
)
}
</
div
>
<
div
className
=
"nowrap"
>
{
formatTimestamp
(
EXPERIMENT
.
profile
.
endTime
)
}
</
div
>
</
Stack
.
Item
>
</
Stack
.
Item
>
...
@@ -45,6 +49,8 @@ class BasicInfo extends React.Component<BasicInfoProps, {}> {
...
@@ -45,6 +49,8 @@ class BasicInfo extends React.Component<BasicInfoProps, {}> {
{
EXPERIMENT
.
profile
.
logDir
||
'
unknown
'
}
{
EXPERIMENT
.
profile
.
logDir
||
'
unknown
'
}
</
TooltipHost
>
</
TooltipHost
>
</
div
>
</
div
>
</
Stack
.
Item
>
<
Stack
.
Item
className
=
"padItem basic"
>
<
p
>
Training platform
</
p
>
<
p
>
Training platform
</
p
>
<
div
className
=
"nowrap"
>
{
EXPERIMENT
.
profile
.
params
.
trainingServicePlatform
}
</
div
>
<
div
className
=
"nowrap"
>
{
EXPERIMENT
.
profile
.
params
.
trainingServicePlatform
}
</
div
>
</
Stack
.
Item
>
</
Stack
.
Item
>
...
...
src/webui/src/components/overview/Title1.tsx
View file @
af800213
...
@@ -4,7 +4,7 @@ import '../../static/style/overviewTitle.scss';
...
@@ -4,7 +4,7 @@ import '../../static/style/overviewTitle.scss';
interface
Title1Props
{
interface
Title1Props
{
text
:
string
;
text
:
string
;
icon
?:
string
;
icon
?:
string
;
bgc
olor
?:
string
;
fontC
olor
?:
string
;
}
}
class
Title1
extends
React
.
Component
<
Title1Props
,
{}
>
{
class
Title1
extends
React
.
Component
<
Title1Props
,
{}
>
{
...
@@ -14,11 +14,11 @@ class Title1 extends React.Component<Title1Props, {}> {
...
@@ -14,11 +14,11 @@ class Title1 extends React.Component<Title1Props, {}> {
}
}
render
():
React
.
ReactNode
{
render
():
React
.
ReactNode
{
const
{
text
,
icon
,
bgc
olor
}
=
this
.
props
;
const
{
text
,
icon
,
fontC
olor
}
=
this
.
props
;
return
(
return
(
<
Stack
horizontal
className
=
"panelTitle"
style
=
{
{
backgroundColor
:
bgcolor
}
}
>
<
Stack
horizontal
className
=
"panelTitle"
>
<
img
src
=
{
require
(
`../../static/img/icon/
${
icon
}
`
)
}
alt
=
"icon"
/>
<
img
src
=
{
require
(
`../../static/img/icon/
${
icon
}
`
)
}
alt
=
"icon"
/>
<
span
>
{
text
}
</
span
>
<
span
style
=
{
{
color
:
fontColor
}
}
>
{
text
}
</
span
>
</
Stack
>
</
Stack
>
);
);
}
}
...
...
src/webui/src/static/style/overview.scss
View file @
af800213
...
@@ -25,7 +25,6 @@
...
@@ -25,7 +25,6 @@
padding
:
15px
0
;
padding
:
15px
0
;
color
:
#212121
;
color
:
#212121
;
width
:
95%
;
width
:
95%
;
margin
:
0
auto
;
}
}
.nowrap
{
.nowrap
{
...
...
src/webui/src/static/style/overviewTitle.scss
View file @
af800213
$titleBgcolor
:
#b3b3b3
;
$iconPaddingVal
:
14px
;
$iconPaddingVal
:
14px
;
.overview
.overviewBoder
{
height
:
100%
;
border-right
:
2px
solid
white
;
}
.panelTitle
{
.panelTitle
{
font-family
:
'Segoe UI'
,
Tahoma
,
Geneva
,
Verdana
,
sans-serif
;
font-family
:
'Segoe UI'
,
Tahoma
,
Geneva
,
Verdana
,
sans-serif
;
width
:
100%
;
width
:
100%
;
height
:
38px
;
height
:
38px
;
padding
:
0
$iconPaddingVal
;
padding
:
4px
$iconPaddingVal
;
b
ackground
:
$titleBgcolor
;
b
ox-sizing
:
border-box
;
img
{
img
{
height
:
22px
;
height
:
22px
;
/* (38 - 22 ) / 2 */
/* (38 - 22 ) / 2 */
...
@@ -40,7 +34,6 @@ $iconPaddingVal: 14px;
...
@@ -40,7 +34,6 @@ $iconPaddingVal: 14px;
}
}
.top10bg
{
.top10bg
{
background-color
:
$titleBgcolor
;
.top10Title
{
.top10Title
{
width
:
160px
;
width
:
160px
;
...
...
src/webui/src/static/style/trialsDetail.scss
View file @
af800213
$bg
:
#b3b3b3
;
#tabsty
{
#tabsty
{
background-color
:
#fff
;
.ms-Pivot
{
.ms-Pivot
{
.ms-Button
{
.ms-Button
{
padding
:
0
;
padding
:
0
;
...
@@ -7,13 +7,6 @@ $bg: #b3b3b3;
...
@@ -7,13 +7,6 @@ $bg: #b3b3b3;
margin-right
:
0
;
margin-right
:
0
;
border-right
:
2px
solid
#fff
;
border-right
:
2px
solid
#fff
;
transition
:
0
.3s
;
transition
:
0
.3s
;
&
:hover
{
background-color
:
$bg
;
}
.ms-Button-flexContainer
{
background-color
:
$bg
;
}
}
}
.
ms-Pivot-link
:
:
before
{
.
ms-Pivot-link
:
:
before
{
...
@@ -45,10 +38,7 @@ $bg: #b3b3b3;
...
@@ -45,10 +38,7 @@ $bg: #b3b3b3;
/* graph, title total height */
/* graph, title total height */
width
:
100%
;
width
:
100%
;
height
:
500px
;
height
:
500px
;
/* graph all title bg*/
.ms-FocusZone
{
background-color
:
$bg
;
}
.graph
{
.graph
{
height
:
432px
;
height
:
432px
;
margin
:
0
auto
;
margin
:
0
auto
;
...
...
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