Package com.dianping.cat

Source Code of com.dianping.cat.ServerConfigManager

package com.dianping.cat;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.codehaus.plexus.logging.LogEnabled;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
import org.unidal.helper.Files;
import org.unidal.helper.Splitters;
import org.unidal.tuple.Pair;

import com.dianping.cat.configuration.NetworkInterfaceManager;
import com.dianping.cat.configuration.server.entity.ConsoleConfig;
import com.dianping.cat.configuration.server.entity.Domain;
import com.dianping.cat.configuration.server.entity.HdfsConfig;
import com.dianping.cat.configuration.server.entity.LongConfig;
import com.dianping.cat.configuration.server.entity.Property;
import com.dianping.cat.configuration.server.entity.ServerConfig;
import com.dianping.cat.configuration.server.entity.StorageConfig;
import com.dianping.cat.configuration.server.transform.DefaultSaxParser;
import com.dianping.cat.message.Transaction;

public class ServerConfigManager implements Initializable, LogEnabled {
  private static final long DEFAULT_HDFS_FILE_MAX_SIZE = 128 * 1024 * 1024L; // 128M

  private ServerConfig m_config;

  private Logger m_logger;

  private Set<String> m_unusedTypes = new HashSet<String>();

  private Set<String> m_unusedNames = new HashSet<String>();

  public boolean discardTransaction(Transaction t) {
    // pigeon default heartbeat is no use
    String type = t.getType();
    String name = t.getName();

    if (m_unusedTypes.contains(type) && m_unusedNames.contains(name)) {
      return true;
    }
    return false;
  }

  @Override
  public void enableLogging(Logger logger) {
    m_logger = logger;
  }

  public String getBindHost() {
    return null; // any IP address
  }

  public int getBindPort() {
    return 2280;
  }

  public String getConsoleDefaultDomain() {
    if (m_config != null) {
      return m_config.getConsole().getDefaultDomain().toLowerCase();
    } else {
      return Constants.CAT;
    }
  }

  public List<Pair<String, Integer>> getConsoleEndpoints() {
    if (m_config != null) {
      ConsoleConfig console = m_config.getConsole();
      String remoteServers = console.getRemoteServers();
      List<String> endpoints = Splitters.by(',').noEmptyItem().trim().split(remoteServers);
      List<Pair<String, Integer>> pairs = new ArrayList<Pair<String, Integer>>(endpoints.size());

      for (String endpoint : endpoints) {
        int pos = endpoint.indexOf(':');
        String host = (pos > 0 ? endpoint.substring(0, pos) : endpoint);
        int port = (pos > 0 ? Integer.parseInt(endpoint.substring(pos + 1)) : 2281);

        pairs.add(new Pair<String, Integer>(host, port));
      }

      return pairs;
    } else {
      return Collections.emptyList();
    }
  }

  public String getConsoleRemoteServers() {
    if (m_config != null) {
      ConsoleConfig console = m_config.getConsole();
      String remoteServers = console.getRemoteServers();

      if (remoteServers != null && remoteServers.length() > 0) {
        return remoteServers;
      }
    }

    return "";
  }

  public String getEmailAccount() {
    return "book.robot.dianping@gmail.com";
  }

  public String getEmailPassword() {
    return "xudgtsnoxivwclna";
  }

  public String getHdfsBaseDir(String id) {
    if (m_config != null) {
      HdfsConfig hdfsConfig = m_config.getStorage().findHdfs(id);

      if (hdfsConfig != null) {
        String baseDir = hdfsConfig.getBaseDir();

        if (baseDir != null && baseDir.trim().length() > 0) {
          return baseDir;
        }
      }
    }

    return null;
  }

  public long getHdfsFileMaxSize(String id) {
    if (m_config != null) {
      StorageConfig storage = m_config.getStorage();
      HdfsConfig hdfsConfig = storage.findHdfs(id);

      return toLong(hdfsConfig == null ? null : hdfsConfig.getMaxSize(), DEFAULT_HDFS_FILE_MAX_SIZE);
    } else {
      return DEFAULT_HDFS_FILE_MAX_SIZE;
    }
  }

  public String getHdfsLocalBaseDir(String id) {
    if (m_config != null) {
      StorageConfig storage = m_config.getStorage();

      return new File(storage.getLocalBaseDir(), id).getPath();
    } else if (id == null) {
      return "target/bucket";
    } else {
      return "target/bucket/" + id;
    }
  }

  public Map<String, String> getHdfsProperties() {
    if (m_config != null) {
      Map<String, String> properties = new HashMap<String, String>();

      for (Property p : m_config.getStorage().getProperties().values()) {
        properties.put(p.getName(), p.getValue());
      }

      return properties;
    } else {
      return Collections.emptyMap();
    }
  }

  public String getHdfsServerUri(String id) {
    if (m_config != null) {
      HdfsConfig hdfsConfig = m_config.getStorage().findHdfs(id);

      if (hdfsConfig != null) {
        String serverUri = hdfsConfig.getServerUri();

        if (serverUri != null && serverUri.trim().length() > 0) {
          return serverUri;
        }
      }
    }

    return null;
  }

