summaryrefslogtreecommitdiffstats
path: root/qooxdoo/source/class/Tr/ui/TraceTable.js
diff options
context:
space:
mode:
authorTobi Oetiker <tobi@oetiker.ch>2008-06-04 23:33:02 +0200
committerTobi Oetiker <tobi@oetiker.ch>2008-06-04 23:33:02 +0200
commit8364e6bbedf919008da50cc1b54dbb8a49dee88d (patch)
tree43000d161c268f626badf9723ff97b3e0e8527ee /qooxdoo/source/class/Tr/ui/TraceTable.js
parent4940f51d54f1f4b994c02138defbcd8ff36a95ec (diff)
downloadsmokeping-8364e6bbedf919008da50cc1b54dbb8a49dee88d.tar.gz
smokeping-8364e6bbedf919008da50cc1b54dbb8a49dee88d.tar.xz
alter name to Tr since we do not use mtr anmore
Diffstat (limited to 'qooxdoo/source/class/Tr/ui/TraceTable.js')
-rw-r--r--qooxdoo/source/class/Tr/ui/TraceTable.js200
1 files changed, 200 insertions, 0 deletions
diff --git a/qooxdoo/source/class/Tr/ui/TraceTable.js b/qooxdoo/source/class/Tr/ui/TraceTable.js
new file mode 100644
index 0000000..c25a82e
--- /dev/null
+++ b/qooxdoo/source/class/Tr/ui/TraceTable.js
@@ -0,0 +1,200 @@
+/* ************************************************************************
+#module(Tr)
+************************************************************************ */
+
+/**
+ * a widget showing the Tr target tree
+ */
+
+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 [ms]"), this.tr("Last [ms]"), //"; help syntax highliter
+ this.tr("Avg [ms]"), this.tr("Best [ms]"), this.tr("Worst [ms]"), this.tr("StDev [ms]") ]);
+ var custom = {
+ tableColumnModel: function(obj) {
+ return new qx.ui.table.columnmodel.Resize(obj);
+ }
+ };
+ with(this){
+ base(arguments,tableModel,custom);
+ set({
+ width: '100%',
+ height: '1*',
+ border: 'dark-shadow',
+ showCellFocusIndicator: false,
+ statusBarVisible: false
+ });
+ };
+ var tcm = this.getTableColumnModel();
+
+ tcm.setDataCellRenderer(0, new Tr.ui.Cellrenderer(2));
+ tcm.setDataCellRenderer(3, new Tr.ui.Cellrenderer(0,' %'));
+ tcm.setDataCellRenderer(4, new Tr.ui.Cellrenderer(0));
+
+ var render_ms = new Tr.ui.Cellrenderer(1);
+
+ for (var i=5;i<10;i++){
+ tcm.setDataCellRenderer(i, render_ms);
+ }
+
+
+ // Obtain the behavior object to manipulate
+ var resizeBehavior = tcm.getBehavior();
+ // This uses the set() method to set all attriutes at once; uses flex
+ resizeBehavior.set(0, { width:"2*"});
+ resizeBehavior.set(1, { width:"10*"});
+ resizeBehavior.set(2, { width:"6*"});
+
+ for (var i=3;i<10;i++){
+ resizeBehavior.set(i, { width:"2*"});
+ }
+ qx.event.message.Bus.subscribe('tr.cmd',this.__handle_tr,this);
+ },
+
+ /*
+ *****************************************************************************
+ Statics
+ *****************************************************************************
+ */
+ members: {
+ __make_empty_row: function (){
+ return ([undefined,undefined,undefined,0,0,undefined,undefined,undefined,undefined,undefined,0,0,0]);
+ },
+ __handle_tr: function(m){
+ var self = this;
+ var f_hop = 0,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');
+ }
+ self.__handle = retval['handle'];
+ var tableModel = self.__tableModel;
+ var lines = retval['output'].length;
+ var data = self.__data;
+ for(var i=0;i<lines;i++){
+ var hop = retval['output'][i][0];
+ 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 ( ii < max
+ && ( Math.floor(data[ii][0]) < hop
+ || ( Math.floor(data[ii][0]) == hop && data[ii][1] != host)
+ )
+ ){
+ ii++;
+ }
+ if (ii == max || ( Math.floor(data[ii][0]) == hop && data[ii][1] != host) ){
+ if (ii < max){
+ hop = data[ii][0] + 0.01;
+ }
+ data.splice(ii,0,self.__make_empty_row());
+ data[ii][0] = hop;
+ }
+
+ var drow = data[ii];
+ if (drow[f_host] == undefined){
+ drow[f_host] = host;
+ }
+ if (drow[f_ip] == undefined){
+ drow[f_ip] = ip;
+ }
+ drow[f_snt]++;
+ drow[f_last] = value;
+ var best = drow[f_best];
+ if (best == undefined || best > value){
+ drow[f_best] = value;
+ }
+ var worst = drow[f_worst];
+ if (worst == undefined || worst < value){
+ drow[f_worst] = value;
+ }
+
+
+ if (value != undefined){
+ 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)))
+ }
+ drow[f_loss] = ((drow[f_snt]-drow[f_cnt])/drow[f_snt])*100;
+ }
+
+ tableModel.setData(data);
+ if (retval['again']){
+ var next_round = function (){Tr.Server.getInstance().callAsync(
+ fill_table,'run_tr',{ handle: retval['handle'],
+ point: retval['point']})};
+ qx.client.Timer.once(next_round,self,0);
+ } else
+ {
+ for (var i=0;i<10;i++){
+ tableModel.setColumnSortable(i,true);
+ }
+ qx.event.message.Bus.dispatch('tr.status','stopped');
+ self.__handle = undefined;
+ }
+ }
+ else {
+ alert(exc);
+ if (self.__handle){
+ self.__handle = undefined;
+ }
+ for (var i=0;i<10;i++){
+ self.__tableModel.setColumnSortable(i,true);
+ }
+ qx.event.message.Bus.dispatch('tr.status','stopped');
+ }
+ };
+
+ var handle_returns = function (data,exc,id){
+ if (exc != null){
+ alert(exc);
+ }
+ };
+
+ var cmd = m.getData();
+ switch(cmd['action']){
+ case 'stop':
+ qx.event.message.Bus.dispatch('tr.status','stopping');
+ Tr.Server.getInstance().callAsync(handle_returns,'stop_tr',this.__handle);
+ break;
+ case 'go':
+ this.__data = [];
+ this.__tableModel.setData(this.__data);
+ this.__delay = cmd['delay'];
+ for (var i=0;i<10;i++){
+ this.__tableModel.setColumnSortable(i,false);
+ }
+ qx.event.message.Bus.dispatch('tr.status','starting');
+ Tr.Server.getInstance().callAsync(fill_table,'run_tr',{host: cmd['host'], rounds: cmd['rounds'], delay: cmd['delay']});
+ break;
+ default:
+ alert('Unknown Command '+cmd['action']);
+ }
+ }
+ }
+});
+
+