package com.ibm.nmon.analysis; import com.ibm.nmon.data.DataType; /** * Statistics supported by {@link AnalysisRecord}. This enum provides a generic way to query * analysis data via the {@link #getValue(AnalysisRecord, DataType, String) getValue()} method. */ public enum Statistic { AVERAGE("Average") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.getAverage(type, fieldName); } }, MINIMUM("Minimum") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.getMinimum(type, fieldName); } }, MAXIMUM("Maximum") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.getMaximum(type, fieldName); } }, GRANULARITY_MAXIMUM("Granularity Max") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.getGranularityMaximum(type, fieldName); } public String getName(int granularity) { granularity /= 1000; int minutes = granularity / 60; int seconds = granularity % 60; String title = null; if (minutes == 0) { title = seconds + "s Peak"; } else { title = minutes + ":" + (seconds < 10 ? "0" : "") + seconds + " Peak (mm:ss)"; } return title; } }, STD_DEV("Std Dev") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.getStandardDeviation(type, fieldName); } }, MEDIAN("Median") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.getMedian(type, fieldName); } }, PERCENTILE_95("95th Percentile") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.get95thPercentile(type, fieldName); } }, PERCENTILE_99("99th Percentile") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.get99thPercentile(type, fieldName); } }, SUM("Sum") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.getSum(type, fieldName); } }, COUNT("Count") { @Override public double getValue(AnalysisRecord record, DataType type, String fieldName) { return record.getCount(type, fieldName); } }; private final String name; private Statistic(String name) { this.name = name; } public String toString() { return name; }; public abstract double getValue(AnalysisRecord record, DataType type, String fieldName); /** * Gets the statistic name. * * @param granularity only required for {@link #GRANULARITY_MAXIMUM} * * @return the name */ public String getName(int granularity) { return name; } }