From 9acae3d82cbdf9c8e3e5eabfac230fcb62db598d Mon Sep 17 00:00:00 2001 From: phasefx Date: Sun, 22 Feb 2009 01:19:55 +0000 Subject: [PATCH] backporting from staff-client-experiment: a network progress meter. It's not wired into the HTML interfaces embedded in the staff client git-svn-id: svn://svn.open-ils.org/ILS/trunk@12258 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../xul/staff_client/chrome/content/main/menu.js | 85 +++++++++++++++++++++- .../chrome/content/main/menu_frame_overlay.xul | 23 +++++- .../staff_client/chrome/content/util/network.js | 54 +++++++++++++- 3 files changed, 156 insertions(+), 6 deletions(-) diff --git a/Open-ILS/xul/staff_client/chrome/content/main/menu.js b/Open-ILS/xul/staff_client/chrome/content/main/menu.js index fc3a2591b5..581d45a7c5 100644 --- a/Open-ILS/xul/staff_client/chrome/content/main/menu.js +++ b/Open-ILS/xul/staff_client/chrome/content/main/menu.js @@ -2,15 +2,30 @@ dump('entering main/menu.js\n'); // vim:noet:sw=4:ts=4: var offlineStrings; -offlineStrings = document.getElementById('offlineStrings'); if (typeof main == 'undefined') main = {}; main.menu = function () { + netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); + offlineStrings = document.getElementById('offlineStrings'); JSAN.use('util.error'); this.error = new util.error(); JSAN.use('util.window'); this.window = new util.window(); this.w = window; + var x = document.getElementById('network_progress'); + x.setAttribute('count','0'); + x.addEventListener( + 'click', + function() { + if ( window.confirm(offlineStrings.getString('menu.reset_network_stats')) ) { + var y = document.getElementById('network_progress_rows'); + while(y.firstChild) { y.removeChild( y.lastChild ); } + x.setAttribute('mode','determined'); + x.setAttribute('count','0'); + } + }, + false + ); } main.menu.prototype = { @@ -47,11 +62,13 @@ main.menu.prototype = { ['oncommand'], function() { obj.data.stash_retrieve(); - obj.window.open( + var mframe = obj.window.open( obj.url_prefix(urls.XUL_MENU_FRAME) + '?server='+window.escape(urls.remote), 'main' + obj.window.window_name_increment(), 'chrome,resizable'); + netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); + mframe.xulG = xulG; } ], 'cmd_new_tab' : [ @@ -499,6 +516,7 @@ main.menu.prototype = { obj.data.session = obj.data.previous_session; obj.data.stash('session'); try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); var cookieUri = ios.newURI("http://" + obj.data.server_unadorned, null, null); var cookieUriSSL = ios.newURI("https://" + obj.data.server_unadorned, null, null); @@ -644,7 +662,7 @@ main.menu.prototype = { ['oncommand'], function() { obj.data.stash_retrieve(); - obj.window.open(obj.url_prefix(urls.XUL_SURVEY_WIZARD),'survey_wizard','chrome'); + xulG.window.open(obj.url_prefix(urls.XUL_SURVEY_WIZARD),'survey_wizard','chrome'); } ], 'cmd_public_opac' : [ @@ -664,6 +682,7 @@ main.menu.prototype = { ['oncommand'], function clear_the_cache() { try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var cacheClass = Components.classes["@mozilla.org/network/cache-service;1"]; var cacheService = cacheClass.getService(Components.interfaces.nsICacheService); cacheService.evictEntries(Components.interfaces.nsICache.STORE_ON_DISK); @@ -704,6 +723,7 @@ main.menu.prototype = { ['oncommand'], function() { if (window.confirm(offlineStrings.getString('menu.cmd_shutdown.prompt'))) { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(); var windowManagerInterface = windowManager.QueryInterface(Components.interfaces.nsIWindowMediator); var enumerator = windowManagerInterface.getEnumerator(null); @@ -750,6 +770,7 @@ main.menu.prototype = { function(p) { return function() { try { + netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); if (p && p.firstChild && ( p.firstChild.nodeName == 'iframe' || p.firstChild.nodeName == 'browser' ) @@ -875,6 +896,60 @@ main.menu.prototype = { } }, + 'network_meter' : { + 'inc' : function(app,method) { + try { + var m = document.getElementById('network_progress'); + var count = 1 + Number( m.getAttribute('count') ); + m.setAttribute('mode','undetermined'); + m.setAttribute('count', count); + var rows = document.getElementById('network_progress_rows'); + var row = document.getElementById('network_progress_tip_'+app+'_'+method); + if (!row) { + row = document.createElement('row'); row.setAttribute('id','network_progress_tip_'+app+'_'+method); + var a = document.createElement('label'); a.setAttribute('value','App:'); + var b = document.createElement('label'); b.setAttribute('value',app); + var c = document.createElement('label'); c.setAttribute('value','Method:'); + var d = document.createElement('label'); d.setAttribute('value',method); + var e = document.createElement('label'); e.setAttribute('value','Total:'); + var f = document.createElement('label'); f.setAttribute('value','0'); + f.setAttribute('id','network_progress_tip_total_'+app+'_'+method); + var g = document.createElement('label'); g.setAttribute('value','Outstanding:'); + var h = document.createElement('label'); h.setAttribute('value','0'); + h.setAttribute('id','network_progress_tip_out_'+app+'_'+method); + row.appendChild(a); row.appendChild(b); row.appendChild(c); + row.appendChild(d); row.appendChild(e); row.appendChild(f); + row.appendChild(g); row.appendChild(h); rows.appendChild(row); + } + var total = document.getElementById('network_progress_tip_total_'+app+'_'+method); + if (total) { + total.setAttribute('value', 1 + Number( total.getAttribute('value') )); + } + var out = document.getElementById('network_progress_tip_out_'+app+'_'+method); + if (out) { + out.setAttribute('value', 1 + Number( out.getAttribute('value') )); + } + } catch(E) { + dump('network_meter.inc(): ' + E + '\n'); + } + }, + 'dec' : function(app,method) { + try { + var m = document.getElementById('network_progress'); + var count = -1 + Number( m.getAttribute('count') ); + if (count < 0) count = 0; + if (count == 0) m.setAttribute('mode','determined'); + m.setAttribute('count', count); + var out = document.getElementById('network_progress_tip_out_'+app+'_'+method); + if (out) { + out.setAttribute('value', -1 + Number( out.getAttribute('value') )); + } + } catch(E) { + dump('network_meter.dec(): ' + E + '\n'); + } + } + }, + 'set_tab' : function(url,params,content_params) { var obj = this; if (!url) url = '/xul/server/'; @@ -891,8 +966,10 @@ main.menu.prototype = { content_params.new_tab = function(a,b,c) { return obj.new_tab(a,b,c); }; content_params.set_tab = function(a,b,c) { return obj.set_tab(a,b,c); }; content_params.set_tab_name = function(name) { tab.setAttribute('label',(idx + 1) + ' ' + name); }; - content_params.open_chrome_window = function(a,b,c) { return obj.window.open(a,b,c); }; + content_params.open_chrome_window = function(a,b,c) { return xulG.window.open(a,b,c); }; content_params.url_prefix = function(url) { return obj.url_prefix(url); }; + content_params.network_meter = obj.network_meter; + content_params.chrome_xulG = xulG; if (params && params.tab_name) content_params.set_tab_name( params.tab_name ); var frame; diff --git a/Open-ILS/xul/staff_client/chrome/content/main/menu_frame_overlay.xul b/Open-ILS/xul/staff_client/chrome/content/main/menu_frame_overlay.xul index 1d0ccb69f6..3fa36e0c3c 100644 --- a/Open-ILS/xul/staff_client/chrome/content/main/menu_frame_overlay.xul +++ b/Open-ILS/xul/staff_client/chrome/content/main/menu_frame_overlay.xul @@ -39,7 +39,28 @@ - + + + + + + + + + + + + + + + + + + + + + + diff --git a/Open-ILS/xul/staff_client/chrome/content/util/network.js b/Open-ILS/xul/staff_client/chrome/content/util/network.js index 5cbec25199..14b8f35d14 100644 --- a/Open-ILS/xul/staff_client/chrome/content/util/network.js +++ b/Open-ILS/xul/staff_client/chrome/content/util/network.js @@ -89,6 +89,12 @@ util.network.prototype = { '\noverride_params = ' + override_params + '\n_params = ' + _params + '\nResult #' + (++obj.link_id) + ( f ? ' asynced' : ' synced' ) ); + if (document.getElementById('network_progress')) { + if (g && g.menu && g.menu.network_meter && typeof g.menu.network_meter.inc == 'function') g.menu.network_meter.inc(app,name); + } else if (typeof xulG != 'undefined') { + if (xulG && xulG.network_meter && typeof xulG.network_meter.inc == 'function') xulG.network_meter.inc(app,name); + } + var request = new RemoteRequest( app, name ); if (_params && _params.secure) { request.setSecure(true); @@ -106,6 +112,13 @@ util.network.prototype = { try { var duration = ( (new Date).getTime() - start_timer )/1000; if ( obj.get_result(req) == null && duration > obj.network_timeout ) req.cancelled = true; + + if (document.getElementById('network_progress')) { + if (g && g.menu && g.menu.network_meter && typeof g.menu.network_meter.dec == 'function') g.menu.network_meter.dec(app,name); + } else if (typeof xulG != 'undefined') { + if (xulG && xulG.network_meter && typeof xulG.network_meter.dec == 'function') xulG.network_meter.dec(app,name); + } + var json_string = js2JSON(obj.get_result(req)); obj.error.sdump('D_SES_RESULT','asynced result #' + obj.link_id + '\n\n' @@ -140,6 +153,13 @@ util.network.prototype = { request.send(true); var duration = ( (new Date).getTime() - start_timer )/1000; if ( obj.get_result(request) == null && duration > obj.network_timeout ) request.cancelled = true; + + if (document.getElementById('network_progress')) { + if (g && g.menu && g.menu.network_meter && typeof g.menu.network_meter.dec == 'function') g.menu.network_meter.dec(app,name); + } else if (typeof xulG != 'undefined') { + if (xulG && xulG.network_meter && typeof xulG.network_meter.dec == 'function') xulG.network_meter.dec(app,name); + } + } catch(E) { throw(E); } @@ -450,7 +470,39 @@ util.network.prototype = { } catch(E) { throw(E); } - } + }, + + 'ping' : function() { + try { + JSAN.use('util.file'); JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'}); + var file = new util.file('ping.bat'); + var path = file._file.path; + file.write_content('truncate+exec', + '#!/bin/sh\n' + + 'ping -n 15 ' + data.server_unadorned + ' > "' + path + '.txt"\n' + /* windows */ + 'ping -c 15 ' + data.server_unadorned + ' >> "' + path + '.txt"\n' /* unix */ + ); + file.close(); + file = new util.file('ping.bat'); + + var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); + process.init(file._file); + + var args = []; + + dump('process.run = ' + process.run(true, args, args.length) + '\n'); + + file.close(); + + var file = new util.file('ping.bat.txt'); + var output = file.get_content(); + file.close(); + + return output; + } catch(E) { + alert(E); + } + } } /* -- 2.11.0