blob: 400fab9bc47950552a89ccb1011b4316164a7fb2 [file] [log] [blame]
/*
* 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.cassandra.stress.report;
import java.util.Map;
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;
}
}