L.each(this._customStats, function(ns, name) { result.customStats[name] = { min: round(L.min(ns), 1), max: round(L.max(ns), 1), median: round(sl.median(ns), 1), p95: round(sl.percentile(ns, 0.95), 1), p99: round(sl.percentile(ns, 0.99), 1) }; });
function load() { batches-- if (batches <= 0) { console.log("max: %s", Math.max.apply(null, runs)) console.log("avg: %s", stats.mean(runs)) console.log("std dev: %s", stats.stdev(runs)) console.log("25th percentile: %s", stats.percentile(runs, 0.25)) console.log("median: %s", stats.median(runs)) console.log("75th percentile: %s", stats.percentile(runs, 0.75)) return } putBatch(load) }
Stats.prototype.report = function () { var result = {}; result.timestamp = new Date().toISOString(); result.scenariosCreated = this._generatedScenarios; result.scenariosCompleted = this._completedScenarios; result.requestsCompleted = this._completedRequests; var latencies = L.map(this._entries, function (e) { return e[2]; }); result.latency = { min: round(L.min(latencies) / 1e6, 1), max: round(L.max(latencies) / 1e6, 1), median: round(sl.median(latencies) / 1e6, 1), p95: round(sl.percentile(latencies, 0.95) / 1e6, 1), p99: round(sl.percentile(latencies, 0.99) / 1e6, 1) }; var startedAt = L.min(this._requestTimestamps); var now = Date.now(); var count = L.size(this._requestTimestamps); var mean = Math.round(count / (Math.round((now - startedAt) / 10) / 100) * 100) / 100; result.rps = { count: count, mean: mean }; result.scenarioDuration = { min: round(L.min(this._scenarioLatencies) / 1e6, 1), max: round(L.max(this._scenarioLatencies) / 1e6, 1), median: round(sl.median(this._scenarioLatencies) / 1e6, 1), p95: round(sl.percentile(this._scenarioLatencies, 0.95) / 1e6, 1), p99: round(sl.percentile(this._scenarioLatencies, 0.99) / 1e6, 1) }; result.errors = this._errors; result.codes = this._codes; result.matches = this._matches; result.latencies = this.getEntries(); return result; };
function printReport(reports) { var latencies = L.map(L.flatten(reports), function(rec) { return rec[2]; }); var min = round(L.min(latencies) / 1e6, 1); var max = round(L.max(latencies) / 1e6, 1); var median = round(sl.median(latencies) / 1e6, 1); var p95 = round(sl.percentile(latencies, 0.95) / 1e6, 1); var p99 = round(sl.percentile(latencies, 0.99) / 1e6, 1); console.log('Response times so far:'); console.log(' min: %s', min); console.log(' max: %s', max); console.log(' p50: %s', median); console.log(' p95: %s', p95); console.log(' p99: %s', p99); }
Metrix.prototype.getStatistics = function (callback /* error, result*/) { var ms = new Date().getTime(); var bucket = getBucket(ms) -1 ; // Do not want to use the current bucket as it is not complete var index = this.ts.length-1; if (index<0) // no data { this.statistics = {bucket: bucket, statistics: {total: 0, error:0, errorRate:0, totalCircuitOpen: 0, totalTimeout:0, mean:0, stddev:0, percentile: {"0":0, "25":0,"50":0,"75":0,"90":0,"95":0,"99":0 ,"99.5":0,"100":0}}}; callback(null, this.statistics); return; } if (this.statistics && this.statistics.bucket == bucket ) // the last calculated one is the current one { callback(null, this.statistics); return; } // Now need to calculate new value var totalList = []; var totalError = 0; var totalCircuitOpen =0; var totalTimeout = 0; for (var i = index; i>=0 && this.ts[i]>bucket-bucketLength; i--) { totalList = totalList.concat(this.data[i]); totalError += this.error[i]; totalCircuitOpen += this.circuitOpen[i]; totalTimeout += this.timeout[i]; } if (totalList.length==0) // no data { this.statistics = {bucket: bucket, statistics: {total: 0, error:0, errorRate:0, totalCircuitOpen: 0, totalTimeout:0, mean:0, stddev:0, percentile: {"0":0, "25":0,"50":0,"75":0,"90":0,"95":0,"99":0 ,"99.5":0,"100":0}}}; callback(null, this.statistics); return; } var errorRate = totalError / totalList.length; this.statistics = {"bucket": bucket, "statistics": {"total": totalList.length, "error": totalError, "errorRate": errorRate, "totalCircuitOpen": totalCircuitOpen, "totalTimeout":totalTimeout, "mean": stats.mean(totalList), "stddev": stats.stdev(totalList), percentile:{"0":stats.percentile(totalList, 0), "25":stats.percentile(totalList, 0.25),"50":stats.percentile(totalList, 0.5), "75":stats.percentile(totalList, 0.75),"90":stats.percentile(totalList, 0.9),"95":stats.percentile(totalList, 0.95), "99":stats.percentile(totalList, 0.99) || 0,"99.5":stats.percentile(totalList, 0.995) ||0,"100":stats.percentile(totalList, 1) ||0}}} //console.log("calculate",this.statistics); callback(null, this.statistics); };
.forEach(function(key) { var values = results[key]; var percentile = stats.percentile(values, 0.95); metrics.push({ Metric: key, Mean: stats.mean(values).toFixed(3), Median: stats.median(values).toFixed(3), Min: Math.min.apply(Math, values).toFixed(3), Max: Math.max.apply(Math, values).toFixed(3), StdDev: stats.stdev(values).toFixed(3), p95: percentile ? percentile.toFixed(3) : 'n/a' }); });
self.drawChart = function drawChart(filter) { $('#trades_chart').html(''); if (filter.inputTokenAddress) { const trades = self.tradesCache.filter(trade => (!filter.inputTokenAddress || (trade.tokenGet.addr.toLowerCase() === filter.inputTokenAddress.toLowerCase() || trade.tokenGive.addr.toLowerCase() === filter.inputTokenAddress.toLowerCase()))) .sort((a, b) => a.date - b.date); const rows = trades.map((trade) => { const price = trade.tokenGet.name === 'ETH' ? trade.amountGet.div(trade.amountGive).toNumber() : trade.amountGive.div(trade.amountGet).toNumber(); return [trade.date, price]; }); const values = rows.map(x => x[1]); const phigh = stats.percentile(values, 0.95); const plow = stats.percentile(values, 0.05); const filteredRows = rows.filter(x => x[1] >= plow && x[1] <= phigh); if (filteredRows.length > 1) { const interval = 1 * 60 * 60 * 1000; let start = filteredRows[0][0]; let points = []; const intervals = []; filteredRows.forEach((row) => { const [date, point] = row; if (date - start > interval) { if (points.length > 0) { const low = Math.min.apply(null, points); const high = Math.max.apply(null, points); const open = points[0]; const close = points[points.length - 1]; if (close > open) { intervals.push([start, low, open, close, high]); } else { intervals.push([start, high, close, open, low]); } } start = new Date(start.getTime() + interval); points = []; } points.push(point); }); const data = google.visualization.arrayToDataTable(intervals, true); const options = { width: 900, height: 500, legend: { position: 'none' }, enableInteractivity: false, chartArea: { width: '85%', }, hAxis: { viewWindow: { min: filteredRows[0].date, max: filteredRows[filteredRows.length - 1].date, }, gridlines: { count: -1, units: { days: { format: ['MMM dd'] }, hours: { format: ['HH:mm', 'ha'] }, }, }, minorGridlines: { units: { hours: { format: ['hh:mm:ss a', 'ha'] }, minutes: { format: ['HH:mm a Z', ':mm'] }, }, }, }, }; const chart = new google.visualization.CandlestickChart( document.getElementById('trades_chart')); chart.draw(data, options); } } };
return totalTries; } } while (hasCardsCount() > 1) { turns += playTurn(); } verbose && console.log('GAME OVER! ' + players[0].length + ' to ' + players[1].length); return turns; } var results = []; for (var i=0, turns; i<10000; i++) { turns = playWar() / 26; results.push(turns); } console.log("mean: %s", stats.mean(results)); console.log("median: %s", stats.median(results)); console.log("mode: %s", stats.mode(results)); console.log("variance: %s", stats.variance(results)); console.log("standard deviation: %s", stats.stdev(results)); console.log("min: %s", Math.min.apply(null, results)); console.log("max: %s", Math.max.apply(null, results)); console.log("1st percentile: %s", stats.percentile(results, 0.01)); console.log("2nd percentile: %s", stats.percentile(results, 0.02)); console.log("95th percentile: %s", stats.percentile(results, 0.95)); console.log("99th percentile: %s", stats.percentile(results, 0.99));
const absolutePercentiles = percentiles.map(ptile => percentile(as, ptile));
Stats.prototype.report = function() { let result = {}; result.timestamp = new Date().toISOString(); result.scenariosCreated = this._generatedScenarios; result.scenariosCompleted = this._completedScenarios; result.requestsCompleted = this._completedRequests; let latencies = L.map(this._entries, (e) => { return e[2]; }); result.latency = { min: round(L.min(latencies) / 1e6, 1), max: round(L.max(latencies) / 1e6, 1), median: round(sl.median(latencies) / 1e6, 1), p95: round(sl.percentile(latencies, 0.95) / 1e6, 1), p99: round(sl.percentile(latencies, 0.99) / 1e6, 1) }; let startedAt = L.min(this._requestTimestamps); let now = Date.now(); let count = L.size(this._requestTimestamps); let mean = Math.round( (count / (Math.round((now - startedAt) / 10) / 100)) * 100) / 100; result.rps = { count: count, mean: mean }; result.scenarioDuration = { min: round(L.min(this._scenarioLatencies) / 1e6, 1), max: round(L.max(this._scenarioLatencies) / 1e6, 1), median: round(sl.median(this._scenarioLatencies) / 1e6, 1), p95: round(sl.percentile(this._scenarioLatencies, 0.95) / 1e6, 1), p99: round(sl.percentile(this._scenarioLatencies, 0.99) / 1e6, 1) }; result.scenarioCounts = this._scenarioCounter; result.errors = this._errors; result.codes = this._codes; result.matches = this._matches; result.latencies = this.getEntries(); result.customStats = {}; L.each(this._customStats, function(ns, name) { result.customStats[name] = { min: round(L.min(ns), 1), max: round(L.max(ns), 1), median: round(sl.median(ns), 1), p95: round(sl.percentile(ns, 0.95), 1), p99: round(sl.percentile(ns, 0.99), 1) }; }); if (this._concurrency !== null) { result.concurrency = this._concurrency; } result.pendingRequests = this._pendingRequests; return result; };