com.groupbyinc.common.blip.BlipTimer Maven / Gradle / Ivy
package com.groupbyinc.common.blip;
import org.apache.commons.lang3.StringUtils;
import java.time.Clock;
import java.util.HashMap;
import java.util.Map;
/**
* BlipTimer
*
* @author Abegail Jakop
*/
public class BlipTimer {
private static final String TOTAL = "millis";
private static Clock systemClock = Clock.systemUTC();
private Clock clock;
private long startTime;
private Map metadata;
private long lastDelta;
private long lastSubTotal;
public BlipTimer(String eventType) {
this(systemClock, eventType);
}
public BlipTimer(Clock clock, String eventType) {
this.clock = clock;
metadata = new HashMap<>();
metadata.put("eventType", eventType);
lastSubTotal = startTime;
startTime = clock.millis();
lastDelta = startTime;
}
protected void setClock(Clock clock) {
this.clock = clock;
}
public void addDelta(String identifier) {
long currentTime = clock.millis();
metadata.put(generateKey(identifier), serializeDelta(currentTime, lastDelta));
lastDelta = currentTime;
}
private String generateKey(String identifier) {
return "duration" + StringUtils.capitalize(identifier);
}
private String serializeDelta(long currentTime, long lastTime) {
return Long.toString(elasped(currentTime, lastTime));
}
private long elasped(long currentTime, long lastTime) {
return currentTime - lastTime;
}
public void addSubTotal(String identifier) {
long currentTime = clock.millis();
metadata.put(generateKey(identifier), serializeDelta(currentTime, lastSubTotal));
lastSubTotal = currentTime;
}
public void addMetaData(String key, String value) {
metadata.put(key, value);
}
public void addDelta(String identifier, long delta) {
long currentTime = clock.millis();
metadata.put(generateKey(identifier), Long.toString(delta));
lastDelta = currentTime;
}
public void addTotal() {
elapsed(TOTAL);
}
public void elapsed(String identifier) {
long currentTime = clock.millis();
metadata.put(generateKey(identifier), serializeDelta(currentTime, startTime));
}
public long getTotal() {
return elasped(clock.millis(), startTime);
}
public Map getMetadata() {
return metadata;
}
}