blob: 747a42acccb39399a2fd7d01e8c076f1817c05f8 [file] [log] [blame]
package org.apache.cassandra.stress.report;
import java.util.Arrays;
import java.util.Map;
import java.util.TreeMap;
public class TimingIntervals
{
final Map<String, TimingInterval> intervals;
public TimingIntervals(Map<String, TimingInterval> intervals)
{
this.intervals = intervals;
}
public TimingInterval get(String opType)
{
return intervals.get(opType);
}
public String str(TimingInterval.TimingParameter value, String unit)
{
return str(value, Double.NaN, unit);
}
public String str(TimingInterval.TimingParameter value, double rank, String unit)
{
if (intervals.size() == 0)
{
return "[]";
}
StringBuilder sb = new StringBuilder("[");
for (Map.Entry<String, TimingInterval> entry : intervals.entrySet())
{
sb.append(entry.getKey());
sb.append(": ");
sb.append(entry.getValue().getStringValue(value, rank));
if (unit.length() > 0)
{
sb.append(" ");
sb.append(unit);
}
sb.append(", ");
}
sb.setLength(sb.length()-2);
sb.append("]");
return sb.toString();
}
public String opRates()
{
return str(TimingInterval.TimingParameter.OPRATE, "op/s");
}
public String partitionRates()
{
return str(TimingInterval.TimingParameter.PARTITIONRATE, "pk/s");
}
public String rowRates()
{
return str(TimingInterval.TimingParameter.ROWRATE, "row/s");
}
public String meanLatencies()
{
return str(TimingInterval.TimingParameter.MEANLATENCY, "ms");
}
public String maxLatencies()
{
return str(TimingInterval.TimingParameter.MAXLATENCY, "ms");
}
public String medianLatencies()
{
return str(TimingInterval.TimingParameter.MEDIANLATENCY, "ms");
}
public String latenciesAtPercentile(double rank)
{
return str(TimingInterval.TimingParameter.RANKLATENCY, rank, "ms");
}
public String errorCounts()
{
return str(TimingInterval.TimingParameter.ERRORCOUNT, "");
}
public String partitionCounts()
{
return str(TimingInterval.TimingParameter.PARTITIONCOUNT, "");
}
public long opRate()
{
long v = 0;
for (TimingInterval interval : intervals.values())
v += interval.opRate();
return v;
}
public long startNanos()
{
long start = Long.MAX_VALUE;
for (TimingInterval interval : intervals.values())
start = Math.min(start, interval.startNanos());
return start;
}
public long endNanos()
{
long end = Long.MIN_VALUE;
for (TimingInterval interval : intervals.values())
end = Math.max(end, interval.startNanos());
return end;
}
public Map<String, TimingInterval> intervals()
{
return intervals;
}
}