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

com.wavefront.agent.histogram.Granularity Maven / Gradle / Ivy

package com.wavefront.agent.histogram;

import org.apache.commons.lang.time.DateUtils;

import javax.annotation.Nullable;

/**
 * Standard supported aggregation Granularities.
 * Refactored from HistogramUtils.
 *
 * @author Tim Schmidt ([email protected])
 * @author [email protected]
 */
public enum Granularity {
  MINUTE((int) DateUtils.MILLIS_PER_MINUTE),
  HOUR((int) DateUtils.MILLIS_PER_HOUR),
  DAY((int) DateUtils.MILLIS_PER_DAY);

  private final int inMillis;

  Granularity(int inMillis) {
    this.inMillis = inMillis;
  }

  /**
   * Duration of a corresponding bin in milliseconds.
   *
   * @return bin length in milliseconds
   */
  public int getInMillis() {
    return inMillis;
  }

  /**
   * Bin id for an epoch time is the epoch time in the corresponding granularity.
   *
   * @param timeMillis epoch time in milliseconds
   * @return the bin id
   */
  public int getBinId(long timeMillis) {
    return (int) (timeMillis / inMillis);
  }

  @Override
  public String toString() {
    switch (this) {
      case DAY:
        return "day";
      case HOUR:
        return "hour";
      case MINUTE:
        return "minute";
    }
    return "unknown";
  }

  public static Granularity fromMillis(long millis) {
    if (millis <= 60 * 1000) {
      return MINUTE;
    } else if (millis <= 60 * 60 * 1000) {
      return HOUR;
    } else {
      return DAY;
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy