@artilleryio/platform-fargate
Version:
Fargate support for Artillery
1 lines • 4.77 kB
JavaScript
"use strict";const L=require("lodash"),sl=require("stats-lite");function create(){return new Stats}function combine(statsObjects){let result=create();return L.each(statsObjects,function(stats){L.each(stats._entries,function(entry){result._entries.push(entry)}),L.each(stats._latencies,function(latency){result._latencies.push(latency)}),result._generatedScenarios+=stats._generatedScenarios,L.each(stats._scenarioCounter,function(count,name){result._scenarioCounter[name]?result._scenarioCounter[name]+=count:result._scenarioCounter[name]=count}),result._completedScenarios+=stats._completedScenarios,L.each(stats._codes,function(count,code){result._codes[code]?result._codes[code]+=count:result._codes[code]=count}),L.each(stats._errors,function(count,error){result._errors[error]?result._errors[error]+=count:result._errors[error]=count}),L.each(stats._requestTimestamps,function(timestamp){result._requestTimestamps.push(timestamp)}),result._completedRequests+=stats._completedRequests,L.each(stats._scenarioLatencies,function(latency){result._scenarioLatencies.push(latency)}),result._matches+=stats._matches,L.each(stats._customStats,function(values,name){result._customStats[name]||(result._customStats[name]=[]),L.each(values,function(v){result._customStats[name].push(v)})}),result._concurrency+=stats._concurrency||0,result._pendingRequests+=stats._pendingRequests}),result}function Stats(){return this.reset()}function round(number,decimals){decimals=Math.pow(10,decimals);return Math.round(number*decimals)/decimals}module.exports={create:create,combine:combine,round:round},Stats.prototype.addEntry=function(entry){return this._entries.push(entry),this},Stats.prototype.getEntries=function(){return this._entries},Stats.prototype.newScenario=function(name){return this._scenarioCounter[name]?this._scenarioCounter[name]++:this._scenarioCounter[name]=1,this._generatedScenarios++,this},Stats.prototype.completedScenario=function(){return this._completedScenarios++,this},Stats.prototype.addCode=function(code){return this._codes[code]||(this._codes[code]=0),this._codes[code]++,this},Stats.prototype.addError=function(errCode){return this._errors[errCode]||(this._errors[errCode]=0),this._errors[errCode]++,this},Stats.prototype.newRequest=function(){return this._requestTimestamps.push(Date.now()),this},Stats.prototype.completedRequest=function(){return this._completedRequests++,this},Stats.prototype.addLatency=function(delta){return this._latencies.push(delta),this},Stats.prototype.addScenarioLatency=function(delta){return this._scenarioLatencies.push(delta),this},Stats.prototype.addMatch=function(){return this._matches++,this},Stats.prototype.clone=function(){return L.cloneDeep(this)},Stats.prototype.report=function(){let result={};result.timestamp=(new Date).toISOString(),result.scenariosCreated=this._generatedScenarios,result.scenariosCompleted=this._completedScenarios,result.requestsCompleted=this._completedRequests;var latencies=L.map(this._entries,e=>e[2]),latencies=(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,.95)/1e6,1),p99:round(sl.percentile(latencies,.99)/1e6,1)},L.min(this._requestTimestamps)),now=Date.now(),count=L.size(this._requestTimestamps),now=Math.round(count/(Math.round((now-latencies)/10)/100)*100)/100;return result.rps={count:count,mean:now},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,.95)/1e6,1),p99:round(sl.percentile(this._scenarioLatencies,.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,.95),1),p99:round(sl.percentile(ns,.99),1)}}),null!==this._concurrency&&(result.concurrency=this._concurrency),result.pendingRequests=this._pendingRequests,result},Stats.prototype.addCustomStat=function(name,n){return this._customStats[name]||(this._customStats[name]=[]),this._customStats[name].push(n),this},Stats.prototype.reset=function(){return this._entries=[],this._latencies=[],this._generatedScenarios=0,this._completedScenarios=0,this._codes={},this._errors={},this._requestTimestamps=[],this._completedRequests=0,this._scenarioLatencies=[],this._matches=0,this._customStats={},this._concurrency=null,this._pendingRequests=0,this._scenarioCounter={},this},Stats.prototype.free=function(){return this};