Changeset 1ce987a5cb94bbac2a5e72b72b9c2f926711eb1b

Show
Ignore:
Timestamp:
01/29/09 00:04:39 (9 years ago)
Author:
Umar Farooq <umar@omniti.com>
git-committer:
Umar Farooq <umar@omniti.com> 1233187479 +0000
git-parent:

[27a81dcc8bdf6a04ebcd3cd9efeacb79df2a2784]

git-author:
Umar Farooq <umar@omniti.com> 1233187479 +0000
Message:

changes to allow better live streaming, now working in graph edit mode, and bug fixes

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • ui/web/htdocs/graph_panel.inc

    r2f41995 r1ce987a  
    5151function graph_stream_data() { 
    5252 
     53polltime = 5000; 
     54time_width = 50000; 
    5355stream_object = maingraph; 
    5456stream_dirty = false; 
    55 maingraph.ReconGraphClear(); 
     57maingraph.ReconGraphPrepareStream(time_width, polltime); 
     58 
    5659 
    5760sids = "";  
     61var sidneed = new Object(); 
    5862for(var i=0; i<graphinfo.datapoints.length; i++) { 
    59     sids+= graphinfo.datapoints[i].sid+","; 
     63    if(graphinfo.datapoints[i].sid) { 
     64      sidneed[graphinfo.datapoints[i].sid] = polltime; 
     65    } 
     66
     67for(var sid in sidneed) { 
     68    sids+= "/"+sid+"@"+sidneed[sid]; 
    6069} 
    6170 
    6271maingraph.everyTime(1000, function() { 
    63     if(!gstreaming) {   maingraph.stopTime();} 
     72    if(!gstreaming) {    
     73       $('#gstreambox').html(''); 
     74       maingraph.stopTime(); 
     75    } 
    6476    else { 
    6577    if(stream_dirty){ 
     
    7082}); 
    7183//var tstep = 0; 
    72 //maingraph.everyTime(250, function () { tstep++; plot_iframe_data(1179, 'allocator_requests', tstep*tstep, tstep*250000);}); 
    73  
    74 $('#gstreambox').html('<iframe src="http://bob.office.omniti.com/data"></iframe>'); 
     84//maingraph.everyTime(250, function () { tstep++; plot_iframe_data((tstep*250000).toString(), '1179', 'allocator_requests',  '5000');}); 
     85 
     86console.log("sids = ", sids); 
     87 
     88$('#gstreambox').html('<iframe src="http://bob.office.omniti.com/data'+sids+'"></iframe>'); 
    7589 
    7690} 
     
    319333                    lock_forms(); 
    320334                    $(".editGraph").html('Edit Graph').fadeIn('slow'); 
     335                    if(gstreaming) {  
     336                      gstreaming = false; 
     337                      $('#gstreambox').html(''); 
     338                      $(this).html('Stream Data').fadeIn('slow'); 
     339                      update_current_graph(true);  
     340                      } 
    321341                } 
    322342        }); 
  • ui/web/htdocs/js/recon.js

    r2f41995 r1ce987a  
    22var stream_object; 
    33var stream_dirty; 
     4var debug_count = 0; 
    45 
    56//set the global streaming object to the local ReconGraph object to use, 
    67// and init,update the global streaming boolean to then call this from a server 
    7 function plot_iframe_data(uuid, metric_name, ydata, xdata) { 
    8   stream_object.ReconGraphAddPoint(uuid, metric_name, xdata, ydata); 
     8function plot_iframe_data(xdata, uuid, metric_name, ydata) { 
     9    stream_object.ReconGraphAddPoint(xdata, uuid, metric_name, ydata); 
    910  stream_dirty = true; 
    1011} 
     
    138139          return this; 
    139140        }, 
    140       clear
    141         function () {                       
     141      PrepareStream
     142        function (time_window, time_interval) {                       
    142143            if(this.flot_plot) { 
    143                 for(var i=0; i<ddata.length;i++) {                  
     144                doptions.time_window = time_window; 
     145                doptions.time_interval = time_interval; 
     146                doptions.max_time = 0; 
     147                for(var i=0; i<ddata.length;i++) {   
    144148                    ddata[i].data = []; 
    145149                }                
     
    151155        }, 
    152156     AddPoint: 
    153         function (uuid, metric_name, xdata, ydata) { 
     157        function (xdata, uuid, metric_name, ydata) { 
     158 
     159            debug_count++; 
     160 
    154161            tdata = [xdata, ydata.toString()]; 
    155162 
    156163            for(var i=0; i<ddata.length;i++) { 
    157                 if( !ddata[i].hidden && (ddata[i].uuid_name ==  (uuid+"-"+metric_name)) ) { 
    158  
    159                     if(ddata[i].data.length>0) ddata[i].lastval = ddata[i].data[0]; 
    160                     if(ddata[i].lastval) { 
    161                         slope = (tdata[0] - ddata[i].lastval[0]) / (tdata[1] - ddata[i].lastval[1]);                  
    162                         if(ddata[i].derive_val == 'derive') { 
    163                             tdata[1] = slope; 
     164                if( (ddata[i].uuid ==  uuid)  
     165                    && (ddata[i].metric_name == metric_name) 
     166                    && !ddata[i].hidden ) { 
     167                    //    console.log("got data from stream for ",uuid,"-",metric_name," data = ",tdata, "hidden = ", ddata[i].hidden); 
     168 
     169                    if(ddata[i].metric_type == 'numeric') { 
     170 
     171            if((xdata*1000)>doptions.max_time) { doptions.max_time = xdata*1000; } 
     172            if( !doptions.min_time || ((xdata*1000)<doptions.min_time)) { doptions.min_time = xdata*1000;} 
     173 
     174                        if(ddata[i].lastval) { 
     175                            slope = (tdata[1] - ddata[i].lastval[1]) / (tdata[0] - ddata[i].lastval[0]);                      
     176                            if(ddata[i].derive_val == 'derive') { 
     177                                tdata[1] = slope; 
     178                            } 
     179                            else if(ddata[i].derive_val == 'counter') { 
     180                                if(slope>=0) tdata[1] = slope;  
     181                                else tdata[1] = ''; 
     182                            } 
     183                        }//end if there was a last value available     
     184                        //if this is the first live datapoint, set slope and count to null 
     185                        else if( (ddata[i].derive_val == 'derive') || (ddata[i].derive_val == 'counter') ) 
     186                            { 
     187                                tdata[1]=''; 
     188                            }                        
     189                        if(tdata[1]!=''){ 
     190                            if(ddata[i].reconnoiter_source_expression) { 
     191                                tdata[1] = rpn_eval(tdata[1], ddata[i].reconnoiter_source_expression); 
    164192                        } 
    165                         else if(ddata[i].derive_val == 'counter') { 
    166                             if(slope>=0) tdata[1] = tdata[1] - ddata[i].lastval[1]; 
    167                             else tdata[1] = ''; 
     193                            if(ddata[i].reconnoiter_display_expression) { 
     194                                tdata[1] = rpn_eval(tdata[1], ddata[i].reconnoiter_display_expression); 
     195                            } 
     196                        } //end if ydata was a number 
     197                         
     198                        tdata[0]*=1000; //convert from seconds to milliseconds for flot 
     199                        ddata[i].data.push(tdata); 
     200                        if(ddata[i].lastval) { 
     201                            if ((tdata[0] - ddata[i].data[0][0]) > doptions.time_window) { 
     202                                ddata[i].data.shift(); 
     203                            } 
    168204                        } 
    169                     } //end if there was a previous value available 
     205                    }//end if metric was numeric 
    170206                     
    171                     if(tdata[1]!=''){ 
    172                         if(ddata[i].reconnoiter_source_expression) { 
    173                             tdata[1] = rpn_eval(tdata[1], ddata[i].reconnoiter_source_expression); 
     207                    //if we have a text data type 
     208                    else {  
     209                        /* 
     210                        tdata[0]*=1000; //convert from seconds to milliseconds for flot 
     211                        tdata.push(tdata[1]); 
     212                        tdata[1] = "0";  
     213                         
     214                        //if we had a previous value stored, only push data to plot when the value changes 
     215                        //or if our earliest value's timestamp would fall below of any numeric minimum timestamp 
     216                        if(ddata[i].lastval) { 
     217                            if( (ddata[i].lastval[1] != tdata[2]) || ((ddata[i].lastval[0]*1000)<doptions.min_time) ) { 
     218                                ddata[i].data.push(tdata); 
     219                                if ((tdata[0] - ddata[i].data[0][0]) > doptions.time_window) { 
     220                                    ddata[i].data.shift(); 
     221                                } 
     222                            } 
    174223                        } 
    175                         if(ddata[i].reconnoiter_display_expression) { 
    176                             tdata[1] = rpn_eval(tdata[1], ddata[i].reconnoiter_display_expression); 
     224                        //if we are adding a text point for the first time 
     225                        else {  
     226                            ddata[i].data.push(tdata); 
    177227                        } 
    178                         if(ddata[i].data.unshift(tdata) >70) { 
    179                             ddata[i].data.pop(); 
    180                         } 
    181                     } //end if ydata was a number 
     228                        */ 
     229                    }//end if text metric type 
     230                     
     231                    ddata[i].lastval = [xdata, ydata]; 
     232                     
    182233                } //end if the uuid and metric_name match 
    183234            } //end for each dataset         
     235             
    184236            return this; 
    185237        }, 
    186238    PlotPoints: 
    187239        function () { 
     240             
     241            //            console.log("min data = ",doptions.min_time," max data=",doptions.max_time); 
     242 
     243            if( (doptions.max_time >= doptions.min_time + doptions.time_window)) { 
     244                doptions.xaxis.min = doptions.xaxis.max = null; 
     245            } 
     246            else { 
     247                //              doptions.xaxis.min = doptions.min_time; 
     248                doptions.xaxis.max = doptions.min_time + doptions.time_window; 
     249            } 
     250 
     251            //            console.log("xmin = ",doptions.xaxis.min," xmax = ",doptions.xaxis.max); 
     252             
    188253            this.flot_plot = $.plot(dplaceholder, ddata, doptions); 
    189254            return this; 
     
    234299          doptions = r.options; 
    235300          dplaceholder = placeholder; 
    236           ddata = r.data; 
     301          ddata = r.data;           
    237302          var plot = this.flot_plot = $.plot(placeholder, r.data, r.options); 
    238303          var hovering; 
     
    302367                ReconGraphReset: ReconGraph.reset, 
    303368              ReconGraphMacro: ReconGraph.macro, 
    304               ReconGraphClear: ReconGraph.clear
     369              ReconGraphPrepareStream: ReconGraph.PrepareStream
    305370              ReconGraphAddPoint: ReconGraph.AddPoint, 
    306371              ReconGraphPlotPoints: ReconGraph.PlotPoints 
  • ui/web/htdocs/worksheet_panel.inc

    r2f41995 r1ce987a  
    1313 
    1414function stream_data() { 
     15 
     16  polltime = 5000; 
     17  timewindow = 6000000; 
    1518  stream_object = stream_graph; 
    1619  stream_dirty = false; 
    17   stream_graph.ReconGraphClear(); 
     20  stream_graph.ReconGraphPrepareStream(timewindow, polltime); 
    1821 
    1922//setup functionality so that every second check if we are streaming and dirty, plot if true 
     
    103106                        smod.close(); 
    104107                      }); 
     108/* 
    105109                      $(".zoomStream").click(function() { 
    106110                        if(!streaming) { 
     
    115119                           stream_graph.ReconGraphRefresh({graphid: g.graphid}); 
    116120                        } 
     121 
    117122                      }); //end stream click function                       
    118  
     123*/ 
    119124                    }); //end zoom click function 
    120125 
  • ui/web/lib/Reconnoiter_ChangeSet.php

    re9447ec r1ce987a  
    66  protected $groupname; 
    77  protected $derive; 
     8  protected $uuid; 
    89 
    910  function __construct($uuid, $name, $start, $end, $cnt = 400) { 
     
    1314    $last = end($this->data); 
    1415    if($last) $this->last_value = $last['value']; 
     16    $this->uuid = $db->get_uuid_by_sid($uuid); 
    1517  } 
    1618  function groupname($gn = null) { 
     
    3436    return $this->derive; 
    3537  } 
     38  function uuid_val() { 
     39    return $this->uuid; 
     40  } 
    3641} 
    3742 
  • ui/web/lib/Reconnoiter_DB.php

    r2f41995 r1ce987a  
    406406    return $id; 
    407407  } 
     408  function get_uuid_by_sid($sid) { 
     409    $sth = $this->db->prepare("select * from stratcon.map_uuid_to_sid 
     410                                           where sid=?"); 
     411    $sth->execute(array($sid)); 
     412    $row = $sth->fetch(); 
     413    return $row['id']; 
     414  } 
    408415  function getGraphByID($id) { 
    409416    $sth = $this->db->prepare("select * 
     
    419426    $sth->execute(array($ws_id, $graphid)); 
    420427  } 
     428 
     429//TODO this should delete from saved_graphs_dep too 
    421430  function deleteGraph($id) { 
    422431    $sth = $this->db->prepare("delete from prism.saved_graphs 
     
    458467                                      values (?,?,?,?)"); 
    459468      foreach($graph['datapoints'] as $datapoint) { 
    460         if($datapoints['sid']) { 
     469        if($datapoint['sid']) { 
    461470          $sth->execute(array($id, $datapoint['sid'], 
    462471                              $datapoint['metric_name'], 
  • ui/web/lib/Reconnoiter_DataSet.php

    r4b269cd r1ce987a  
    99  protected $groupname; 
    1010  protected $derive; 
     11  protected $uuid; 
     12 
    1113  function __construct($uuid, $name, $derive, $expr, $start, $end, $cnt = 400) { 
    1214    $db = Reconnoiter_DB::getDB(); 
     
    1517 
    1618    $this->derive = $derive; 
     19   $this->uuid = $db->get_uuid_by_sid($uuid); 
    1720 
    1821    if($derive == 'derive' || $derive == 'true') { 
     
    4144    return $this->derive; 
    4245  } 
     46  function uuid_val() { 
     47    return $this->uuid; 
     48  } 
    4349  function data($ts, $attr = NULL) { 
    4450    if(!isset($attr)) $attr = $this->default_attr; 
  • ui/web/lib/Reconnoiter_flot_Driver.php

    r4b269cd r1ce987a  
    2727    $i = 0; 
    2828    foreach($this->sets as $name => $set) { 
     29      $m_name = explode("-", $name);       
    2930      $ds = array ( 
    3031        'reconnoiter_source_expression' => $set->expression(), 
     
    3435        'yaxis' => ($this->sets_config[$name]['axis'] == 'right') ? 2 : 1, 
    3536        'derive_val' => $set->derive_val(), 
    36         'uuid_name' => $name, 
     37        'uuid' => $set->uuid_val(), 
     38        'metric_name' => $m_name[1], 
     39        'metric_type' => (get_class($set) == "Reconnoiter_DataSet") ? 'numeric' : 'text', 
     40        'hidden' => ($this->sets_config[$name]['hidden'] == "true") ? 1: 0, 
    3741      ); 
    3842      $show_set = ($this->sets_config[$name]['hidden'] != "true") ? 1: 0;