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

com.truward.brikar.common.log.lapse.SimpleLapse Maven / Gradle / Ivy

The newest version!
package com.truward.brikar.common.log.lapse;

import com.truward.brikar.common.log.LogUtil;
import com.truward.brikar.common.log.metric.Metrics;
import com.truward.time.TimeSource;

import javax.annotation.Nonnull;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * @author Alexander Shabanov
 */
public final class SimpleLapse implements Lapse {
  private String operation = LogUtil.UNKNOWN_VALUE;
  private long startTime = -1L;
  private long endTime = -1L;
  private boolean failed;
  private int count = -1;
  private Map extraProperties = Collections.emptyMap();

  public SimpleLapse setOperation(@Nonnull String value) {
    this.operation = value;
    return this;
  }

  public SimpleLapse setStartTime(long timeMillis) {
    this.startTime = timeMillis;
    return this;
  }

  public SimpleLapse setStartTime(@Nonnull TimeSource timeSource) {
    return setStartTime(timeSource.getTimeUnit().toMillis(timeSource.currentTime()));
  }

  public SimpleLapse setEndTime(long timeMillis) {
    this.endTime = timeMillis;
    return this;
  }

  public SimpleLapse setEndTime(@Nonnull TimeSource timeSource) {
    return setEndTime(timeSource.getTimeUnit().toMillis(timeSource.currentTime()));
  }

  public SimpleLapse setFailed(boolean failed) {
    this.failed = failed;
    return this;
  }

  public int getCount() {
    return count;
  }

  public SimpleLapse setCount(int value) {
    this.count = value;
    return this;
  }

  public SimpleLapse setProperty(String name, String value) {
    if (extraProperties.isEmpty()) {
      extraProperties = new HashMap<>();
    }
    extraProperties.put(name, value);
    return this;
  }

  public SimpleLapse setProperty(String name, int value) {
    return setProperty(name, Integer.toString(value));
  }

  public SimpleLapse setProperty(String name, long value) {
    return setProperty(name, Long.toString(value));
  }

  public SimpleLapse setProperty(String name, boolean value) {
    return setProperty(name, Boolean.toString(value));
  }

  @Override
  public long getStartTime() {
    return startTime;
  }

  @Override
  public long getEndTime() {
    return endTime;
  }

  @Nonnull
  @Override
  public String getOperation() {
    return operation;
  }

  @Override
  public boolean isFailed() {
    return failed;
  }

  @Override
  public void appendTo(@Nonnull Appendable appendable) throws IOException {
    Metrics.appendValue(appendable, false, LogUtil.OPERATION, getOperation());
    Metrics.appendPositiveValueOrSkip(appendable, true, LogUtil.START_TIME, getStartTime());

    if (endTime > 0) {
      if (startTime < 0) {
        Metrics.appendValue(appendable, true, LogUtil.TIME_DELTA, "?");
      } else {
        Metrics.appendPositiveValueOrSkip(appendable, true, LogUtil.TIME_DELTA, endTime - startTime);
      }
    }

    Metrics.appendPositiveValueOrSkip(appendable, true, LogUtil.COUNT, getCount());
    Metrics.appendTrueValueOrSkip(appendable, true, LogUtil.FAILED, isFailed());

    if (extraProperties.isEmpty()) {
      return;
    }
    for (final Map.Entry extraPropEntry : extraProperties.entrySet()) {
      Metrics.appendValue(appendable, true, extraPropEntry.getKey(), extraPropEntry.getValue());
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy