summaryrefslogtreecommitdiffstats
path: root/qx08/source/class/tr/ui/TraceTable.js
diff options
context:
space:
mode:
Diffstat (limited to 'qx08/source/class/tr/ui/TraceTable.js')
-rw-r--r--qx08/source/class/tr/ui/TraceTable.js279
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
+});