Package com.dianping.cat.system.config

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

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.core.config.Config;
import com.dianping.cat.core.config.ConfigDao;
import com.dianping.cat.core.config.ConfigEntity;
import com.dianping.cat.home.dependency.exception.entity.DomainConfig;
import com.dianping.cat.home.dependency.exception.entity.ExceptionConfig;
import com.dianping.cat.home.dependency.exception.entity.ExceptionExclude;
import com.dianping.cat.home.dependency.exception.entity.ExceptionLimit;
import com.dianping.cat.home.dependency.exception.transform.DefaultSaxParser;

public class ExceptionConfigManager implements Initializable {

  @Inject
  private ConfigDao m_configDao;

  private int m_configId;

  private ExceptionConfig m_exceptionConfig;

  private static final String CONFIG_NAME = "exceptionConfig";

  public static String DEFAULT_STRING = "Default";

  public static String TOTAL_STRING = "Total";

  public boolean deleteExceptionExclude(String domain, String exceptionName) {
    DomainConfig domainConfig = m_exceptionConfig.findOrCreateDomainConfig(domain);

    domainConfig.removeExceptionExclude(exceptionName);
    return storeConfig();
  }

  public boolean deleteExceptionLimit(String domain, String exceptionName) {
    DomainConfig domainConfig = m_exceptionConfig.findOrCreateDomainConfig(domain);
    domainConfig.removeExceptionLimit(exceptionName);
    return storeConfig();
  }

  @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_exceptionConfig = DefaultSaxParser.parse(content);
    } catch (DalNotFoundException e) {
      try {
        String content = Files.forIO().readFrom(
              this.getClass().getResourceAsStream("/config/default-exception-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_exceptionConfig = DefaultSaxParser.parse(content);
      } catch (Exception ex) {
        Cat.logError(ex);
      }
    } catch (Exception e) {
      Cat.logError(e);
    }
    if (m_exceptionConfig == null) {
      m_exceptionConfig = new ExceptionConfig();
    }
  }

  public boolean insertExceptionExclude(ExceptionExclude exception) {
    DomainConfig domainConfig = m_exceptionConfig.findOrCreateDomainConfig(exception.getDomain());

    domainConfig.getExceptionExcludes().put(exception.getId(), exception);
    return storeConfig();
  }

  public boolean insertExceptionLimit(ExceptionLimit limit) {
    DomainConfig domainConfig = m_exceptionConfig.findOrCreateDomainConfig(limit.getDomain());
    domainConfig.getExceptionLimits().put(limit.getId(), limit);
   
    return storeConfig();
  }

  public List<ExceptionExclude> queryAllExceptionExcludes() {
    List<ExceptionExclude> result = new ArrayList<ExceptionExclude>();

    for (DomainConfig domainConfig : m_exceptionConfig.getDomainConfigs().values()) {
      result.addAll(domainConfig.getExceptionExcludes().values());
    }
    return result;
  }

  public List<ExceptionLimit> queryAllExceptionLimits() {
    List<ExceptionLimit> result = new ArrayList<ExceptionLimit>();
   
    for (DomainConfig domainConfig : m_exceptionConfig.getDomainConfigs().values()) {
      result.addAll(domainConfig.getExceptionLimits().values());
    }
    return result;
  }

  private ExceptionExclude queryDefaultExceptionExclude(String exceptionName) {
    DomainConfig domainConfig = m_exceptionConfig.getDomainConfigs().get(DEFAULT_STRING);
    ExceptionExclude result = null;

    if (domainConfig != null) {
      result = domainConfig.getExceptionExcludes().get(exceptionName);
    }
    return result;
  }

  public ExceptionExclude queryDomainExceptionExclude(String domain, String exceptionName) {
    DomainConfig domainConfig = m_exceptionConfig.getDomainConfigs().get(domain);
    ExceptionExclude result = null;

    // has no this domain config
    if (domainConfig == null) {
      result = queryDefaultExceptionExclude(exceptionName);
    }

    if (domainConfig != null) {
      result = domainConfig.getExceptionExcludes().get(exceptionName);
      // domain config has no exclude for exception, check default exclude config
      if (result == null) {
        result = queryDefaultExceptionExclude(exceptionName);
      }
    }
    return result;
  }

  public ExceptionLimit queryDomainExceptionLimit(String domain, String exceptionName) {
    DomainConfig domainConfig = m_exceptionConfig.getDomainConfigs().get(domain);
    ExceptionLimit result = null;
   
    if (domainConfig == null) {
      domainConfig = m_exceptionConfig.getDomainConfigs().get(DEFAULT_STRING);
    }
    if (domainConfig != null) {
      result = domainConfig.getExceptionLimits().get(exceptionName);
    }
    return result;
  }

  public ExceptionLimit queryDomainTotalLimit(String domain) {
    ExceptionLimit result = queryDomainExceptionLimit(domain, TOTAL_STRING);

    if (result == null) {
      result = queryDomainExceptionLimit(DEFAULT_STRING, TOTAL_STRING);
    }
    return result;
  }

  private boolean storeConfig() {
    synchronized (this) {
      try {
        Config config = m_configDao.createLocal();

        config.setId(m_configId);
        config.setKeyId(m_configId);
        config.setName(CONFIG_NAME);
        config.setContent(m_exceptionConfig.toString());
        m_configDao.updateByPK(config, ConfigEntity.UPDATESET_FULL);
      } catch (Exception e) {
        Cat.logError(e);
        return false;
      }
    }
    return true;
  }

}
TOP

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

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.