From ac62b3050708a77809fe77bafac6881485859dc6 Mon Sep 17 00:00:00 2001 From: Richard Wall <richard@aziz> Date: Sat, 10 Apr 2010 01:19:07 +0100 Subject: Separate the querying of RRD date range from the loading of remote RRD file --- index.html | 80 +++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 43 insertions(+), 37 deletions(-) (limited to 'index.html') diff --git a/index.html b/index.html index 66baba2..2565f6d 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ <head> <title>untitled</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> - <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script> + <script type="text/javascript" src="assets/javascript/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="assets/javascript/flot/excanvas.min.js"></script> <script type="text/javascript" src="assets/javascript/flot/jquery.flot.min.js"></script> <script type="text/javascript" src="assets/javascript/flot/jquery.flot.selection.min.js"></script> @@ -13,7 +13,6 @@ <script type="text/javascript" src="assets/javascript/MochiKit/Base.js"></script> <script type="text/javascript" src="assets/javascript/MochiKit/Async.js"></script> <script type="text/javascript"> - var grrd; function downloadBinary(url) { var d = new MochiKit.Async.Deferred(); @@ -50,49 +49,23 @@ return d; } - var RrdDataWrapper = function(url) { - this.url = url; - this._rrd = null; + var RrdQuery = function(rrd) { + this.rrd = rrd; } - RrdDataWrapper.prototype = { + RrdQuery.prototype = { getData: function(startTime, endTime) { - var endTimestamp = endTime.getTime()/1000; - - var d, self = this; - if(!this._rrd || this._rrd.getLastUpdate() < endTimestamp) { - d = downloadBinary(this.url) - .addCallback( - function(binary) { - var rrd = new RRDFile(binary); - self._rrd = rrd; - return rrd; - }); - } else { - d = new MochiKit.Async.Deferred() - d.callback(this._rrd); - } - - d.addCallback( - function(rrd) { - return self._getData(startTime, endTime); - }); - - return d; - }, - - _getData: function(startTime, endTime) { var startTimestamp = startTime.getTime()/1000; var endTimestamp = endTime.getTime()/1000; var consolidationFunc = 'AVERAGE'; - var lastUpdated = this._rrd.getLastUpdate(); + var lastUpdated = this.rrd.getLastUpdate(); var bestRRA = null; - for(var i=0; i<this._rrd.getNrRRAs(); i++) { + for(var i=0; i<this.rrd.getNrRRAs(); i++) { // Look through all RRAs looking for the most suitable // data resolution. - var rra = this._rrd.getRRA(i); + var rra = this.rrd.getRRA(i); if(rra.getCFName() != consolidationFunc) { continue; @@ -113,7 +86,7 @@ startRow = rraRowCount - parseInt((lastUpdated - startTimestamp)/step); endRow = rraRowCount - parseInt((lastUpdated - endTimestamp)/step); returnData = []; - for(var d=this._rrd.getNrDSs()-1; d>=0; d--) { + for(var d=this.rrd.getNrDSs()-1; d>=0; d--) { flotData = []; timestamp = firstUpdated + (startRow - 1) * step; for (var i=startRow; i<=endRow; i++) { @@ -121,12 +94,45 @@ flotData.push([timestamp*1000.0, val]); timestamp += step; } - returnData.push({label: this._rrd.getDS(d).getName(), data: flotData}); + returnData.push({label: this.rrd.getDS(d).getName(), data: flotData}); } return returnData; } }; + + var RrdQueryRemote = function(url) { + this.url = url; + this.rrd = null; + } + + RrdQueryRemote.prototype = { + getData: function(startTime, endTime) { + var endTimestamp = endTime.getTime()/1000; + + var d, self = this; + if(!this.rrd || this.rrd.getLastUpdate() < endTimestamp) { + d = downloadBinary(this.url) + .addCallback( + function(binary) { + var rrd = new RRDFile(binary); + self.rrd = rrd; + return rrd; + }); + } else { + d = new MochiKit.Async.Deferred() + d.callback(this.rrd); + } + + d.addCallback( + function(rrd) { + return new RrdQuery(rrd).getData(startTime, endTime); + }); + + return d; + } + }; + var graphOptions = { grid: { clickable: true @@ -161,7 +167,7 @@ }); } - var db = new RrdDataWrapper('data/localhost/load/load.rrd'); + var db = new RrdQueryRemote('data/localhost/load/load.rrd'); $(function() { drawChart(db, new Date('7 April 2010 09:30:00'), -- cgit v1.2.3-2-g168b