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

com.redislabs.redistimeseries.information.Info Maven / Gradle / Ivy

package com.redislabs.redistimeseries.information;

import com.redislabs.redistimeseries.Aggregation;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import redis.clients.jedis.util.SafeEncoder;

public class Info {

  private final Map properties;
  private final Map labels;
  private final Map rules;

  public Info(Map properties, Map labels, Map rules) {
    this.properties = properties;
    this.labels = labels;
    this.rules = rules;
  }

  public Long getProperty(String property) {
    return properties.get(property);
  }

  public String getLabel(String label) {
    return labels.get(label);
  }

  public Rule getRule(String rule) {
    return rules.get(rule);
  }

  public static Info parseInfoReply(List resp) {
    Map properties = new HashMap<>();
    Map labels = new HashMap<>();
    Map rules = new HashMap<>();
    for (int i = 0; i < resp.size(); i += 2) {
      String prop = SafeEncoder.encode((byte[]) resp.get(i));
      Object value = resp.get(i + 1);
      if (value instanceof Long) {
        properties.put(prop, (Long) value);
      } else {
        if (prop.equals("labels")) {
          List> labelsList = (List>) value;
          for (List labelBytes : labelsList) {
            labels.put(
                SafeEncoder.encode((byte[]) labelBytes.get(0)),
                SafeEncoder.encode((byte[]) labelBytes.get(1)));
          }
        } else if (prop.equals("rules")) {
          List> rulesList = (List>) value;
          for (List ruleBytes : rulesList) {
            String target = SafeEncoder.encode((byte[]) ruleBytes.get(0));
            String agg = SafeEncoder.encode((byte[]) ruleBytes.get(2));
            rules.put(target, new Rule(target, (Long) ruleBytes.get(1), Aggregation.valueOf(agg)));
          }
        }
      }
    }
    return new Info(properties, labels, rules);
  }
}