All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 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 ConcurrentHashMap<>();
    metadata.put("eventType", eventType);
    startTime = clock.millis();
    lastSubTotal = startTime;
    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) {
    if (StringUtils.isNotBlank(key) && StringUtils.isNotBlank(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;
  }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy