@@ -21,9 +21,9 @@ function initPage(serviceId, site){
2121
2222 var ajaxInput_sitecsvs = {
2323 'url' : 'http://dynamo.mit.edu/dynamo/dealermon/sites.php' ,
24- 'data' : { 'getSiteCSVs' : 1 , 'serviceId' : serviceId , 'site' : site } ,
24+ 'data' : { 'getSiteCSVs' : 1 , 'serviceId' : serviceId , 'site' : site , 'norm' : 1 } ,
2525 'success' : function ( data ) {
26-
26+ writeDownload ( data , site , serviceId ) ;
2727 makeTable ( data , site , serviceId ) ;
2828
2929 } ,
@@ -35,6 +35,46 @@ function initPage(serviceId, site){
3535
3636}
3737
38+ function writeDownload ( data , site , serviceId ) {
39+ var list_stuck = [ ] ;
40+ for ( i = 0 ; i != data . length ; i ++ ) {
41+ var replica = data [ i ] ;
42+ if ( replica [ 4 ] == 0 ) {
43+ continue ;
44+ }
45+ list_stuck . push ( [ replica [ 1 ] , "/" + replica [ 0 ] . slice ( 1 ) . replace ( '+' , '/' ) . replace ( '+' , '/' ) ] ) ;
46+
47+ }
48+
49+ var csvContent = "" ;
50+ list_stuck . forEach ( function ( infoArray , index ) {
51+
52+ dataString = infoArray . join ( "," ) ;
53+ csvContent += index < list_stuck . length ? dataString + "\n" : dataString ;
54+
55+ } ) ;
56+ var blob = new Blob ( [ "\ufeff" , csvContent ] ) ;
57+ var downloadLink = document . createElement ( "a" ) ;
58+ var url = URL . createObjectURL ( blob ) ;
59+ downloadLink . href = url ;
60+ var d = new Date ( ) ;
61+ var month = d . getMonth ( ) + 1 ;
62+ downloadLink . download = site + "_stucktransfers(" + month + "-" + d . getDate ( ) + "-" + d . getFullYear ( ) + ").csv" ;
63+
64+ var encodedURI = encodeURI ( csvContent ) ;
65+ var download_button = document . getElementById ( "download" ) ;
66+ download_button . onclick = function ( ) {
67+ downloadLink . click ( ) ;
68+ setTimeout ( function ( ) {
69+ URL . revokeObjectURL ( url ) ;
70+ } , 100 ) ;
71+ } ;
72+
73+ }
74+
75+
76+
77+
3878
3979//Creates HTML table with the information from Site CSV: links to PhEDEx API and progress graph
4080function makeTable ( data , site , serviceId ) {
@@ -45,15 +85,16 @@ function makeTable(data, site, serviceId){
4585
4686 for ( var i in data ) {
4787
48- var replicaname = data [ i ] [ 0 ] ;
88+ var replicaname = data [ i ] [ 0 ] . replace ( "+" , "/" ) ;
4989 var id = data [ i ] [ 1 ] ;
5090 var total = Math . round ( 10000 * ( data [ i ] [ 2 ] / Math . pow ( 10 , 12 ) ) ) / 10000 ;
5191 var copied = Math . round ( 10000 * ( data [ i ] [ 3 ] / Math . pow ( 10 , 12 ) ) ) / 10000 ;
5292 var isstuck = false ;
5393 var DorP = replicaname . split ( "_" ) [ 0 ] . charAt ( 0 ) ;
5494 var DorPcolor = "#2C8CFF" ;
5595 var color = "white" ;
56- replicaname = replicaname . slice ( 1 ) ;
96+ replicaname = replicaname . slice ( 1 ) ;
97+ replicaname = '/' + replicaname . replace ( "+" , "/" ) ;
5798 if ( DorP == "P" ) {
5899 DorPcolor = "#07EF00" ;
59100 DorP = "O" ;
@@ -65,7 +106,7 @@ function makeTable(data, site, serviceId){
65106 }
66107 nreplicas += 1 ;
67108
68- replicaTable += "<tr><td>" + id . link ( 'https://cmsweb.cern.ch/phedex/datasvc/perl/prod/blockarrive?to_node=' + site + '&block=/ ' + replicaname . replace ( "+" , "/" ) . replace ( "+" , "/" ) + "%23*" ) + "</td><td bgcolor=" + DorPcolor + ">" + DorP + "</td><td bgcolor=" + color + " id='textButton" + replicaname + "' style='cursor: pointer'>" + replicaname + "</td><td>" + copied + "</td><td>" + total + "</td></tr>" ;
109+ replicaTable += "<tr><td>" + id . link ( 'https://cmsweb.cern.ch/phedex/datasvc/perl/prod/blockarrive?to_node=' + site + '&block=' + replicaname . replace ( "+" , "/" ) + "%23*" ) + "</td><td bgcolor=" + DorPcolor + ">" + DorP + "</td><td bgcolor=" + color + " id='textButton" + replicaname + "' style='cursor: pointer'>" + replicaname + "</td><td>" + copied + "</td><td>" + total + "</td></tr>" ;
69110 replicanames . push ( replicaname ) ;
70111
71112 }
@@ -76,56 +117,61 @@ function makeTable(data, site, serviceId){
76117}
77118
78119function makeGraphTrace ( data , site , replicaname ) {
120+
79121
80122
81123 var traces_sites = [ ] ;
82-
124+
83125
84126 for ( var k in data ) {
85-
86- for ( var i in data [ k ] ) {
87- var obj = data [ k ] [ i ] ;
88- var sitename = obj . site ;
89- /*
90- if (site != sitename)
91- continue;
92- */
93- for ( var j in obj [ "data" ] ) {
94- var replica = obj [ "data" ] [ j ] ;
95- var replicatograph = replica . replica . substring ( replica . replica . indexOf ( "_" ) + 1 ) ;
96- /*
97- if (replicatograph != replicaname){
98- continue;
99- }
100- */
101-
102- traces_sites . push ( makeTrace ( replica . replica , time_converted , replica . ratio , 'dot' , 1.6 , false , "#ff6666" ) ) ;
103- }
127+ try {
128+ var obj = data [ k ] ;
129+ var sitename = obj . site ;
130+ var replica = obj . data [ 0 ] ;
131+ var time_converted = replica [ "time" ] . map ( timeConverter ) ;
132+ traces_sites . push ( makeTrace ( replica . replica , time_converted , replica . ratio , 'dot' , 1.6 , false , "#ff6666" ) ) ;
133+ }
134+ catch ( e ) {
104135 }
105- }
136+
137+ }
138+
139+
106140
107141 return traces_sites ;
108142}
109143
110144function makeGraph ( replicaname , serviceId , site ) {
111-
112- window . alert ( site ) ;
113-
114145 var traces_sites = [ ] ;
115- var echoo = "" ;
146+
116147 var ajaxInput_grapher = {
117- 'url' : 'http://dynamo.mit.edu/dynamo/dealermon/ sites.php' ,
118- 'data' : { 'getSiteRRDs' : 1 , 'serviceId' : serviceId , 'site' : site , 'replicaname' : replicaname } ,
148+ 'url' : 'sites.php' ,
149+ 'data' : { 'getSiteRRDs' : 1 , 'serviceId' : serviceId , 'site' : site , 'replicaname' : replicaname , 'norm' : 1 } ,
119150 'success' : function ( data ) {
120- echoo = "Hi" ;
121151 traces_sites = makeGraphTrace ( data , site , replicaname ) ;
122152 } ,
123153 'dataType' : 'json' ,
154+ 'error' : function ( jqXHR , exception ) {
155+ if ( jqXHR . status === 0 ) {
156+ alert ( 'Not connect.\n Verify Network.' ) ;
157+ } else if ( jqXHR . status == 404 ) {
158+ alert ( 'Requested page not found. [404]' ) ;
159+ } else if ( jqXHR . status == 500 ) {
160+ alert ( 'Internal Server Error [500].' ) ;
161+ } else if ( exception === 'parsererror' ) {
162+ alert ( 'Requested JSON parse failed.' ) ;
163+ } else if ( exception === 'timeout' ) {
164+ alert ( 'Time out error.' ) ;
165+ } else if ( exception === 'abort' ) {
166+ alert ( 'Ajax request aborted.' ) ;
167+ } else {
168+ alert ( 'Uncaught Error.\n' + jqXHR . responseText ) ;
169+ }
170+ } ,
124171 'async' : false
125172 } ;
126173
127174 $ . ajax ( ajaxInput_grapher ) ;
128- window . alert ( echoo ) ;
129175
130176 var layout_sites = {
131177 title : replicaname ,
@@ -166,7 +212,7 @@ function makeGraph(replicaname, serviceId, site){
166212 }
167213 } ;
168214
169-
215+ // window.alert("DID WE MAKE IT?");
170216 Plotly . newPlot ( "graphModal1" , traces_sites , layout_sites ) ;
171217
172218}
@@ -192,7 +238,7 @@ window.onload = function(){
192238 var modal = document . getElementById ( 'graphModal' ) ;
193239 var span = document . getElementsByClassName ( "close" ) [ 0 ] ;
194240
195- var site = url . substring ( url . indexOf ( "=" ) + 1 , url . lastIndexOf ( "&" ) ) ;
241+ var site = url . substring ( url . indexOf ( "=" ) + 1 , url . indexOf ( "&" ) ) ;
196242 var serviceId = url . charAt ( url . length - 1 ) ;
197243 var btns = [ ] ;
198244
@@ -205,15 +251,16 @@ window.onload = function(){
205251 modal . style . display = "none" ;
206252 }
207253 } ;
254+
208255 for ( var i = 0 ; i < replicanames . length ; i ++ ) ( function ( i ) {
209256
210257 btns . push ( document . getElementById ( "textButton" + replicanames [ i ] ) ) ;
211258 var replicaname = replicanames [ i ] ;
259+ // window.alert(replicaname);
212260
213- btns [ i ] . onclick = function ( ) {
214-
215- makeGraph ( replicaname , serviceId , site )
216- modal . style . display = "block" ;
261+ btns [ i ] . onclick = function ( ) {
262+ makeGraph ( replicaname , serviceId , site )
263+ modal . style . display = "block" ;
217264 } ;
218265
219266 } ) ( i ) ;
0 commit comments