Example #1
0
	phantomas.on('report', function() {
		var domainsStats = [],
			Stats = require('fast-stats').Stats,
			domainsRequests = new Stats();

		// TODO: implement phantomas.collection
		Object.keys(domains).forEach(function(domain) {
			var cnt = domains[domain].requests.length;

			domainsStats.push({
				name: domain,
				cnt: cnt
			});

			domainsRequests.push(cnt);
		});

		domainsStats.sort(function(a, b) {
			return (a.cnt > b.cnt) ? -1 : 1;
		});

		if (domainsStats.length > 0) {
			phantomas.setMetric('domains', domainsStats.length);
			phantomas.setMetric('maxRequestsPerDomain', domainsRequests.range()[1]);
			phantomas.setMetric('medianRequestsPerDomain', domainsRequests.median());
		}

		domainsStats.forEach(function(domain) {
			phantomas.addOffender('domains', domain.name + ': ' + domain.cnt + ' request(s)');
		});
	});
Example #2
0
        db.rivers.find({}, function(e, rivers) {
            var statsSinuosity = new Stats(),
                statsRealLength = new Stats();

            for (var i=0; i<rivers.length; i++) {
                rivers[i] = new River(rivers[i]);

                statsSinuosity.push(rivers[i].sinuosity);
                statsRealLength.push(rivers[i].realLength);
            }

            riverUpdateErrors = req.session.riverUpdateErrors;
            riverUpdateData   = req.session.riverUpdateData;

            req.session.riverUpdateErrors = null;
            req.session.riverUpdateData   = null;

            res.render('river/show.jade', {
                river: river,
                riverUpdateErrors: riverUpdateErrors,
                riverUpdateData: riverUpdateData,
                statsSinuosity: statsSinuosity,
                statsRealLength: statsRealLength
            });
        });
Example #3
0
var nextSecond = function() {
    // First process the telemetry for the current second
    var currentSecond = requestsPerSecond[requestsPerSecond.length - 1];
    if (currentSecond) {
        var avgLatency = new Stats();
        for (var f in currentSecond.feed) {
            var feedObject = {};
            // Calculate total per feed
            feedObject.total = currentSecond.feed[f].length;
            // Calculate average latency per feed, as well as 10th and 95th percentile
            var s = new Stats();
            for (var j = 0; j < currentSecond.feed[f].length; j++) {
                s.push(currentSecond.feed[f][j]);
                avgLatency.push(currentSecond.feed[f][j]);
            }
            feedObject.avg = s.amean();
            feedObject.avg10 = s.percentile(10);
            feedObject.avg95 = s.percentile(95);
            // Replace the full telemetry
            currentSecond.feed[f] = feedObject;
        }
        currentSecond.avg = avgLatency.amean();
        currentSecond.avg10 = avgLatency.percentile(10);
        currentSecond.avg95 = avgLatency.percentile(95);
    }
    
    // Prepare the next second
    requestsPerSecond.push({
        'total': 0,
        'feed': {}
    });
};
Example #4
0
	phantomas.on('report', function() {
		var entries = Object.keys(stack).length;

		if (entries === 0) {
			phantomas.log('requestsStats: no requests data gathered!');
			return;
		}

		// set metrics and provide offenders with URLs
		[
			'smallestResponse',
			'biggestResponse',
			'fastestResponse',
			'slowestResponse',
			'smallestLatency',
			'biggestLatency'
		].forEach(function(metric) {
			var entry = getFromStack(metric),
				details = '';

			switch (metric) {
				case 'smallestResponse':
				case 'biggestResponse':
					phantomas.setMetric(metric, entry.bodySize);
					details = (entry.bodySize/1024).toFixed(2) + ' kB';
					break;

				case 'fastestResponse':
				case 'slowestResponse':
					phantomas.setMetric(metric, entry.timeToLastByte);
					details = entry.timeToLastByte + ' ms';
					break;

				case 'smallestLatency':
				case 'biggestLatency':
					phantomas.setMetric(metric, entry.timeToFirstByte);
					details = entry.timeToFirstByte + ' ms';
					break;
			}

			phantomas.addOffender(metric, entry.url + ' (' + details + ')');
		});

		phantomas.setMetric('medianResponse', responseTimes.median());
		phantomas.setMetric('medianLatency', latencyTimes.median());
	});
Example #5
0
  end() {
    this.totalDuration = process.hrtime(this.startHrTime);

    // Feed the stats object
    this.stats.push(this.timings.map(function(x) {
      return (x[0] * 1e9 + x[1]) / (1000);
    }));
  }
		// calculate stats for each metric
		function getMetricStats(metricName) {
			var i,
				res = [],
				values = new Stats();

			for (i=0; i<runs; i++) {
				values.push(results[i].getMetric(metricName));
			}

			res.push(metricName);

			// apply stats functions
			Object.keys(fields).forEach(function(fnName) {
				res.push(fields[fnName](values));
			});

			return res;
		}
