code: package resa.util;
  
  import backtype.storm.Config;
  import backtype.storm.utils.Utils;
  import resa.topology.ResaContainer;
  
  import java.util.Map;
  
  /**
   * Created by ding on 14-4-26.
   */
  public class ResaConfig extends Config {
  
      public static final String TRACE_COMP_QUEUE = "topology.queue.trace";
  
      public static final String COMP_QUEUE_SAMPLE_RATE = "resa.comp.queue.sample.rate";
  
      public static final String COMP_SAMPLE_RATE = "resa.comp.sample.rate";
  
      public static final String MAX_EXECUTORS_PER_WORKER = "resa.topology.max.executor.per.worker";
  
      public static final String ZK_ROOT_PATH = "resa.scheduler.zk.root";
  
      public static final String REBALANCE_WAITING_SECS = "resa.topology.rebalance.waiting.secs";
  
      public static final String ALLOWED_EXECUTOR_NUM = "resa.topology.allowed.executor.num";
  
      public static final String OPTIMIZE_INTERVAL = "resa.optimize.interval.secs";
  
      public static final String ALLOC_CALC_CLASS = "resa.optimize.alloc.class";
  
      public static final String DECISION_MAKER_CLASS = "resa.scheduler.decision.class";
  
      private ResaConfig(boolean loadDefault) {
          if (loadDefault) {
              //read default.yaml & storm.yaml
              try {
                  putAll(Utils.readStormConfig());
              } catch (Throwable e) {
              }
          }
          Map<String, Object> conf = Utils.findAndReadConfigFile("resa.yaml", false);
          if (conf != null) {
              putAll(conf);
          }
      }
  
      /**
       * Create a new Conf, then load default.yaml and storm.yaml
       *
       * @return
       */
      public static ResaConfig create() {
          return create(false);
      }
  
      /**
       * Create a new resa Conf
       *
       * @param loadDefault
       * @return
       */
      public static ResaConfig create(boolean loadDefault) {
          return new ResaConfig(loadDefault);
      }
  
      public void addDrsSupport() {
          registerMetricsConsumer(ResaContainer.class, 1);
      }
  }
  