Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@supertenant/core / src / util / slidingWindow.js
Size: Mime:
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
"use strict";const uniq=require("./uniq");function removeOldPoints(values,duration){let itemsToRemove=0;var threshold=Date.now()-duration;for(let i=0,len=values.length;i<len&&values[i][0]<threshold;i++)itemsToRemove++;return 0===itemsToRemove?values:values.slice(itemsToRemove)}exports.create=function(opts){const duration=opts.duration;let values=[];return{addPoint:function(v){values.push([Date.now(),v]),values=removeOldPoints(values,duration)},reduce:function(reducer,initial){return cleanup(),values.reduce((prev,curr)=>reducer(prev,curr[1]),initial)},sum:function(){cleanup();let localSum=0;for(let i=0,len=values.length;i<len;i++)localSum+=values[i][1];return localSum},clear:function(){values=[]},getValues:getValues,getUniqueValues:function(){return uniq(getValues())},getPercentiles:function(percentiles){cleanup();var sortedValues=getValues(),sortedValuesLength=sortedValues.length,result=(sortedValues.sort(),[]);for(let i=0,len=percentiles.length;i<len;i++)result[i]=0===sortedValuesLength?0:1===sortedValuesLength?sortedValues[0]:sortedValues[Math.round(len*percentiles[i])];return result}};function cleanup(){values=removeOldPoints(values,duration)}function getValues(){cleanup();var valuesCopy=[];for(let i=0,len=values.length;i<len;i++)valuesCopy[i]=values[i][1];return valuesCopy}};