Example #7
0
		Object.keys(domains).forEach(function(domain) {
			var cnt = domains[domain].requests.length;

			domainsStats.push({
				name: domain,
				cnt: cnt
			});

			domainsRequests.push(cnt);
		});
Example #8
0
function benchmark(error, micros) {
  if (error) {
    console.error("got error while benchmarking: %s", error.message);
    badRequests++;
  }
  else {
    timings.push(micros);
  }

  return micros;
}
Example #9
0
	phantomas.on('recv', function(entry, res) {
		// ignore anything different than HTTP 200
		if (entry.status !== 200) {
			return;
		}

		// size
		pushToStack('smallestResponse', entry, function(stack, entry) {
			return stack.bodySize > entry.bodySize;
		});

		pushToStack('biggestResponse', entry, function(stack, entry) {
			return stack.bodySize < entry.bodySize;
		});

		// time (from sent to last byte)
		pushToStack('fastestResponse', entry, function(stack, entry) {
			return stack.timeToLastByte > entry.timeToLastByte;
		});

		pushToStack('slowestResponse', entry, function(stack, entry) {
			return stack.timeToLastByte < entry.timeToLastByte;
		});

		// latency
		pushToStack('smallestLatency', entry, function(stack, entry) {
			return stack.timeToFirstByte > entry.timeToFirstByte;
		});

		pushToStack('biggestLatency', entry, function(stack, entry) {
			return stack.timeToFirstByte < entry.timeToFirstByte;
		});

		// stats
		responseTimes.push(entry.timeToLastByte);
		latencyTimes.push(entry.timeToFirstByte);
	});
  /**
   * Precompute indicator fields using time series OHLCV data.
   * <br><br>
   * This is invoked before draw().
   * @param {timeseries.TimeSeriesData} data
   */
  precompute(data) {
    var data_arr = data.getRawData();
    var field_map = data.getFieldMap();
    var input_field = field_map[this.input];
    var upper_band_field = this.upperBandOutput;
    var mid_field = this.midOutput;
    var lower_band_field = this.lowerBandOutput;
    var period = this.period;

    var mean = new Stats();
    var sd = new Stats();

    for(var i = 0; i < data_arr.length; i++)
    {
      var dat = data_arr[i];

      mean.push(dat[input_field]);
      sd.push(dat[input_field]);

      if(sd.length === period)
      {
        var ma = mean.amean();
        var std_dev = sd.stddev();
        dat[upper_band_field] = ma + 2 * std_dev;
        dat[mid_field] = ma;
        dat[lower_band_field] = ma - 2 * std_dev;
        if(isNaN(dat[upper_band_field]))
        {
          dat[upper_band_field] = 0.0;
        }
        if(isNaN(dat[lower_band_field]))
        {
          dat[lower_band_field] = 0.0;
        }
        sd.shift();
        mean.shift();
      }
    }

  }
Example #11
0
    db.rivers.find({}).sort({ realLength: -1 }).exec(function(e, rivers) {
        lengthVsSinuosityChartData = [{
            key: 'Rivers',
            values: [],
            slope: 0,
            intercept: Math.PI
        }];

        distributionChartData = {}
        for (var b=0.0; b<9.6; b+=0.1) {
            distributionChartData[b.toFixed(1)] = 0;
        }

        averagedData = {};

        var statsSinuosity = new Stats(),
            statsRealLength = new Stats(),
            statsCrowLength = new Stats();

        for (var i=0; i<rivers.length; i++) {
            rivers[i] = new River(rivers[i]);

            statsSinuosity.push(rivers[i].sinuosity);
            statsRealLength.push(rivers[i].realLength);
            statsCrowLength.push(rivers[i].crowLength);

            lengthVsSinuosityChartData[0].values.push({
                x: rivers[i].realLength,
                y: rivers[i].sinuosity
            });

            distributionChartData[rivers[i].sinuosity.toFixed(1)]++;
        }

        distributionChartDataValues = [];
        for (var key in distributionChartData) {
            distributionChartDataValues.push({
                label: key,
                value: distributionChartData[key]
            });
        }

        distributionChartData = [{
            key: 'Rivers',
            values: distributionChartDataValues
        }];

        riverCreateErrors = req.session.riverCreateErrors;
        riverCreateData   = req.session.riverCreateData;

        req.session.riverCreateErrors = null;
        req.session.riverCreateData   = null;

        res.render('index.jade', {
            rivers: rivers,
            riverCreateErrors: riverCreateErrors,
            riverCreateData: riverCreateData,
            statsSinuosity: statsSinuosity,
            statsRealLength: statsRealLength,
            statsCrowLength: statsCrowLength,
            lengthVsSinuosityChartData: JSON.stringify(lengthVsSinuosityChartData),
            distributionChartData: JSON.stringify(distributionChartData)
        });
    });
Example #12
0
var assert = require('assert');

var Stats = require('fast-stats').Stats;
Array = require('gauss').Vector;

var a = [], b = new Stats();

for(var i=0; i<100001; i++) {
	var n = Math.round(Math.random()*10000);

	a.push(n);
	b.push(n);
}

