Changeset 5b94a67792e4df22f400e40ae13bfbe07735a057
- Timestamp:
- 07/07/09 21:59:29 (9 years ago)
- git-parent:
- Files:
-
- ui/web/htdocs/css/style.css (modified) (1 diff)
- ui/web/htdocs/graph_panel.inc (modified) (7 diffs)
- ui/web/htdocs/index.php (modified) (1 diff)
- ui/web/htdocs/js/recon.js (modified) (3 diffs)
- ui/web/lib/Reconnoiter_CompositeSet.php (modified) (2 diffs)
- ui/web/lib/Reconnoiter_flot_Driver.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
ui/web/htdocs/css/style.css
r41084bb r5b94a67 1007 1007 float:right; 1008 1008 color:#660000; 1009 } 1010 span.addGuide { 1011 padding-left:10px; 1009 1012 } 1010 1013 span.graphStacks { ui/web/htdocs/graph_panel.inc
rf8f9b3d r5b94a67 28 28 $("h2#graphTitle").unbind(); 29 29 $(".datatitle").unbind(); 30 $(".combinable").each( function() { $(this).draggable('destroy'); }); 31 $(".composite_function").each( function() { $(this).droppable('destroy'); }); 30 32 } 31 33 … … 51 53 return(value); 52 54 }, { }); 53 } 54 55 56 make_composite_draggables(); 57 } 58 59 function make_composite_draggables() { 60 61 $(".combinable").each ( function() { 62 $(this).draggable({ cursor: 'move' }); 63 }); 64 65 $(".composite_function").each( function () { $(this).droppable({ 66 drop: function(event, ui) { 67 var data_index = $(".datatitle").index(ui.draggable); 68 fbox = $(this).find("input[name='math2']"); 69 fbox.val(fbox.val()+"["+data_index+"]"); 70 var my_index = $("input[name='math2']").index(fbox); 71 graphinfo.datapoints[my_index].math2 = fbox.val(); 72 update_current_graph(true); 73 } 74 }); 75 }); 76 77 } 55 78 function update_graph_permalink(id, start, end, gran){ 56 79 $("#gpermalink a").attr("href", "drawing_board.php?otype=graph&id="+id+"&start="+start+"&end="+end+"&gran="+gran); … … 162 185 function graph_add_datapoint(d) { 163 186 if(!graph_locked("Click 'Edit Graph' to unlock.")){ 164 165 187 for(i=0; i<graphinfo.datapoints.length; i++){ 166 188 if( (graphinfo.datapoints[i].sid==d.sid) && (graphinfo.datapoints[i].metric_name == d.metric_name) ) { … … 329 351 ( (d.orig_name!=undefined)? d.orig_name+"`": '') + 330 352 ( (d.metric_name!=undefined)? "`"+d.metric_name: ''); 331 353 332 354 o.find(".datatitle").html(d.name); 333 355 o.find(".datatitle").attr("title", d.mouse_title); … … 342 364 343 365 recurse--; 344 $("#gtool #dataPoints").append(o.children()); 366 $("#gtool #dataPoints").append(o.children()); 367 if(!locked){ make_composite_draggables();} 345 368 } 346 369 … … 692 715 <label for="math">Display Math</label> <input name="math1" type="text" value="" style="width:380px;" /> 693 716 </div> 694 <div >717 <div class="composite_function"> 695 718 <label for="math">Function</label> <input name="math2" type="text" value="" style="width:380px;" /> 696 719 </div> … … 701 724 <tr> 702 725 <td><input name="view" type="checkbox" value="1"/></td> 703 <td class="data datatitle "></td>726 <td class="data datatitle combinable"></td> 704 727 <td><select id="datastack" class="av_stacks"><option value='na'>select</option></select></td> 705 728 <td><div class="colorPicker"><div class="colorSelector"><div style="background-color: #fff"></div></div><div class="colorPickerHolder"></div></div></td> ui/web/htdocs/index.php
r21720f4 r5b94a67 20 20 <script src="js/jquery-ui-1.7.2/ui/ui.sortable.js"></script> 21 21 <script src="js/jquery-ui-1.7.2/ui/ui.slider.js"></script> 22 <script src="js/jquery-ui-1.7.2/ui/ui.draggable.js"></script> 23 <script src="js/jquery-ui-1.7.2/ui/ui.droppable.js"></script> 22 24 <script src="js/jquery.flot.js"></script> 23 25 <script src="js/jquery.jeditable.pack.js"></script> ui/web/htdocs/js/recon.js
r44c7512 r5b94a67 152 152 break; 153 153 case 'min': 154 s.unshift( min(s.shift(),s.shift())); break;154 s.unshift(Math.min(s.shift(),s.shift())); break; 155 155 case 'max': 156 s.unshift( max(s.shift(),s.shift())); break;156 s.unshift(Math.max(s.shift(),s.shift())); break; 157 157 default: 158 158 if(op.match(/^-?\d+$/)) { 159 159 s.unshift(op); 160 160 } 161 } 162 } 163 var newvalue = s.shift(); 164 return newvalue; 165 } 166 167 function my_rpn_eval(expr, meta) { 168 var s = []; 169 var ops = expr.split(","); 170 for (var i = 0; i < ops.length; i++) { 171 var opname = ops[i]; 172 if(meta && meta[opname]) 173 for(var j = 0; j < meta[opname].length; j++) 174 ops.splice(i, (j==0) ? 1 : 0, meta[opname][j]); 175 } 176 177 for (var i = 0; i < ops.length; i++) { 178 op = ops[i]; 179 180 switch(op) { 181 case 'ln': 182 s.unshift(Math.log(parseFloat(s.shift()))); break; 183 case 'round': 184 r = Math.pow(10,parseFloat(s.shift())); 185 l = parseFloat(s.shift()); 186 s.unshift(Math.round(r * l)/r); 187 break; 188 case 'floor': 189 s.unshift(Math.floor(parseFloat(s.shift()))); break; 190 case 'ceil': 191 s.unshift(Math.ceil(parseFloat(s.shift()))); break; 192 case 'log': 193 r = parseFloat(s.shift()); 194 l = parseFloat(s.shift()); 195 s.unshift(Math.log(l, r)); 196 break; 197 case 'e': 198 s.unshift(Math.exp(1)); break; 199 case 'pi': 200 s.unshift(Math.pi()); break; 201 case '^': 202 r = parseFloat(s.shift()); 203 l = parseFloat(s.shift()); 204 s.unshift(Math.pow(l, r)); 205 break; 206 case '-': 207 r = parseFloat(s.shift()); 208 l = parseFloat(s.shift()); 209 s.unshift(l - r); 210 break; 211 case '/': 212 r = parseFloat(s.shift()); 213 l = parseFloat(s.shift()); 214 s.unshift(l / r); 215 break; 216 case '+': 217 s.unshift(parseFloat(s.shift()) + parseFloat(s.shift()) ); break; 218 case '*': 219 s.unshift(parseFloat(s.shift()) * parseFloat(s.shift())); break; 220 case 'min': 221 s.unshift(Math.min(parseFloat(s.shift()),parseFloat(s.shift()))); break; 222 case 'max': 223 s.unshift(Math.max(parseFloat(s.shift()),parseFloat(s.shift()))); break; 224 default: 225 if(op.match(/^-?\d+$/)) { 226 s.unshift(op); 227 } 228 else if(op.match(/^-?\d+\.\d*$/)) { 229 s.unshift(op); 230 } 161 231 } 162 232 } … … 376 446 }, 377 447 make_composite_data: 378 function (i, data) { 379 // console.log("ok with expr", data[i].reconnoiter_source_expression); 380 }, 448 function (cindex, data) { 449 450 expr = data[cindex].reconnoiter_source_expression; 451 var nindex; 452 for(nindex=0; nindex<data.length; nindex++) { 453 if(data[nindex].metric_type == 'numeric') break; 454 } 455 //TODO we assume here that all numeric datasets have the same length, number of points, and time discreteness 456 //if iths is not the case, we need to think of interpolating, like we do for stacking in flot 457 for(var i=0; i<data[nindex].data.length; i++){ 458 nexpr = expr.replace(/\[(\d+)\]/g, function($1) { 459 mat = $1.match(/\d+/); 460 mat = parseInt(mat); 461 return data[mat].data[i][1]; 462 }); 463 464 var val = my_rpn_eval(nexpr, {}); 465 data[cindex].data.push([ data[nindex].data[i][0], val ]); 466 } 467 468 }, 381 469 plot: 382 470 function (r, redraw) { … … 397 485 398 486 for(var i=0; i<r.data.length; i++) { 487 if(r.data[i].metric_type == 'composite' && r.data[i].reconnoiter_source_expression) 488 this.ReconGraphMakeCompositeData(i, r.data); 489 399 490 if(r.data[i].reconnoiter_display_expression) 400 491 r.data[i].dataManip = rpn_magic(r.data[i].reconnoiter_display_expression); ui/web/lib/Reconnoiter_CompositeSet.php
r44c7512 r5b94a67 22 22 } 23 23 function points() { 24 return array _keys($this->data);24 return array(); 25 25 } 26 26 function description($ts) { … … 37 37 } 38 38 function data($ts, $attr = NULL) { 39 return '';39 return null; 40 40 } 41 41 } ui/web/lib/Reconnoiter_flot_Driver.php
r44c7512 r5b94a67 93 93 $a = array(); 94 94 $prev_value = '0'; 95 $timeline = (get_class($set) == "Reconnoiter_ChangeSet") ? $set->points() : $this->series(); 96 foreach($timeline as $ts) { 97 $value = $set->data($ts); 98 if($value != "") { 99 $desc = $set->description($ts); 100 if($desc) { 101 $a[] = array( $ts * 1000, "$value", $desc ); 102 } else { 103 $a[] = array( $ts * 1000, "$value" ); 95 $timeline = ( (get_class($set) == "Reconnoiter_ChangeSet") 96 || (get_class($set) == "Reconnoiter_CompositeSet") ) ? $set->points() : $this->series(); 97 if($timeline) { 98 foreach($timeline as $ts) { 99 $value = $set->data($ts); 100 if($value != "") { 101 $desc = $set->description($ts); 102 if($desc) { 103 $a[] = array( $ts * 1000, "$value", $desc ); 104 } else { 105 $a[] = array( $ts * 1000, "$value" ); 106 } 107 } 108 $i++; 104 109 } 105 } 106 $i++; 107 } 110 } 108 111 return $a; 109 112 }