1
1
import * as React from 'react' ;
2
- import axios from 'axios' ;
3
2
import { downFile } from '../../static/function' ;
4
3
import {
5
4
Stack , PrimaryButton , DefaultButton , Panel , StackItem , Pivot , PivotItem
6
5
} from 'office-ui-fabric-react' ;
7
- import { MANAGER_IP , DRAWEROPTION } from '../../static/const' ;
6
+ import { DRAWEROPTION } from '../../static/const' ;
7
+ import { EXPERIMENT , TRIALS } from '../../static/datamodel' ;
8
8
import MonacoEditor from 'react-monaco-editor' ;
9
9
import '../../static/style/logDrawer.scss' ;
10
- import { TrialManager } from '../../static/model/trialmanager' ;
11
10
12
11
interface ExpDrawerProps {
13
- isVisble : boolean ;
14
12
closeExpDrawer : ( ) => void ;
13
+ experimentProfile : object ;
15
14
}
16
15
17
16
interface ExpDrawerState {
@@ -21,7 +20,9 @@ interface ExpDrawerState {
21
20
22
21
class ExperimentDrawer extends React . Component < ExpDrawerProps , ExpDrawerState > {
23
22
24
- public _isCompareMount ! : boolean ;
23
+ public _isExperimentMount ! : boolean ;
24
+ private refreshId ! : number | undefined ;
25
+
25
26
constructor ( props : ExpDrawerProps ) {
26
27
super ( props ) ;
27
28
@@ -32,42 +33,40 @@ class ExperimentDrawer extends React.Component<ExpDrawerProps, ExpDrawerState> {
32
33
}
33
34
34
35
getExperimentContent = ( ) : void => {
35
- axios
36
- . all ( [
37
- axios . get ( `${ MANAGER_IP } /experiment` ) ,
38
- axios . get ( `${ MANAGER_IP } /trial-jobs` ) ,
39
- axios . get ( `${ MANAGER_IP } /metric-data` )
40
- ] )
41
- . then ( axios . spread ( ( resExperiment , resTrialJobs , resMetricData ) => {
42
- if ( resExperiment . status === 200 && resTrialJobs . status === 200 && resMetricData . status === 200 ) {
43
- if ( resExperiment . data . params . searchSpace ) {
44
- resExperiment . data . params . searchSpace = JSON . parse ( resExperiment . data . params . searchSpace ) ;
45
- }
46
- const trialMessagesArr = TrialManager . expandJobsToTrials ( resTrialJobs . data ) ;
47
- const interResultList = resMetricData . data ;
48
- Object . keys ( trialMessagesArr ) . map ( item => {
49
- // not deal with trial's hyperParameters
50
- const trialId = trialMessagesArr [ item ] . id ;
51
- // add intermediate result message
52
- trialMessagesArr [ item ] . intermediate = [ ] ;
53
- Object . keys ( interResultList ) . map ( key => {
54
- const interId = `${ interResultList [ key ] . trialJobId } -${ interResultList [ key ] . parameterId } ` ;
55
- if ( trialId === interId ) {
56
- trialMessagesArr [ item ] . intermediate . push ( interResultList [ key ] ) ;
57
- }
58
- } ) ;
59
- } ) ;
60
- const result = {
61
- experimentParameters : resExperiment . data ,
62
- trialMessage : trialMessagesArr
63
- } ;
64
- if ( this . _isCompareMount === true ) {
65
- this . setState ( { experiment : JSON . stringify ( result , null , 4 ) } ) ;
66
- }
36
+ const experimentData = JSON . parse ( JSON . stringify ( this . props . experimentProfile ) ) ;
37
+ if ( experimentData . params . searchSpace ) {
38
+ experimentData . params . searchSpace = JSON . parse ( experimentData . params . searchSpace ) ;
39
+ }
40
+ const trialMessagesArr = TRIALS . getTrialJobList ( ) ;
41
+ const interResultList = TRIALS . getMetricsList ( ) ;
42
+ Object . keys ( trialMessagesArr ) . map ( item => {
43
+ // not deal with trial's hyperParameters
44
+ const trialId = trialMessagesArr [ item ] . jobId ;
45
+ // add intermediate result message
46
+ trialMessagesArr [ item ] . intermediate = [ ] ;
47
+ Object . keys ( interResultList ) . map ( key => {
48
+ const interId = interResultList [ key ] . trialJobId ;
49
+ if ( trialId === interId ) {
50
+ trialMessagesArr [ item ] . intermediate . push ( interResultList [ key ] ) ;
67
51
}
68
- } ) ) ;
69
- }
52
+ } ) ;
53
+ } ) ;
54
+ const result = {
55
+ experimentParameters : experimentData ,
56
+ trialMessage : trialMessagesArr
57
+ } ;
58
+ if ( this . _isExperimentMount === true ) {
59
+ this . setState ( { experiment : JSON . stringify ( result , null , 4 ) } ) ;
60
+ }
70
61
62
+ if ( [ 'DONE' , 'ERROR' , 'STOPPED' ] . includes ( EXPERIMENT . status ) ) {
63
+ if ( this . refreshId !== null || this . refreshId !== undefined ) {
64
+ window . clearInterval ( this . refreshId ) ;
65
+ }
66
+ }
67
+
68
+ }
69
+
71
70
downExperimentParameters = ( ) : void => {
72
71
const { experiment } = this . state ;
73
72
downFile ( experiment , 'experiment.json' ) ;
@@ -78,31 +77,28 @@ class ExperimentDrawer extends React.Component<ExpDrawerProps, ExpDrawerState> {
78
77
}
79
78
80
79
componentDidMount ( ) : void {
81
- this . _isCompareMount = true ;
80
+ this . _isExperimentMount = true ;
82
81
this . getExperimentContent ( ) ;
82
+ this . refreshId = window . setInterval ( this . getExperimentContent , 10000 ) ;
83
83
window . addEventListener ( 'resize' , this . onWindowResize ) ;
84
84
}
85
85
86
- componentWillReceiveProps ( nextProps : ExpDrawerProps ) : void {
87
- const { isVisble } = nextProps ;
88
- if ( isVisble === true ) {
89
- this . getExperimentContent ( ) ;
90
- }
91
- }
92
-
93
86
componentWillUnmount ( ) : void {
94
- this . _isCompareMount = false ;
87
+ this . _isExperimentMount = false ;
88
+ window . clearTimeout ( this . refreshId ) ;
95
89
window . removeEventListener ( 'resize' , this . onWindowResize ) ;
96
90
}
97
91
98
92
render ( ) : React . ReactNode {
99
- const { isVisble , closeExpDrawer } = this . props ;
93
+ const { closeExpDrawer } = this . props ;
100
94
const { experiment, expDrawerHeight } = this . state ;
101
95
return (
102
96
< Stack className = "logDrawer" >
103
97
< Panel
104
- isOpen = { isVisble }
98
+ isOpen = { true }
105
99
hasCloseButton = { false }
100
+ isLightDismiss = { true }
101
+ onLightDismissClick = { closeExpDrawer }
106
102
styles = { { root : { height : expDrawerHeight , paddingTop : 15 } } }
107
103
>
108
104
< Pivot style = { { minHeight : 190 } } className = "log-tab-body" >
0 commit comments