private double GetLast(string dsName, string rpnExpression) { RpnCalculator rpnCalculator = null; if(rpnExpression != null) { rpnCalculator = new RpnCalculator(rpnExpression); } double [] vals = GetValues(dsName); double val = vals[vals.Length - 1]; if(rpnCalculator != null) { rpnCalculator.Value = val; val = rpnCalculator.Calculate(); } return val; }
private double GetMin(string dsName, string rpnExpression) { RpnCalculator rpnCalculator = null; if(rpnExpression != null) { rpnCalculator = new RpnCalculator(rpnExpression); } double [] vals = GetValues(dsName); double min = Double.NaN; for(int i = 0; i < vals.Length - 1; i++) { double val = vals[i + 1]; if(rpnCalculator != null) { rpnCalculator.Value = val; val = rpnCalculator.Calculate(); } min = Util.Min(min, val); } return min; }
private double GetAverage(string dsName, string rpnExpression) { RpnCalculator rpnCalculator = null; if(rpnExpression != null) { rpnCalculator = new RpnCalculator(rpnExpression); } double [] vals = GetValues(dsName); double totalVal = 0; long totalSecs = 0; for(int i = 0; i < vals.Length - 1; i++) { long t1 = Math.Max(request.FetchStart, timestamps[i]); long t2 = Math.Min(request.FetchEnd, timestamps[i + 1]); double val = vals[i + 1]; if(rpnCalculator != null) { rpnCalculator.Value = val; val = rpnCalculator.Calculate(); } if(!Double.IsNaN(val)) { totalSecs += (t2 - t1); totalVal += (t2 - t1) * val; } } return totalSecs > 0? totalVal / totalSecs: Double.NaN; }