package com.couchbase.loadgen.measurements;
public class Measurements {
private static final long serialVersionUID = -311232927139188477L;
private static Measurements measurements = null;
private Stats total;
private Stats interval;
private Stats current;
/**
* Return the singleton Measurements object.
*/
public synchronized static Measurements getMeasurements() {
if (measurements == null)
measurements = new Measurements();
return measurements;
}
/**
* Create a new object with the specified properties.
*/
public Measurements() {
total = new Stats();
interval = new Stats();
current = new Stats();
}
/**
* Report a single value of a single metric. E.g. for read latency,
* operation="READ" and latency is the measured value.
*/
public synchronized void measure(String operation, int latency) {
total.measure(operation, latency);
interval.measure(operation, latency);
current.measure(operation, latency);
}
/**
* Report a return code for a single DB operaiton.
*/
public void reportReturnCode(String operation, int code) {
total.reportReturnCode(operation, code);
interval.reportReturnCode(operation, code);
current.reportReturnCode(operation, code);
}
public synchronized void addMeasurement(String json) {
total.decodeJson(json);
interval.decodeJson(json);
}
public synchronized Stats getStats(StatsID id) {
Stats stats = null;
if (id == StatsID.CURRENT_STATS) {
stats = current;
current = new Stats();
} else if (id == StatsID.INTERVAL_STATS) {
stats = interval;
interval = new Stats();
} else if (id == StatsID.TOAL_STATS) {
stats = total;
total = new Stats();
}
return stats;
}
}