diff options
Diffstat (limited to 'qx08/source/class/tr/ui/TraceTable.js')
-rw-r--r-- | qx08/source/class/tr/ui/TraceTable.js | 279 |
1 files changed, 152 insertions, 127 deletions
diff --git a/qx08/source/class/tr/ui/TraceTable.js b/qx08/source/class/tr/ui/TraceTable.js index 2291c2c..42ed8cc 100644 --- a/qx08/source/class/tr/ui/TraceTable.js +++ b/qx08/source/class/tr/ui/TraceTable.js @@ -1,6 +1,9 @@ /* ************************************************************************ -#module(Tr) -************************************************************************ */ + Copyright: 2008, OETIKER+PARTNER AG + License: GPL + Authors: Tobias Oetiker + $Id: $ +* ************************************************************************ */ /** * a widget showing the Tr target tree @@ -8,21 +11,11 @@ qx.Class.define('tr.ui.TraceTable', { extend : qx.ui.table.Table, - - - - /* - ***************************************************************************** - CONSTRUCTOR - ***************************************************************************** - */ - construct : function() { var tableModel = new qx.ui.table.model.Simple(); this.__tableModel = tableModel; - tableModel.setColumns([ this.tr("Hop"), this.tr("Host"), this.tr("Ip"), this.tr("Loss [%]"), this.tr("Sent"), this.tr("Last [ms]"), * // "; help syntax highliter - this.tr("Avg [ms]"), this.tr("Best [ms]"), this.tr("Worst [ms]"), this.tr("StDev [ms]") ]); + tableModel.setColumns([ this.tr("Hop"), this.tr("Host"), this.tr("Ip"), this.tr("Loss [%]"), this.tr("Sent"), this.tr("Last [ms]"), this.tr("Avg [ms]"), this.tr("Best [ms]"), this.tr("Worst [ms]"), this.tr("StDev [ms]") ]); var custom = { tableColumnModel : function(obj) { @@ -63,18 +56,8 @@ qx.Class.define('tr.ui.TraceTable', { resizeBehavior.set(i, { width : '3*' }); } - qx.event.message.Bus.subscribe('tr.cmd', this.__handle_tr, this); }, - - - - /* - ***************************************************************************** - Statics - ***************************************************************************** - */ - members : { __handle : null, __data : null, @@ -116,151 +99,191 @@ qx.Class.define('tr.ui.TraceTable', { * TODOC * * @type member - * @param m {var} TODOC + * @param retval {var} TODOC + * @param exc {Exception} TODOC + * @param id {var} TODOC * @return {void} */ - __handle_tr : function(m) { - var self = this; - var f_host = 1, f_ip = 2, f_loss = 3, f_snt = 4, f_last = 5, f_avg = 6, f_best = 7, f_worst = 8, f_stdev = 9, f_cnt = 10, f_sum = 11, f_sqsum = 12; - var fill_table; - - fill_table = function(retval, exc, id) { - if (exc == null) { - if (self.__handle == undefined) { - qx.event.message.Bus.dispatch('tr.status', 'started'); - } + __fill_table : function(retval, exc, id) { + var f_host = 1; + var f_ip = 2; + var f_loss = 3; + var f_snt = 4; + var f_last = 5; + var f_avg = 6; + var f_best = 7; + var f_worst = 8; + var f_stdev = 9; + var f_cnt = 10; + var f_sum = 11; + var f_sqsum = 12; + var that = this; + + if (exc == null) { + if (this.__handle == undefined) { + qx.event.message.Bus.dispatch('tr.status', 'started'); + } - self.__handle = retval['handle']; - var tableModel = self.__tableModel; - var lines = retval['output'].length; - var data = self.__data; - var sleep = 0; + this.__handle = retval['handle']; + var tableModel = this.__tableModel; + var lines = retval['output'].length; + var data = this.__data; + var sleep = 0; - for (var i=0; i<lines; i++) { - sleep = 0; - var hop = retval['output'][i][0]; + for (var i=0; i<lines; i++) { + sleep = 0; + var hop = retval['output'][i][0]; - if (hop == 'SLEEP') { - sleep = retval['output'][i][1]; - continue; - } - else if (hop == 'INFO') { - qx.event.message.Bus.dispatch('tr.info', retval['output'][i][1]); - continue; + if (hop == 'SLEEP') { + sleep = retval['output'][i][1]; + continue; + } + else if (hop == 'INFO') { + qx.event.message.Bus.dispatch('tr.info', retval['output'][i][1]); + continue; + } + + var host = retval['output'][i][1]; + var ip = retval['output'][i][2]; + var value = retval['output'][i][3]; + var ii = 0; + var max = data.length; + + while (true) { + if (ii == max) { + break; } - var host = retval['output'][i][1]; - var ip = retval['output'][i][2]; - var value = retval['output'][i][3]; - var ii = 0; - var max = data.length; + if (Math.floor(data[ii][0]) > hop) { + break; + } - while (true) { - if (ii == max) { + if (Math.floor(data[ii][0]) == hop) { + if (ip == undefined) { break; } - if (Math.floor(data[ii][0]) > hop) { + if (ip == data[ii][2]) { break; } - - if (Math.floor(data[ii][0]) == hop) { - if (ip == undefined) { - break; - } - - if (ip == data[ii][2]) { - break; - } - } - - ii++; } - if (ii == max || Math.floor(data[ii][0]) > hop) { - if (ii > 0 && Math.floor(data[ii - 1][0]) == hop) { - hop = data[ii - 1][0] + 0.1; - } + ii++; + } - data.splice(ii, 0, self.__make_empty_row()); - data[ii][0] = hop; + if (ii == max || Math.floor(data[ii][0]) > hop) { + if (ii > 0 && Math.floor(data[ii - 1][0]) == hop) { + hop = data[ii - 1][0] + 0.1; } - var drow = data[ii]; + data.splice(ii, 0, this.__make_empty_row()); + data[ii][0] = hop; + } - if (drow[f_host] == undefined && host != undefined) { - drow[f_host] = host; - } + var drow = data[ii]; - if (drow[f_ip] == undefined && ip != undefined) { - drow[f_ip] = ip; - } + if (drow[f_host] == undefined && host != undefined) { + drow[f_host] = host; + } - drow[f_snt]++; - drow[f_last] = value; + if (drow[f_ip] == undefined && ip != undefined) { + drow[f_ip] = ip; + } - if (value != undefined) { - var best = drow[f_best]; + drow[f_snt]++; + drow[f_last] = value; - if (best == undefined || best > value) { - drow[f_best] = value; - } + if (value != undefined) { + var best = drow[f_best]; - var worst = drow[f_worst]; + if (best == undefined || best > value) { + drow[f_best] = value; + } - if (worst == undefined || worst < value) { - drow[f_worst] = value; - } + var worst = drow[f_worst]; - drow[f_sum] += value; - var sum = drow[f_sum]; - drow[f_cnt]++; - var cnt = drow[f_cnt]; - var sqsum = drow[f_sqsum] + value * value; - drow[f_sqsum] = sqsum; - drow[f_avg] = drow[f_sum] / drow[f_cnt]; - drow[f_stdev] = Math.sqrt((cnt * sqsum - sum * sum) / (cnt * (cnt - 1))); + if (worst == undefined || worst < value) { + drow[f_worst] = value; } - drow[f_loss] = ((drow[f_snt] - drow[f_cnt]) / drow[f_snt]) * 100; + drow[f_sum] += value; + var sum = drow[f_sum]; + drow[f_cnt]++; + var cnt = drow[f_cnt]; + var sqsum = drow[f_sqsum] + value * value; + drow[f_sqsum] = sqsum; + drow[f_avg] = drow[f_sum] / drow[f_cnt]; + drow[f_stdev] = Math.sqrt((cnt * sqsum - sum * sum) / (cnt * (cnt - 1))); } - tableModel.setData(data); + drow[f_loss] = ((drow[f_snt] - drow[f_cnt]) / drow[f_snt]) * 100; + } - if (retval['again']) { - var next_round = function() { - tr.Server.getInstance().callAsync(fill_table, 'run_tr', { - handle : retval['handle'], - point : retval['point'] - }); - }; + tableModel.setData(data); - qx.event.Timer.once(next_round, self, sleep * 1000); - } - else { - self.__stop_table(); - } + if (retval['again']) { + var next_round = function() { + tr.Server.getInstance().callAsync(function(ret, exc, id) { + that.__fill_table(ret, exc, id); + }, 'run_tr', { + handle : retval['handle'], + point : retval['point'] + }); + }; + + qx.event.Timer.once(next_round, this, sleep * 1000); } else { - self.__stop_table(); + this.__stop_table(); } - }; + } + else { + this.__stop_table(); + } + }, + + + /** + * TODOC + * + * @type member + * @param data {var} TODOC + * @param exc {Exception} TODOC + * @param id {var} TODOC + * @return {void} + */ + __stop_handler : function(data, exc, id) { + if (exc == null) { + qx.event.message.Bus.dispatch('tr.status', 'stopped'); + } else { + this.error(exc); + } + }, + + subscribe: function(handle){ + qx.event.message.Bus.subscribe(handle+'::data', this.__handle_tr, this); + }, - var stop_handler = function(data, exc, id) { - if (exc == null) { - qx.event.message.Bus.dispatch('tr.status', 'stopped'); - } else { - this.error(exc); - } - }; + /** + * TODOC + * + * @type member + * @param m {var} TODOC + * @return {void} + */ + __handle_tr : function(m) { + var that = this; var cmd = m.getData(); switch(cmd['action']) { case 'stop': qx.event.message.Bus.dispatch('tr.status', 'stopping'); - tr.Server.getInstance().callAsync(stop_handler, 'stop_tr', this.__handle); + tr.Server.getInstance().callAsync(function(ret, exc, id) { + that.__stop_handler(ret, exc, id); + }, 'stop_tr', this.__handle); + break; case 'go': @@ -273,7 +296,9 @@ qx.Class.define('tr.ui.TraceTable', { } qx.event.message.Bus.dispatch('tr.status', 'starting'); - tr.Server.getInstance().callAsync(fill_table, 'run_tr', { + tr.Server.getInstance().callAsync(function(ret, exc, id) { + that.__fill_table(ret, exc, id); + }, 'run_tr', { host : cmd['host'], rounds : cmd['rounds'], delay : cmd['delay'] @@ -286,4 +311,4 @@ qx.Class.define('tr.ui.TraceTable', { } } } -});
\ No newline at end of file +}); |