var amn, bmn;

console.time("gauss-mean");
amn = a.mean();
console.timeEnd("gauss-mean");
console.time("fast-mean");
bmn = b.amean();
console.timeEnd("fast-mean");
assert.equal(amn.toFixed(2), bmn.toFixed(2));

console.time("gauss-median");
amn = a.median();
console.timeEnd("gauss-median");
console.time("fast-median");
bmn = b.median();
console.timeEnd("fast-median");
assert.equal(amn.toFixed(2), bmn.toFixed(2));
Example #13
0
 gstdDev() {
   return this.stats.gstddev();
 }
Example #14
0
 stdDev() {
   return this.stats.σ();
 }
Example #15
0
 median() {
   return this.stats.median();
 }
Example #16
0
 amean() {
   return this.stats.amean();
 }
Example #17
0
 percentile(v) {
   return this.stats.percentile(v);
 }
Example #18
0
 push(entries) {
   this.stats.push(entries);
 }
Example #19
0
 moe() {
   return this.stats.moe();
 }
Example #20
0
exports.module = function(phantomas) {
	var stack = {};

	// adds given entry under the "type" if given check function returns true
	function pushToStack(type, entry, check) {
		// no entry of given type
		if (typeof stack[type] === 'undefined') {
			stack[type] = entry;
		}
		// apply check function
		else if (check(stack[type], entry) === true) {
			stack[type] = entry;
		}
	}

	function getFromStack(type) {
		return stack[type];
	}

	var Stats = require('fast-stats').Stats,
		responseTimes = new Stats(),
		latencyTimes = new Stats();

	phantomas.on('recv', function(entry, res) {
		// ignore anything different than HTTP 200
		if (entry.status !== 200) {
			return;
		}

		// size
		pushToStack('smallestResponse', entry, function(stack, entry) {
			return stack.bodySize > entry.bodySize;
		});

		pushToStack('biggestResponse', entry, function(stack, entry) {
			return stack.bodySize < entry.bodySize;
		});

		// time (from sent to last byte)
		pushToStack('fastestResponse', entry, function(stack, entry) {
			return stack.timeToLastByte > entry.timeToLastByte;
		});

		pushToStack('slowestResponse', entry, function(stack, entry) {
			return stack.timeToLastByte < entry.timeToLastByte;
		});

		// latency
		pushToStack('smallestLatency', entry, function(stack, entry) {
			return stack.timeToFirstByte > entry.timeToFirstByte;
		});

		pushToStack('biggestLatency', entry, function(stack, entry) {
			return stack.timeToFirstByte < entry.timeToFirstByte;
		});

		// stats
		responseTimes.push(entry.timeToLastByte);
		latencyTimes.push(entry.timeToFirstByte);
	});

	phantomas.on('report', function() {
		var entries = Object.keys(stack).length;

		if (entries === 0) {
			phantomas.log('requestsStats: no requests data gathered!');
			return;
		}

		// set metrics and provide offenders with URLs
		[
			'smallestResponse',
			'biggestResponse',
			'fastestResponse',
			'slowestResponse',
			'smallestLatency',
			'biggestLatency'
		].forEach(function(metric) {
			var entry = getFromStack(metric),
				details = '';

			switch (metric) {
				case 'smallestResponse':
				case 'biggestResponse':
					phantomas.setMetric(metric, entry.bodySize);
					details = (entry.bodySize/1024).toFixed(2) + ' kB';
					break;

				case 'fastestResponse':
				case 'slowestResponse':
					phantomas.setMetric(metric, entry.timeToLastByte);
					details = entry.timeToLastByte + ' ms';
					break;

				case 'smallestLatency':
				case 'biggestLatency':
					phantomas.setMetric(metric, entry.timeToFirstByte);
					details = entry.timeToFirstByte + ' ms';
					break;
			}

			phantomas.addOffender(metric, entry.url + ' (' + details + ')');
		});

		phantomas.setMetric('medianResponse', responseTimes.median());
		phantomas.setMetric('medianLatency', latencyTimes.median());
	});
};
Example #21
0
 range() {
   return this.stats.range();
 }
Example #22
0
				label.diff =diff/3600000;
				
				labelsArr.push(label);
			}
		}
		
		issuesArr.push({
			"number": issue,
			"labels": labelsArr
		});
		
//		console.log(labelled);
//		console.log(closed);
	}
	
	var s = new Stats();
	var mean, stddev ;
	
	for(var k = 0; k < issuesArr.length; k++) {
		var labelsArr = issuesArr[k].labels;
		for(var j = 0; j < labelsArr.length; j++) {
			s.push(labelsArr[j].diff);
		}
	}
	mean = s.amean();
	stddev = s.stddev();
	
	console.log("Mean: %d Standard Deviation: %d", s.amean().toFixed(2), s.stddev().toFixed(2));
	
	for(var k = 0; k < issuesArr.length; k++) {
		var labelsArr = issuesArr[k].labels;