public RollingHistogram(Clock clock, StatisticConfig statisticConfig) { this.clock = clock; this.statisticConfig = statisticConfig; int ageBuckets = (int) statisticConfig.getBuckets(); ringBuffer = new DoubleRecorder[ageBuckets]; for (int i = 0; i < ageBuckets; i++) { ringBuffer[i] = new DoubleRecorder(statisticConfig.getPercentilePrecision()); } this.currentBucket = 0; this.lastRotateTimestampMillis = clock.getCurrentTime(); this.durationBetweenRotatesMillis = statisticConfig.getTimeWindow().toMillis() / ageBuckets; intervalHistogram = new DoubleHistogram(statisticConfig.getPercentilePrecision()); accumulatedHistogram = new DoubleHistogram(statisticConfig.getPercentilePrecision()); }
public static BValueArray createBStatisticConfig(StatisticConfig[] configs, Context context) { PackageInfo observePackage = context.getProgramFile(). getPackageInfo(ObserveNativeImplConstants.OBSERVE_PACKAGE_PATH); StructureTypeInfo statisticConfigInfo = observePackage. getStructInfo(ObserveNativeImplConstants.STATISTIC_CONFIG); if (configs != null) { BValueArray bStatsConfig = new BValueArray(new BArrayType(statisticConfigInfo.getType())); int index = 0; for (StatisticConfig config : configs) { BValueArray bPercentiles = new BValueArray(new BArrayType(BTypes.typeFloat)); int percentileIndex = 0; for (Double percentile : config.getPercentiles()) { bPercentiles.add(percentileIndex, new BFloat(percentile)); percentileIndex++; } BMap<String, BValue> aSnapshot = BLangVMStructs.createBStruct(statisticConfigInfo, bPercentiles, config.getTimeWindow(), config.getBuckets()); bStatsConfig.add(index, aSnapshot); index++; } return bStatsConfig; } else { return new BValueArray(new BArrayType(statisticConfigInfo.getType())); } } }
public Snapshot getSnapshot() { rotate(); synchronized (this) { accumulateIfStale(); PercentileValue[] percentileValues = null; final double[] monitoredPercentiles = statisticConfig.getPercentiles(); if (monitoredPercentiles != null) { percentileValues = new PercentileValue[monitoredPercentiles.length]; for (int i = 0; i < monitoredPercentiles.length; i++) { final double p = monitoredPercentiles[i]; percentileValues[i] = new PercentileValue(p, accumulatedHistogram.getValueAtPercentile(p * 100)); } } return new Snapshot(statisticConfig.getTimeWindow(), accumulatedHistogram.getMinValue(), accumulatedHistogram.getMean(), accumulatedHistogram.getStdDeviation(), accumulatedHistogram.getMaxValue(), percentileValues); } }
accumulatedHistogram = new DoubleHistogram(statisticConfig.getPercentilePrecision());
for (int i = 0; i < summaryConfigs.size(); i++) { BMap summaryConfigStruct = (BMap) summaryConfigs.getBValue(i); StatisticConfig.Builder statisticBuilder = StatisticConfig.builder() .expiry(Duration.ofMillis(((BInteger) summaryConfigStruct .get(ObserveNativeImplConstants.EXPIRY_FIELD)).intValue()))