Package com.dianping.cat.system.config

Source Code of com.dianping.cat.system.config.BusinessRuleConfigManager

package com.dianping.cat.system.config;

import java.util.ArrayList;
import java.util.List;

import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.dal.jdbc.DalNotFoundException;
import org.unidal.helper.Files;
import org.unidal.lookup.annotation.Inject;

import com.dianping.cat.Cat;
import com.dianping.cat.advanced.metric.config.entity.MetricItemConfig;
import com.dianping.cat.consumer.metric.MetricConfigManager;
import com.dianping.cat.core.config.Config;
import com.dianping.cat.core.config.ConfigEntity;
import com.dianping.cat.home.rule.entity.Condition;
import com.dianping.cat.home.rule.entity.MetricItem;
import com.dianping.cat.home.rule.entity.MonitorRules;
import com.dianping.cat.home.rule.entity.Rule;
import com.dianping.cat.home.rule.entity.SubCondition;
import com.dianping.cat.home.rule.transform.DefaultSaxParser;
import com.dianping.cat.message.Event;
import com.dianping.cat.report.task.alert.MetricType;

public class BusinessRuleConfigManager extends BaseRuleConfigManager implements Initializable {

  private static final String CONFIG_NAME = "businessRuleConfig";

  @Inject
  protected MetricConfigManager m_metricConfigManager;

  private com.dianping.cat.home.rule.entity.Config buildDefaultConfig() {
    com.dianping.cat.home.rule.entity.Config config = new com.dianping.cat.home.rule.entity.Config();
    config.setStarttime("00:00");
    config.setEndtime("24:00");

    Condition condition = new Condition();
    SubCondition descPerSubcon = new SubCondition();
    SubCondition descValSubcon = new SubCondition();

    descPerSubcon.setType("DescPer").setText("50");
    descValSubcon.setType("DescVal").setText("100");
    condition.addSubCondition(descPerSubcon).addSubCondition(descValSubcon);
    config.addCondition(condition);

    return config;
  }

  private Rule buildDefaultRule(String product, String metricKey) {
    Rule rule = new Rule(metricKey);
    MetricItem item = new MetricItem();

    item.setProductText(product);
    item.setMetricItemText(metricKey);

    MetricItemConfig metricItem = m_metricConfigManager.queryMetricItemConfig(metricKey);
    if (metricItem != null) {
      if (metricItem.isShowAvg()) {
        item.setMonitorAvg(true);
      }
      if (metricItem.isShowCount()) {
        item.setMonitorCount(true);
      }
      if (metricItem.isShowSum()) {
        item.setMonitorSum(true);
      }
    }

    rule.addMetricItem(item);
    rule.addConfig(buildDefaultConfig());
    return rule;
  }

  @Override
  protected String getConfigName() {
    return CONFIG_NAME;
  }

  @Override
  public void initialize() throws InitializationException {
    try {
      Config config = m_configDao.findByName(CONFIG_NAME, ConfigEntity.READSET_FULL);
      String content = config.getContent();

      m_configId = config.getId();
      m_config = DefaultSaxParser.parse(content);
    } catch (DalNotFoundException e) {
      try {
        String content = Files.forIO().readFrom(
              this.getClass().getResourceAsStream("/config/default-business-metric-rule-config.xml"), "utf-8");
        Config config = m_configDao.createLocal();

        config.setName(CONFIG_NAME);
        config.setContent(content);
        m_configDao.insert(config);

        m_configId = config.getId();
        m_config = DefaultSaxParser.parse(content);
      } catch (Exception ex) {
        Cat.logError(ex);
      }
    } catch (Exception e) {
      Cat.logError(e);
    }
    if (m_config == null) {
      m_config = new MonitorRules();
    }
  }

  @Override
  public List<com.dianping.cat.home.rule.entity.Config> queryConfigs(String product, String metricKey, MetricType type) {
    Rule rule = m_config.getRules().get(metricKey);
    List<com.dianping.cat.home.rule.entity.Config> configs = new ArrayList<com.dianping.cat.home.rule.entity.Config>();

    if (rule == null) {
      configs.add(buildDefaultConfig());
      return configs;
    } else {
      for (MetricItem item : rule.getMetricItems()) {
        if (type == MetricType.COUNT && item.isMonitorCount()) {
          configs.addAll(rule.getConfigs());
          break;
        } else if (type == MetricType.AVG && item.isMonitorAvg()) {
          configs.addAll(rule.getConfigs());
          break;
        } else if (type == MetricType.SUM && item.isMonitorSum()) {
          configs.addAll(rule.getConfigs());
          break;
        } else {
          Cat.logError("No Metric Type find. product:" + product + " metric key:" + metricKey,
                new RuntimeException());
        }
      }
      if (configs.size() == 0) {
        configs.add(buildDefaultConfig());
      } else {
        Cat.logEvent("FindRule:" + getConfigName(), rule.getId(), Event.SUCCESS, product + "," + metricKey);
      }
      return decorateConfigOnRead(configs);
    }
  }

  public Rule queryRule(String product, String metricKey) {
    Rule rule = m_config.getRules().get(metricKey);

    if (rule != null) {
      return copyRuleWithDeepCopyConditions(rule);
    } else {
      return buildDefaultRule(product, metricKey);
    }
  }

}
TOP

Related Classes of com.dianping.cat.system.config.BusinessRuleConfigManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.