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

com.redislabs.redistimeseries.RangeParams Maven / Gradle / Ivy

package com.redislabs.redistimeseries;

import java.util.ArrayList;
import java.util.List;
import redis.clients.jedis.Protocol;
import redis.clients.jedis.util.SafeEncoder;

public class RangeParams {

  private long[] filterByTimestamps;
  private double[] filterByValues;

  private Integer count;

  private byte[] align;

  private Aggregation aggregationType;
  private long timeBucket;

  public static RangeParams rangeParams() {
    return new RangeParams();
  }

  public RangeParams filterByTS(long... timestamps) {
    this.filterByTimestamps = timestamps;
    return this;
  }

  public RangeParams filterByValues(double min, double max) {
    this.filterByValues = new double[] {min, max};
    return this;
  }

  public RangeParams count(int count) {
    this.count = count;
    return this;
  }

  private RangeParams align(byte[] raw) {
    this.align = raw;
    return this;
  }

  public RangeParams align(long timestamp) {
    return align(Protocol.toByteArray(timestamp));
  }

  public RangeParams alignStart() {
    return align(RedisTimeSeries.MINUS);
  }

  public RangeParams alignEnd() {
    return align(RedisTimeSeries.PLUS);
  }

  public RangeParams aggregation(Aggregation aggregation, long timeBucket) {
    this.aggregationType = aggregation;
    this.timeBucket = timeBucket;
    return this;
  }

  public byte[][] getByteParams(String key, Long from, Long to) {
    List params = new ArrayList<>();
    params.add(SafeEncoder.encode(key));

    if (from == null) {
      params.add(RedisTimeSeries.MINUS);
    } else {
      params.add(Protocol.toByteArray(from));
    }

    if (to == null) {
      params.add(RedisTimeSeries.PLUS);
    } else {
      params.add(Protocol.toByteArray(to));
    }

    if (filterByTimestamps != null) {
      params.add(Keyword.FILTER_BY_TS.getRaw());
      for (long ts : filterByTimestamps) {
        params.add(Protocol.toByteArray(ts));
      }
    }

    if (filterByValues != null) {
      params.add(Keyword.FILTER_BY_VALUE.getRaw());
      for (double value : filterByValues) {
        params.add(Protocol.toByteArray(value));
      }
    }

    if (count != null) {
      params.add(Keyword.COUNT.getRaw());
      params.add(Protocol.toByteArray(count));
    }

    if (align != null) {
      params.add(Keyword.ALIGN.getRaw());
      params.add(align);
    }

    if (aggregationType != null) {
      params.add(Keyword.AGGREGATION.getRaw());
      params.add(aggregationType.getRaw());
      params.add(Protocol.toByteArray(timeBucket));
    }

    return params.toArray(new byte[params.size()][]);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy