@@ -18,18 +18,41 @@ function handleDatabyUser(url,callBack){
1818 const userDict = { } ;
1919 const userReverseDict = { } ;
2020 d3 . json ( url ) . then ( _data => {
21- d3 . keys ( _data . jobs_info ) . forEach ( jID => { if ( ! userDict [ _data . jobs_info [ jID ] . user_name ] && ! userReverseDict [ _data . jobs_info [ jID ] . user_name ] ) {
22- const encoded = 'user' + d3 . keys ( userDict ) . length ;
23- userDict [ _data . jobs_info [ jID ] . user_name ] = encoded ;
24- userReverseDict [ encoded ] = _data . jobs_info [ jID ] . user_name ;
25- _data . jobs_info [ jID ] . user_name = userDict [ _data . jobs_info [ jID ] . user_name ] ;
26- } else if ( ! userReverseDict [ _data . jobs_info [ jID ] . user_name ] ) {
27- _data . jobs_info [ jID ] . user_name = userDict [ _data . jobs_info [ jID ] . user_name ] ;
28- } if ( ! userDict [ _data . jobs_info [ jID ] . user_name ] )
29- userDict [ _data . jobs_info [ jID ] . user_name ] = 'user' + d3 . keys ( userDict ) . length ;
30- _data . jobs_info [ jID ] . user_name = userDict [ _data . jobs_info [ jID ] . user_name ] ;
31- _data . jobs_info [ jID ] . node_list = _data . jobs_info [ jID ] . node_list . map ( c => c . split ( '-' ) [ 0 ] ) ;
32- } ) ;
21+ if ( _data . jobs_info && _data . jobs_info [ "base64(zip(o))" ] ) {
22+ Object . keys ( _data ) . forEach ( k => {
23+ if ( _data [ k ] [ "base64(zip(o))" ] ) {
24+ _data [ k ] = JSON . parse ( pako . inflate ( base64ToBuffer ( _data [ k ] [ 'base64(zip(o))' ] ) , { to : 'string' } ) ) ;
25+ }
26+ } )
27+ }
28+ else if ( _data [ "base64(zip(o))" ] ) {
29+ _data = JSON . parse ( pako . inflate ( base64ToBuffer ( _data [ 'base64(zip(o))' ] ) , { to : 'string' } ) ) ;
30+ }
31+ // fill in
32+ Object . keys ( _data [ COMPUTE ] ) . forEach ( comp => {
33+ if ( ! _data [ COMPUTE ] [ comp ] . job_id )
34+ _data [ COMPUTE ] [ comp ] . job_id = [ ] ;
35+ else
36+ _data [ COMPUTE ] [ comp ] . job_id = _data [ COMPUTE ] [ comp ] . job_id . map ( j => ( j ?? [ ] ) . map ( jid => '' + jid ) ) ;
37+ } )
38+
39+ d3 . keys ( _data . jobs_info ) . forEach ( jID => {
40+ _data . jobs_info [ jID ] . finish_time = _data . jobs_info [ jID ] . finish_time ?? _data . jobs_info [ jID ] . end_time ;
41+ _data . jobs_info [ jID ] . job_name = '' + ( _data . jobs_info [ jID ] . job_name ?? _data . jobs_info [ jID ] . name ) ;
42+ if ( ! userDict [ _data . jobs_info [ jID ] . user_name ] && ! userReverseDict [ _data . jobs_info [ jID ] . user_name ] ) {
43+ const encoded = 'user' + d3 . keys ( userDict ) . length ;
44+ userDict [ _data . jobs_info [ jID ] . user_name ] = encoded ;
45+ userReverseDict [ encoded ] = _data . jobs_info [ jID ] . user_name ;
46+ _data . jobs_info [ jID ] . user_name = userDict [ _data . jobs_info [ jID ] . user_name ] ;
47+ } else if ( ! userReverseDict [ _data . jobs_info [ jID ] . user_name ] ) {
48+ _data . jobs_info [ jID ] . user_name = userDict [ _data . jobs_info [ jID ] . user_name ] ;
49+ } if ( ! userDict [ _data . jobs_info [ jID ] . user_name ] )
50+ userDict [ _data . jobs_info [ jID ] . user_name ] = 'user' + d3 . keys ( userDict ) . length ;
51+ _data . jobs_info [ jID ] . user_name = userDict [ _data . jobs_info [ jID ] . user_name ] ;
52+ // _data.jobs_info[jID].node_list = (_data.jobs_info[jID].node_list??_data.jobs_info[jID].nodes??[]).map(c=>c.split('-')[0]); //slip old
53+ _data . jobs_info [ jID ] . node_list = ( _data . jobs_info [ jID ] . node_list ?? [ ] ) . slice ( ) ;
54+ }
55+ ) ;
3356
3457
3558 const dataurl = handleDataUrl ( _data ) ;
@@ -73,21 +96,25 @@ function summaryByUser(data) {
7396 const users = { } ;
7497 Object . keys ( data [ COMPUTE ] ) . forEach ( comp => {
7598 data . time_stamp . forEach ( ( t , ti ) => {
76- data [ COMPUTE ] [ comp ] . job_id [ ti ] . forEach ( jid => {
77- if ( data [ JOB ] [ jid ] . finish_time && ( data [ JOB ] [ jid ] . start_time >= ( data . time_stamp [ 0 ] / 1000000 ) ) ) {
78- const user_name = data [ JOB ] [ jid ] . user_name ;
79- if ( ! users [ user_name ] ) {
80- users [ user_name ] = { id : user_name , comps : { } , time : { } , value :{ job :{ } } , values : [ ] }
81- }
82- users [ user_name ] . value . job [ jid ] = data [ JOB ] [ jid ] ;
83- if ( ! users [ user_name ] . comps [ comp ] ) {
84- users [ user_name ] . comps [ comp ] = [ ] ;
85- }
86- if ( ! users [ user_name ] . comps [ comp ] [ ti ] ) {
87- users [ user_name ] . values . push ( tsnedata [ comp ] [ ti ] )
88- users [ user_name ] . comps [ comp ] [ ti ] = tsnedata [ comp ] [ ti ] ;
89- users [ user_name ] . time [ ti ] = true ;
99+ ( data [ COMPUTE ] [ comp ] . job_id [ ti ] ?? [ ] ) . forEach ( jid => {
100+ try {
101+ if ( data [ JOB ] [ jid ] . finish_time && ( data [ JOB ] [ jid ] . start_time >= ( data . time_stamp [ 0 ] / 1000000 ) ) ) {
102+ const user_name = data [ JOB ] [ jid ] . user_name ;
103+ if ( ! users [ user_name ] ) {
104+ users [ user_name ] = { id : user_name , comps : { } , time : { } , value : { job : { } } , values : [ ] }
105+ }
106+ users [ user_name ] . value . job [ jid ] = data [ JOB ] [ jid ] ;
107+ if ( ! users [ user_name ] . comps [ comp ] ) {
108+ users [ user_name ] . comps [ comp ] = [ ] ;
109+ }
110+ if ( ! users [ user_name ] . comps [ comp ] [ ti ] ) {
111+ users [ user_name ] . values . push ( tsnedata [ comp ] [ ti ] )
112+ users [ user_name ] . comps [ comp ] [ ti ] = tsnedata [ comp ] [ ti ] ;
113+ users [ user_name ] . time [ ti ] = true ;
114+ }
90115 }
116+ } catch ( e ) {
117+ // missing job info
91118 }
92119 } ) ;
93120 } ) ;
@@ -112,39 +139,48 @@ function summaryByJob(data) {
112139 const nodes = { } ;
113140 const user = { } ;
114141 const node_jobs = { } ;
142+ const missingJoblist = { } ;
115143 Object . keys ( data [ COMPUTE ] ) . forEach ( comp => {
116144 data . time_stamp . forEach ( ( t , ti ) => {
117- data [ COMPUTE ] [ comp ] . job_id [ ti ] . forEach ( jid => {
118- if ( data [ JOB ] [ jid ] . finish_time && ( data [ JOB ] [ jid ] . start_time >= ( data . time_stamp [ 0 ] / 1000000 ) ) ) {
119- // const jobID_Main = jid.split('.')[0];
120- const jobID_Main = data [ JOB ] [ jid ] . job_name . split ( 'batch' ) [ 0 ] + '||' + data [ JOB ] [ jid ] . user_name ;
121- if ( ! user [ data [ JOB ] [ jid ] . user_name ] )
122- user [ data [ JOB ] [ jid ] . user_name ] = { } ;
123- if ( ! user [ data [ JOB ] [ jid ] . user_name ] [ jobID_Main ] )
124- user [ data [ JOB ] [ jid ] . user_name ] [ jobID_Main ] = { job :{ } } ;
125- user [ data [ JOB ] [ jid ] . user_name ] [ jobID_Main ] . job [ jid ] = data [ JOB ] [ jid ] ;
126- if ( ! jobs [ jobID_Main ] ) {
127- jobs [ jobID_Main ] = { id : jobID_Main , comps : { } , time : { } , values : [ ] }
128- }
129- if ( ! jobs [ jobID_Main ] . comps [ comp ] ) {
130- jobs [ jobID_Main ] . comps [ comp ] = [ ] ;
131- nodes [ comp + '||' + jobID_Main ] = { id : comp + '||' + jobID_Main , job :jobID_Main , time : { } , values : [ ] } ;
132- node_jobs [ comp + '||' + jobID_Main ] = { } ;
133- }
134- node_jobs [ comp + '||' + jobID_Main ] [ jid . split ( '.' ) [ 0 ] ] = 1 ;
135- if ( ! jobs [ jobID_Main ] . comps [ comp ] [ ti ] ) {
136- jobs [ jobID_Main ] . values . push ( tsnedata [ comp ] [ ti ] ) ;
137- jobs [ jobID_Main ] . comps [ comp ] [ ti ] = tsnedata [ comp ] [ ti ] ;
138- jobs [ jobID_Main ] . time [ ti ] = true ;
145+ ( data [ COMPUTE ] [ comp ] . job_id [ ti ] ?? [ ] ) . forEach ( jid => {
146+ try {
147+ if ( data [ JOB ] [ jid ] . finish_time && ( data [ JOB ] [ jid ] . start_time >= ( data . time_stamp [ 0 ] / 1000000 ) ) ) {
148+ // const jobID_Main = jid.split('.')[0];
149+ const jobID_Main = data [ JOB ] [ jid ] . job_name . split ( 'batch' ) [ 0 ] + '||' + data [ JOB ] [ jid ] . user_name ;
150+ if ( ! user [ data [ JOB ] [ jid ] . user_name ] )
151+ user [ data [ JOB ] [ jid ] . user_name ] = { } ;
152+ if ( ! user [ data [ JOB ] [ jid ] . user_name ] [ jobID_Main ] )
153+ user [ data [ JOB ] [ jid ] . user_name ] [ jobID_Main ] = { job : { } } ;
154+ user [ data [ JOB ] [ jid ] . user_name ] [ jobID_Main ] . job [ jid ] = data [ JOB ] [ jid ] ;
155+ if ( ! jobs [ jobID_Main ] ) {
156+ jobs [ jobID_Main ] = { id : jobID_Main , comps : { } , time : { } , values : [ ] }
157+ }
158+ if ( ! jobs [ jobID_Main ] . comps [ comp ] ) {
159+ jobs [ jobID_Main ] . comps [ comp ] = [ ] ;
160+ nodes [ comp + '||' + jobID_Main ] = {
161+ id : comp + '||' + jobID_Main ,
162+ job : jobID_Main ,
163+ time : { } ,
164+ values : [ ]
165+ } ;
166+ node_jobs [ comp + '||' + jobID_Main ] = { } ;
167+ }
168+ node_jobs [ comp + '||' + jobID_Main ] [ jid . split ( '.' ) [ 0 ] ] = 1 ;
169+ if ( ! jobs [ jobID_Main ] . comps [ comp ] [ ti ] ) {
170+ jobs [ jobID_Main ] . values . push ( tsnedata [ comp ] [ ti ] ) ;
171+ jobs [ jobID_Main ] . comps [ comp ] [ ti ] = tsnedata [ comp ] [ ti ] ;
172+ jobs [ jobID_Main ] . time [ ti ] = true ;
139173
140- nodes [ comp + '||' + jobID_Main ] . values . push ( tsnedata [ comp ] [ ti ] ) ;
141- nodes [ comp + '||' + jobID_Main ] . time [ ti ] = true ;
174+ nodes [ comp + '||' + jobID_Main ] . values . push ( tsnedata [ comp ] [ ti ] ) ;
175+ nodes [ comp + '||' + jobID_Main ] . time [ ti ] = true ;
176+ }
142177 }
178+ } catch ( e ) {
179+ missingJoblist [ jid ] = [ comp , ti ]
143180 }
144181 } ) ;
145182 } ) ;
146183 } ) ;
147-
148184 let blackList = { } ;
149185 let topUser = Object . keys ( user ) . map ( k => ( { user :k , jobs :Object . keys ( user [ k ] ) . length } ) ) . sort ( ( a , b ) => b . jobs - a . jobs ) . slice ( 0 , 5 ) ;
150186 topUser
0 commit comments