| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.hadoop.fs.swift.util; |
| |
| /** |
| * Build ongoing statistics from duration data |
| */ |
| public class DurationStats { |
| |
| final String operation; |
| int n; |
| long sum; |
| long min; |
| long max; |
| double mean, m2; |
| |
| /** |
| * Construct statistics for a given operation. |
| * @param operation operation |
| */ |
| public DurationStats(String operation) { |
| this.operation = operation; |
| reset(); |
| } |
| |
| /** |
| * construct from anothr stats entry; |
| * all value are copied. |
| * @param that the source statistics |
| */ |
| public DurationStats(DurationStats that) { |
| operation = that.operation; |
| n = that.n; |
| sum = that.sum; |
| min = that.min; |
| max = that.max; |
| mean = that.mean; |
| m2 = that.m2; |
| } |
| |
| /** |
| * Add a duration |
| * @param duration the new duration |
| */ |
| public void add(Duration duration) { |
| add(duration.value()); |
| } |
| |
| /** |
| * Add a number |
| * @param x the number |
| */ |
| public void add(long x) { |
| n++; |
| sum += x; |
| double delta = x - mean; |
| mean += delta / n; |
| m2 += delta * (x - mean); |
| if (x < min) { |
| min = x; |
| } |
| if (x > max) { |
| max = x; |
| } |
| } |
| |
| /** |
| * Reset the data |
| */ |
| public void reset() { |
| n = 0; |
| sum = 0; |
| sum = 0; |
| min = 10000000; |
| max = 0; |
| mean = 0; |
| m2 = 0; |
| } |
| |
| /** |
| * Get the number of entries sampled |
| * @return the number of durations added |
| */ |
| public int getCount() { |
| return n; |
| } |
| |
| /** |
| * Get the sum of all durations |
| * @return all the durations |
| */ |
| public long getSum() { |
| return sum; |
| } |
| |
| /** |
| * Get the arithmetic mean of the aggregate statistics |
| * @return the arithmetic mean |
| */ |
| public double getArithmeticMean() { |
| return mean; |
| } |
| |
| /** |
| * Variance, sigma^2 |
| * @return variance, or, if no samples are there, 0. |
| */ |
| public double getVariance() { |
| return n > 0 ? (m2 / (n - 1)) : 0; |
| } |
| |
| /** |
| * Get the std deviation, sigma |
| * @return the stddev, 0 may mean there are no samples. |
| */ |
| public double getDeviation() { |
| double variance = getVariance(); |
| return (variance > 0) ? Math.sqrt(variance) : 0; |
| } |
| |
| /** |
| * Covert to a useful string |
| * @return a human readable summary |
| */ |
| @Override |
| public String toString() { |
| return String.format( |
| "%s count=%d total=%.3fs mean=%.3fs stddev=%.3fs min=%.3fs max=%.3fs", |
| operation, |
| n, |
| sum / 1000.0, |
| mean / 1000.0, |
| getDeviation() / 1000000.0, |
| min / 1000.0, |
| max / 1000.0); |
| } |
| |
| } |