  public Map<String, Domain> getLongConfigDomains() {
    if (m_config != null) {
      LongConfig longConfig = m_config.getConsumer().getLongConfig();

      if (longConfig != null) {
        return longConfig.getDomains();
      }
    }

    return Collections.emptyMap();
  }

  public int getLongSqlDefaultThreshold() {
    if (m_config != null) {
      LongConfig longConfig = m_config.getConsumer().getLongConfig();

      if (longConfig != null && longConfig.getDefaultUrlThreshold() != null) {
        return longConfig.getDefaultUrlThreshold();
      }
    }

    return 1000; // 1 second
  }

  public int getLongUrlDefaultThreshold() {
    if (m_config != null) {
      LongConfig longConfig = m_config.getConsumer().getLongConfig();

      if (longConfig != null && longConfig.getDefaultSqlThreshold() != null) {
        return longConfig.getDefaultSqlThreshold();
      }
    }

    return 1000; // 1 second
  }

  public ServerConfig getServerConfig() {
    return m_config;
  }

  public String getStorageLocalBaseDir() {
    if (m_config != null) {
      StorageConfig storage = m_config.getStorage();

      return storage.getLocalBaseDir();
    } else {
      return "target/bucket";
    }
  }

  @Override
  public void initialize() throws InitializationException {
    m_unusedTypes.add("Service");
    m_unusedTypes.add("PigeonService");
    m_unusedTypes.add("URL");
    m_unusedNames.add("piegonService:heartTaskService:heartBeat");
    m_unusedNames.add("piegonService:heartTaskService:heartBeat()");
    m_unusedNames.add("pigeon:HeartBeatService:null");
    m_unusedNames.add("");
    m_unusedNames.add("/");
    m_unusedNames.add("/index.jsp");
    m_unusedNames.add("/Heartbeat.html");
    m_unusedNames.add("/heartbeat.html");
    m_unusedNames.add("/heartbeat.jsp");
    m_unusedNames.add("/inspect/healthcheck");
    m_unusedNames.add("/MonitorServlet");
    m_unusedNames.add("/monitorServlet?client=f5");
  }

  public void initialize(File configFile) throws Exception {
    if (configFile != null && configFile.canRead()) {
      m_logger.info(String.format("Loading configuration file(%s) ...", configFile.getCanonicalPath()));

      String xml = Files.forIO().readFrom(configFile, "utf-8");
      ServerConfig config = DefaultSaxParser.parse(xml);

      // do validation
      config.accept(new ServerConfigValidator());
      m_config = config;
    } else {
      if (configFile != null) {
        m_logger.warn(String.format("Configuration file(%s) not found, IGNORED.", configFile.getCanonicalPath()));
      }

      ServerConfig config = new ServerConfig();

      // do validation
      config.accept(new ServerConfigValidator());
      m_config = config;
    }

    if (m_config.isLocalMode()) {
      m_logger.warn("CAT server is running in LOCAL mode! No HDFS or MySQL will be accessed!");
    }

  }

  public boolean isClientCall(String type) {
    return "PigeonCall".equals(type) || "Call".equals(type);
  }

  public boolean isHdfsOn() {
    return !m_config.getStorage().isHdfsDisabled();
  }

  public boolean isInitialized() {
    return m_config != null;
  }

  public boolean isJobMachine() {
    if (m_config != null) {
      return m_config.isJobMachine();
    } else {
      return true;
    }
  }

  public boolean isAlertMachine() {
    if (m_config != null) {
      String ip = NetworkInterfaceManager.INSTANCE.getLocalHostAddress();

      // TODO
      if ("10.1.6.128".equals(ip)) {
        return true;
      } else {
        return false;
      }
    } else {
      return false;
    }
  }

  public boolean isLocalMode() {
    if (m_config != null) {
      return m_config.isLocalMode();
    } else {
      return true;
    }
  }

  public boolean isServerService(String type) {
    return "PigeonService".equals(type) || "Service".equals(type);
  }

  private long toLong(String str, long defaultValue) {
    long value = 0;
    int len = str == null ? 0 : str.length();

    for (int i = 0; i < len; i++) {
      char ch = str.charAt(i);

      if (Character.isDigit(ch)) {
        value = value * 10L + (ch - '0');
      } else if (ch == 'm' || ch == 'M') {
        value *= 1024 * 1024L;
      } else if (ch == 'k' || ch == 'K') {
        value *= 1024L;
      }
    }

    if (value > 0) {
      return value;
    } else {
      return defaultValue;
    }
  }

  public boolean filterDomain(String domain) {
    return !domain.equals("PhoenixAgent") && !domain.equals("cat-agent") && !domain.equals(Constants.ALL);
  }

  public boolean validateDomain(String domain) {
    return !domain.equals(Constants.FRONT_END) && filterDomain(domain);
  }

  public boolean isOffline() {
    String address = NetworkInterfaceManager.INSTANCE.getLocalHostAddress();

    if (address.startsWith("192.168")) {
      return true;
    } else {
      return false;
    }
  }

}
TOP

Related Classes of com.dianping.cat.ServerConfigManager

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.