From f0752c1fb4b44bd36c893c4acbcce5b52849d652 Mon Sep 17 00:00:00 2001 From: Frank Wuerthwein Date: Fri, 13 Feb 2009 01:46:20 +0000 Subject: Initial version --- src/lib/rrdFilter.js | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/lib/rrdFilter.js diff --git a/src/lib/rrdFilter.js b/src/lib/rrdFilter.js new file mode 100644 index 0000000..20c13e4 --- /dev/null +++ b/src/lib/rrdFilter.js @@ -0,0 +1,114 @@ +/* + * Filter classes for rrdFile + * + * Part of the javascriptRRD package + * Copyright (c) 2009 Frank Wuerthwein, fkw@ucsd.edu + * + * Original repository: http://javascriptrrd.sourceforge.net/ + * + * MIT License [http://www.opensource.org/licenses/mit-license.php] + * + */ + +/* + * All filter classes must implement the following interface: + * getMinStep() + * getLastUpdate() + * getNrRRAs() + * getRRAInfo(rra_idx) + * getFilterRRA(rra_idx) + * getName() + * + * Where getFilterRRA returns an object implementing the following interface: + * getIdx() + * getNrRows() + * getStep() + * getCFName() + * getEl(row_idx) + * getElFast(row_idx) + * + */ + + +// ================================================================ +// Filter out a single DS (identified either by idx or by name) + +function RRDRRAFilterDS(rrd_rra,ds_idx) { + this.rrd_rra=rrd_rra; + this.ds_idx=ds_idx; +} +RRDRRAFilterDS.prototype.getIdx = function() {return this.rrd_rra.getIdx();} +RRDRRAFilterDS.prototype.getNrRows = function() {return this.rrd_rra.getNrRows();} +RRDRRAFilterDS.prototype.getStep = function() {return this.rrd_rra.getStep();} +RRDRRAFilterDS.prototype.getCFName = function() {return this.rrd_rra.getCFName();} +RRDRRAFilterDS.prototype.getEl = function(row_idx) {return this.rrd_rra.getEl(row_idx,this.ds_idx);} +RRDRRAFilterDS.prototype.getElFast = function(row_idx) {return this.rrd_rra.getElFast(row_idx,this.ds_idx);} + +function RRDFilterDS(rrd_file,ds_id) { + this.rrd_file=rrd_file; + this.ds_info=rrd_file.getDS(ds_id); + this.ds_idx=this.ds_info.getIdx(); +} +RRDFilterDS.prototype.getName = function() {return this.ds_info.getName();} +RRDFilterDS.prototype.getMinSteps = function() {return this.rrd_file.getMinSteps();} +RRDFilterDS.prototype.getLastUpdate = function() {return this.rrd_file.getLastUpdate();} +RRDFilterDS.prototype.getNrRRAs = function() {return this.rrd_file.getNrRRAs();} +RRDFilterDS.prototype.getRRAInfo = function(idx) {return this.rrd_file.getRRAInfo(idx);} +RRDFilterDS.prototype.getFilterRRA = function(idx) {return new RRDRRAFilterDS(this.rrd_file.getRRA(idx),this.ds_idx);} + +// ================================================================ +// Filter out by using a user provided filter object +// The object must implement the following interface +// getName() - Symbolic name give to this function +// getDSName() - list of DSs used in computing the result (names or indexes) +// computeResult(val_list) - val_list contains the values of the requested DSs (in the same order) + +// Example class that implements the interface: +// function sumDS(ds1,ds2) { +// this.getName = function() {return ds1+"+"+ds2;} +// this.getDSNames = function() {return [ds1,ds2];} +// this.computeResult = function(val_list) {return val_list[0]+val_list[1];} +// } + + +function RRDRRAFilterOp(rrd_rra,op_obj,ds_idx_list) { + this.rrd_rra=rrd_rra; + this.op_obj=op_obj; + this.ds_idx_list=ds_idx_list; +} +RRDRRAFilterOp.prototype.getIdx = function() {return this.rrd_rra.getIdx();} +RRDRRAFilterOp.prototype.getNrRows = function() {return this.rrd_rra.getNrRows();} +RRDRRAFilterOp.prototype.getStep = function() {return this.rrd_rra.getStep();} +RRDRRAFilterOp.prototype.getCFName = function() {return this.rrd_rra.getCFName();} +RRDRRAFilterOp.prototype.getEl = function(row_idx) { + var val_list=[]; + for (var i=0; i