From ef38cf72af9af01101f2c10e19ab0085549e9cb7 Mon Sep 17 00:00:00 2001 From: Srix Date: Fri, 29 May 2015 16:15:36 +0530 Subject: fix to render chart even though one of the chart element is not available --- jarmon/jarmon.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/jarmon/jarmon.js b/jarmon/jarmon.js index e4fd1dc..e30a228 100644 --- a/jarmon/jarmon.js +++ b/jarmon/jarmon.js @@ -522,7 +522,19 @@ jarmon.RrdQueryRemote.prototype._callRemote = function(methodName, args) { this._download.always( function(res) { if(res instanceof Error) { - ret.reject(res); + //ret.reject(res); + result = { + data: [ + [args[0], 0], + [args[1], 0] + ], + lines: { + lineWidth: 0 + } + }; + ret.resolve(result); + return result; + } else { // Upon successful download convert the resulting binary // into an RRD file -- cgit v1.2.3 From d0fb153bc4ddcf0aa39074e028a5f9a10b355637 Mon Sep 17 00:00:00 2001 From: Srix Date: Fri, 29 May 2015 16:24:01 +0530 Subject: updated version to 11.10.1 --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 0835701..d66c517 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -Jarmon 10.7 +Jarmon 11.10.1 What is this? -- cgit v1.2.3 From 9f564fe0d5b60a5d6fe5287ca3b8f78849f47163 Mon Sep 17 00:00:00 2001 From: Srix Date: Mon, 29 Jun 2015 20:56:19 +0530 Subject: Need to upgrade javascriptrrdfile.js to latest 1.1.1 version to support rrd files generated by arm machines. Yes the rrd file generated by arm is not binary compatible with x86. However rebuilding the dependency.js kept failing because of version mismatch. so excluded the rrd file part and added it as separate JS. --- docs/examples/assets/js/dependencies.js | 17 -- docs/examples/assets/js/rrdFile-1.1.1.js | 443 +++++++++++++++++++++++++++++++ docs/examples/index.html | 2 + 3 files changed, 445 insertions(+), 17 deletions(-) create mode 100644 docs/examples/assets/js/rrdFile-1.1.1.js diff --git a/docs/examples/assets/js/dependencies.js b/docs/examples/assets/js/dependencies.js index dfefa39..9f3e0ae 100644 --- a/docs/examples/assets/js/dependencies.js +++ b/docs/examples/assets/js/dependencies.js @@ -4,7 +4,6 @@ // @code_url http://flot.googlecode.com/svn/trunk/jquery.flot.js // @code_url http://flot.googlecode.com/svn/trunk/jquery.flot.stack.js // @code_url http://flot.googlecode.com/svn/trunk/jquery.flot.selection.js -// @code_url http://javascriptrrd.cvs.sourceforge.net/viewvc/javascriptrrd/v0/src/lib/rrdFile.js // @code_url https://raw.github.com/jquerytools/jquerytools/dev/src/dateinput/dateinput.js // @code_url https://raw.github.com/jquerytools/jquerytools/dev/src/tabs/tabs.js // @code_url https://raw.github.com/jquerytools/jquerytools/dev/src/toolbox/toolbox.history.js @@ -305,22 +304,6 @@ void 0)document.ondrag=n;J=!1;K(d);ma()?R():(j.getPlaceholder().trigger("plotuns t.selection.mode=="y"?(D.x=0,l.x=j.width()):(z=C(d,"x"),D.x=z.axis.p2c(z.from),l.x=z.axis.p2c(z.to));t.selection.mode=="x"?(D.y=0,l.y=j.height()):(z=C(d,"y"),D.y=z.axis.p2c(z.from),l.y=z.axis.p2c(z.to));x=!0;j.triggerRedrawOverlay();!n&&ma()&&R()};j.getSelection=L;j.hooks.bindEvents.push(function(d,j){d.getOptions().selection.mode!=null&&(j.mousemove(y),j.mousedown(V))});j.hooks.drawOverlay.push(function(j,n){if(x&&ma()){var z=j.getPlotOffset(),t=j.getOptions();n.save();n.translate(z.left,z.top); z=d.color.parse(t.selection.color);n.strokeStyle=z.scale("a",0.8).toString();n.lineWidth=1;n.lineJoin="round";n.fillStyle=z.scale("a",0.4).toString();var z=Math.min(D.x,l.x),t=Math.min(D.y,l.y),C=Math.abs(l.x-D.x),y=Math.abs(l.y-D.y);n.fillRect(z,t,C,y);n.strokeRect(z,t,C,y);n.restore()}});j.hooks.shutdown.push(function(j,l){l.unbind("mousemove",y);l.unbind("mousedown",V);S&&d(document).unbind("mouseup",S)})},options:{selection:{mode:null,color:"#e8cfac"}},name:"selection",version:"1.1"})})(jQuery); // Input 5 -function InvalidRRD(d){this.message=d;this.name="Invalid RRD"}InvalidRRD.prototype.toString=function(){return this.name+': "'+this.message+'"'};function RRDDS(d,j,E){this.rrd_data=d;this.rrd_data_idx=j;this.my_idx=E}RRDDS.prototype.getIdx=function(){return this.my_idx};RRDDS.prototype.getName=function(){return this.rrd_data.getCStringAt(this.rrd_data_idx,20)};RRDDS.prototype.getType=function(){return this.rrd_data.getCStringAt(this.rrd_data_idx+20,20)}; -RRDDS.prototype.getMin=function(){return this.rrd_data.getDoubleAt(this.rrd_data_idx+48)};RRDDS.prototype.getMax=function(){return this.rrd_data.getDoubleAt(this.rrd_data_idx+56)};function RRDRRAInfo(d,j,E,n,J,D){this.rrd_data=d;this.rra_def_idx=j;this.rrd_align=E;this.row_cnt=n;this.pdp_step=J;this.my_idx=D}RRDRRAInfo.prototype.getIdx=function(){return this.my_idx};RRDRRAInfo.prototype.getNrRows=function(){return this.row_cnt}; -RRDRRAInfo.prototype.getPdpPerRow=function(){return this.rrd_align==32?this.rrd_data.getLongAt(this.rra_def_idx+24,20):this.rrd_data.getLongAt(this.rra_def_idx+32,20)};RRDRRAInfo.prototype.getStep=function(){return this.pdp_step*this.getPdpPerRow()};RRDRRAInfo.prototype.getCFName=function(){return this.rrd_data.getCStringAt(this.rra_def_idx,20)}; -function RRDRRA(d,j,E,n,J,D){this.rrd_data=d;this.rra_info=E;this.row_cnt=E.row_cnt;this.ds_cnt=D;var l=D*8;this.base_rrd_db_idx=n+J*l;this.cur_row=d.getLongAt(j);this.calc_idx=function(d,j){if(d>=0&&d=0&&j=this.row_cnt&&(n-=this.row_cnt);return l*n+j*8}else throw RangeError("DS idx ("+d+") out of range [0-"+D+").");else throw RangeError("Row idx ("+d+") out of range [0-"+this.row_cnt+").");}}RRDRRA.prototype.getIdx=function(){return this.rra_info.getIdx()}; -RRDRRA.prototype.getNrRows=function(){return this.row_cnt};RRDRRA.prototype.getNrDSs=function(){return this.ds_cnt};RRDRRA.prototype.getStep=function(){return this.rra_info.getStep()};RRDRRA.prototype.getCFName=function(){return this.rra_info.getCFName()};RRDRRA.prototype.getEl=function(d,j){return this.rrd_data.getDoubleAt(this.base_rrd_db_idx+this.calc_idx(d,j))};RRDRRA.prototype.getElFast=function(d,j){return this.rrd_data.getFastDoubleAt(this.base_rrd_db_idx+this.calc_idx(d,j))}; -function RRDHeader(d){this.rrd_data=d;this.validate_rrd();this.load_header();this.calc_idxs()} -RRDHeader.prototype.validate_rrd=function(){if(this.rrd_data.getCStringAt(0,4)!=="RRD")throw new InvalidRRD("Wrong magic id.");this.rrd_version=this.rrd_data.getCStringAt(4,5);if(this.rrd_version!=="0003"&&this.rrd_version!=="0004")throw new InvalidRRD("Unsupported RRD version "+this.rrd_version+".");if(this.rrd_data.getDoubleAt(12)==8.642135E130)this.rrd_align=32;else if(this.rrd_data.getDoubleAt(16)==8.642135E130)this.rrd_align=64;else throw new InvalidRRD("Unsupported platform.");}; -RRDHeader.prototype.load_header=function(){this.rrd_align==32?(this.ds_cnt=this.rrd_data.getLongAt(20,!1),this.rra_cnt=this.rrd_data.getLongAt(24,!1),this.pdp_step=this.rrd_data.getLongAt(28,!1),this.top_header_size=112):(this.ds_cnt=this.rrd_data.getLongAt(24,!1),this.rra_cnt=this.rrd_data.getLongAt(32,!1),this.pdp_step=this.rrd_data.getLongAt(40,!1),this.top_header_size=128)}; -RRDHeader.prototype.calc_idxs=function(){this.ds_def_idx=this.top_header_size;this.ds_el_size=120;this.rra_def_idx=this.ds_def_idx+this.ds_el_size*this.ds_cnt;this.rrd_align==32?(this.rra_def_el_size=108,this.row_cnt_idx=20):(this.rra_def_el_size=120,this.row_cnt_idx=24);this.live_head_idx=this.rra_def_idx+this.rra_def_el_size*this.rra_cnt;this.live_head_size=this.rrd_align==32?8:16;this.pdp_prep_idx=this.live_head_idx+this.live_head_size;this.pdp_prep_el_size=112;this.cdp_prep_idx=this.pdp_prep_idx+ -this.pdp_prep_el_size*this.ds_cnt;this.cdp_prep_el_size=80;this.rra_ptr_idx=this.cdp_prep_idx+this.cdp_prep_el_size*this.ds_cnt*this.rra_cnt;this.rra_ptr_el_size=this.rrd_align==32?4:8;this.header_size=this.rra_ptr_idx+this.rra_ptr_el_size*this.rra_cnt}; -RRDHeader.prototype.load_row_cnts=function(){this.rra_def_row_cnts=[];this.rra_def_row_cnt_sums=[];for(var d=0;d=0&&d=0&&d=0) && (row_idx=0) && (ds_idx=this.row_cnt) real_row_idx-=this.row_cnt; + return row_size*real_row_idx+ds_idx*8; + } else { + throw RangeError("DS idx ("+ row_idx +") out of range [0-" + ds_cnt +")."); + } + } else { + throw RangeError("Row idx ("+ row_idx +") out of range [0-" + this.row_cnt +")."); + } + } +} + +RRDRRA.prototype.getIdx = function() { + return this.rra_info.getIdx(); +} + +// Get number of rows/columns +RRDRRA.prototype.getNrRows = function() { + return this.row_cnt; +} +RRDRRA.prototype.getNrDSs = function() { + return this.ds_cnt; +} + +// Get RRA step (expressed in seconds) +RRDRRA.prototype.getStep = function() { + return this.rra_info.getStep(); +} + +// Get consolidation function name +RRDRRA.prototype.getCFName = function() { + return this.rra_info.getCFName(); +} + +RRDRRA.prototype.getEl = function(row_idx,ds_idx) { + return this.rrd_data.getDoubleAt(this.base_rrd_db_idx+this.calc_idx(row_idx,ds_idx)); +} + +// Low precision version of getEl +// Uses getFastDoubleAt +RRDRRA.prototype.getElFast = function(row_idx,ds_idx) { + return this.rrd_data.getFastDoubleAt(this.base_rrd_db_idx+this.calc_idx(row_idx,ds_idx)); +} + +// ============================================================ +// RRD Header handling class +function RRDHeader(rrd_data) { + this.rrd_data=rrd_data; + this.validate_rrd(); + this.calc_idxs(); +} + +// Internal, used for initialization +RRDHeader.prototype.validate_rrd = function() { + if (this.rrd_data.getLength()<1) throw new InvalidRRD("Empty file."); + if (this.rrd_data.getLength()<16) throw new InvalidRRD("File too short."); + if (this.rrd_data.getCStringAt(0,4)!=="RRD") throw new InvalidRRD("Wrong magic id."); + + this.rrd_version=this.rrd_data.getCStringAt(4,5); + if ((this.rrd_version!=="0003")&&(this.rrd_version!=="0004")&&(this.rrd_version!=="0001")) { + throw new InvalidRRD("Unsupported RRD version "+this.rrd_version+"."); + } + + this.float_width=8; + if (this.rrd_data.getLongAt(12)==0) { + // not a double here... likely 64 bit + this.float_align=8; + if (! (this.rrd_data.getDoubleAt(16)==8.642135e+130)) { + // uhm... wrong endian? + this.rrd_data.switch_endian=true; + } + if (this.rrd_data.getDoubleAt(16)==8.642135e+130) { + // now, is it all 64bit or only float 64 bit? + if (this.rrd_data.getLongAt(28)==0) { + // true 64 bit align + this.int_align=8; + this.int_width=8; + } else { + // integers are 32bit aligned + this.int_align=4; + this.int_width=4; + } + } else { + throw new InvalidRRD("Magic float not found at 16."); + } + } else { + /// should be 32 bit alignment + if (! (this.rrd_data.getDoubleAt(12)==8.642135e+130)) { + // uhm... wrong endian? + this.rrd_data.switch_endian=true; + } + if (this.rrd_data.getDoubleAt(12)==8.642135e+130) { + this.float_align=4; + this.int_align=4; + this.int_width=4; + } else { + throw new InvalidRRD("Magic float not found at 12."); + } + } + this.unival_width=this.float_width; + this.unival_align=this.float_align; + + // process the header here, since I need it for validation + + // char magic[4], char version[5], double magic_float + + // long ds_cnt, long rra_cnt, long pdp_step, unival par[10] + this.ds_cnt_idx=Math.ceil((4+5)/this.float_align)*this.float_align+this.float_width; + this.rra_cnt_idx=this.ds_cnt_idx+this.int_width; + this.pdp_step_idx=this.rra_cnt_idx+this.int_width; + + //always get only the low 32 bits, the high 32 on 64 bit archs should always be 0 + this.ds_cnt=this.rrd_data.getLongAt(this.ds_cnt_idx); + if (this.ds_cnt<1) { + throw new InvalidRRD("ds count less than 1."); + } + + this.rra_cnt=this.rrd_data.getLongAt(this.rra_cnt_idx); + if (this.ds_cnt<1) { + throw new InvalidRRD("rra count less than 1."); + } + + this.pdp_step=this.rrd_data.getLongAt(this.pdp_step_idx); + if (this.pdp_step<1) { + throw new InvalidRRD("pdp step less than 1."); + } + + // best guess, assuming no weird align problems + this.top_header_size=Math.ceil((this.pdp_step_idx+this.int_width)/this.unival_align)*this.unival_align+10*this.unival_width; + var t=this.rrd_data.getLongAt(this.top_header_size); + if (t==0) { + throw new InvalidRRD("Could not find first DS name."); + } +} + +// Internal, used for initialization +RRDHeader.prototype.calc_idxs = function() { + this.ds_def_idx=this.top_header_size; + // char ds_nam[20], char dst[20], unival par[10] + this.ds_el_size=Math.ceil((20+20)/this.unival_align)*this.unival_align+10*this.unival_width; + + this.rra_def_idx=this.ds_def_idx+this.ds_el_size*this.ds_cnt; + // char cf_nam[20], uint row_cnt, uint pdp_cnt, unival par[10] + this.row_cnt_idx=Math.ceil(20/this.int_align)*this.int_align; + this.rra_def_el_size=Math.ceil((this.row_cnt_idx+2*this.int_width)/this.unival_align)*this.unival_align+10*this.unival_width; + + this.live_head_idx=this.rra_def_idx+this.rra_def_el_size*this.rra_cnt; + // time_t last_up, int last_up_usec + this.live_head_size=2*this.int_width; + + this.pdp_prep_idx=this.live_head_idx+this.live_head_size; + // char last_ds[30], unival scratch[10] + this.pdp_prep_el_size=Math.ceil(30/this.unival_align)*this.unival_align+10*this.unival_width; + + this.cdp_prep_idx=this.pdp_prep_idx+this.pdp_prep_el_size*this.ds_cnt; + // unival scratch[10] + this.cdp_prep_el_size=10*this.unival_width; + + this.rra_ptr_idx=this.cdp_prep_idx+this.cdp_prep_el_size*this.ds_cnt*this.rra_cnt; + // uint cur_row + this.rra_ptr_el_size=1*this.int_width; + + this.header_size=this.rra_ptr_idx+this.rra_ptr_el_size*this.rra_cnt; +} + +// Optional initialization +// Read and calculate row counts +RRDHeader.prototype.load_row_cnts = function() { + this.rra_def_row_cnts=[]; + this.rra_def_row_cnt_sums=[]; // how many rows before me + for (var i=0; i=0) && (idx=0) && (idx + +