Package com.dianping.cat.system.page.config

Source Code of com.dianping.cat.system.page.config.Handler

package com.dianping.cat.system.page.config;

import java.io.IOException;
import java.net.URLDecoder;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;

import org.unidal.lookup.annotation.Inject;
import org.unidal.web.mvc.PageHandler;
import org.unidal.web.mvc.annotation.InboundActionMeta;
import org.unidal.web.mvc.annotation.OutboundActionMeta;
import org.unidal.web.mvc.annotation.PayloadMeta;
import org.unidal.web.mvc.annotation.PreInboundActionMeta;

import com.dianping.cat.Cat;
import com.dianping.cat.home.dal.report.ConfigModification;
import com.dianping.cat.home.dal.report.ConfigModificationDao;
import com.dianping.cat.report.page.JsonBuilder;
import com.dianping.cat.system.SystemPage;
import com.dianping.cat.system.page.config.process.AlertConfigProcessor;
import com.dianping.cat.system.page.config.process.AppConfigProcessor;
import com.dianping.cat.system.page.config.process.ExceptionConfigProcessor;
import com.dianping.cat.system.page.config.process.GlobalConfigProcessor;
import com.dianping.cat.system.page.config.process.HeartbeatConfigProcessor;
import com.dianping.cat.system.page.config.process.MetricConfigProcessor;
import com.dianping.cat.system.page.config.process.NetworkConfigProcessor;
import com.dianping.cat.system.page.config.process.PatternConfigProcessor;
import com.dianping.cat.system.page.config.process.SystemConfigProcessor;
import com.dianping.cat.system.page.config.process.TopologyConfigProcessor;

public class Handler implements PageHandler<Context> {
  @Inject
  private JspViewer m_jspViewer;

  @Inject
  private GlobalConfigProcessor m_globalConfigProcessor;

  @Inject
  private PatternConfigProcessor m_patternConfigProcessor;

  @Inject
  private TopologyConfigProcessor m_topologyConfigProcessor;

  @Inject
  private MetricConfigProcessor m_metricConfigProcessor;

  @Inject
  private ExceptionConfigProcessor m_exceptionConfigProcessor;

  @Inject
  private NetworkConfigProcessor m_networkConfigProcessor;

  @Inject
  private SystemConfigProcessor m_systemConfigProcessor;

  @Inject
  private HeartbeatConfigProcessor m_heartbeatConfigProcessor;

  @Inject
  private AppConfigProcessor m_appConfigProcessor;

  @Inject
  private AlertConfigProcessor m_alertConfigProcessor;

  @Inject
  private ConfigModificationDao m_configModificationDao;

  @Override
  @PreInboundActionMeta("login")
  @PayloadMeta(Payload.class)
  @InboundActionMeta(name = "config")
  public void handleInbound(Context ctx) throws ServletException, IOException {
    // display only, no action here
  }

  @Override
  @OutboundActionMeta(name = "config")
  public void handleOutbound(Context ctx) throws ServletException, IOException {
    Model model = new Model(ctx);
    Payload payload = ctx.getPayload();

    model.setPage(SystemPage.CONFIG);
    Action action = payload.getAction();

    storeModifyInfo(ctx, payload);
    model.setAction(action);
    switch (action) {
    case PROJECT_ALL:
    case PROJECT_UPDATE:
    case PROJECT_UPDATE_SUBMIT:
    case PROJECT_DELETE:
    case DOMAIN_GROUP_CONFIG_UPDATE:
    case BUG_CONFIG_UPDATE:
    case THIRD_PARTY_CONFIG_UPDATE:
    case ROUTER_CONFIG_UPDATE:
      m_globalConfigProcessor.process(action, payload, model);
      break;

    case AGGREGATION_ALL:
    case AGGREGATION_UPDATE:
    case AGGREGATION_UPDATE_SUBMIT:
    case AGGREGATION_DELETE:
    case URL_PATTERN_ALL:
    case URL_PATTERN_UPDATE:
    case URL_PATTERN_UPDATE_SUBMIT:
    case URL_PATTERN_DELETE:
    case WEB_RULE:
    case WEB_RULE_ADD_OR_UPDATE:
    case WEB_RULE_ADD_OR_UPDATE_SUBMIT:
    case WEB_RULE_DELETE:
      m_patternConfigProcessor.processPatternConfig(action, payload, model);
      break;

    case TOPOLOGY_GRAPH_NODE_CONFIG_LIST:
    case TOPOLOGY_GRAPH_NODE_CONFIG_ADD_OR_UPDATE:
    case TOPOLOGY_GRAPH_NODE_CONFIG_ADD_OR_UPDATE_SUBMIT:
    case TOPOLOGY_GRAPH_NODE_CONFIG_DELETE:
    case TOPOLOGY_GRAPH_EDGE_CONFIG_LIST:
    case TOPOLOGY_GRAPH_EDGE_CONFIG_ADD_OR_UPDATE:
    case TOPOLOGY_GRAPH_EDGE_CONFIG_ADD_OR_UPDATE_SUBMIT:
    case TOPOLOGY_GRAPH_EDGE_CONFIG_DELETE:
    case TOPOLOGY_GRAPH_PRODUCT_LINE:
    case TOPOLOGY_GRAPH_PRODUCT_LINE_ADD_OR_UPDATE:
    case TOPOLOGY_GRAPH_PRODUCT_LINE_DELETE:
    case TOPOLOGY_GRAPH_PRODUCT_LINE_ADD_OR_UPDATE_SUBMIT:
      m_topologyConfigProcessor.process(action, payload, model);
      break;

    case METRIC_CONFIG_ADD_OR_UPDATE:
    case METRIC_CONFIG_ADD_OR_UPDATE_SUBMIT:
    case METRIC_RULE_ADD_OR_UPDATE:
    case METRIC_RULE_ADD_OR_UPDATE_SUBMIT:
    case METRIC_CONFIG_LIST:
    case METRIC_CONFIG_DELETE:
    case METRIC_RULE_CONFIG_UPDATE:
      m_metricConfigProcessor.process(action, payload, model);
      break;

    case EXCEPTION:
    case EXCEPTION_THRESHOLD_DELETE:
    case EXCEPTION_THRESHOLD_UPDATE:
    case EXCEPTION_THRESHOLD_ADD:
    case EXCEPTION_THRESHOLD_UPDATE_SUBMIT:
    case EXCEPTION_EXCLUDE_DELETE:
    case EXCEPTION_EXCLUDE_UPDATE:
    case EXCEPTION_EXCLUDE_ADD:
    case EXCEPTION_EXCLUDE_UPDATE_SUBMIT:
      m_exceptionConfigProcessor.process(action, payload, model);
      break;

    case NETWORK_RULE_CONFIG_LIST:
    case NETWORK_RULE_ADD_OR_UPDATE:
    case NETWORK_RULE_ADD_OR_UPDATE_SUBMIT:
    case NETWORK_RULE_DELETE:
    case NET_GRAPH_CONFIG_UPDATE:
      m_networkConfigProcessor.process(action, payload, model);
      break;

    case SYSTEM_RULE_CONFIG_LIST:
    case SYSTEM_RULE_ADD_OR_UPDATE:
    case SYSTEM_RULE_ADD_OR_UPDATE_SUBMIT:
    case SYSTEM_RULE_DELETE:
      m_systemConfigProcessor.process(action, payload, model);
      break;

    case HEARTBEAT_RULE_CONFIG_LIST:
    case HEARTBEAT_RULE_ADD_OR_UPDATE:
    case HEARTBEAT_RULE_ADD_OR_UPDATE_SUBMIT:
    case HEARTBEAT_RULE_DELETE:
      m_heartbeatConfigProcessor.process(action, payload, model);
      break;

    case APP_LIST:
    case APP_UPDATE:
    case APP_SUBMIT:
    case APP_PAGE_DELETE:
    case APP_CONFIG_UPDATE:
    case APP_RULE:
    case APP_RULE_ADD_OR_UPDATE:
    case APP_RULE_ADD_OR_UPDATE_SUBMIT:
    case APP_RULE_DELETE:
    case APP_COMPARISON_CONFIG_UPDATE:
      m_appConfigProcessor.process(action, payload, model);
      break;

    case ALERT_DEFAULT_RECEIVERS:
    case ALERT_POLICY:
      m_alertConfigProcessor.process(action, payload, model);
      break;
    }
    m_jspViewer.view(ctx, model);
  }

  public void store(String userName, String accountName, Payload payload) {
    ConfigModification modification = m_configModificationDao.createLocal();

    modification.setUserName(userName);
    modification.setAccountName(accountName);
    modification.setActionName(payload.getAction().getName());
    modification.setDate(new Date());
    modification.setArgument(new JsonBuilder().toJson(payload));

    try {
      m_configModificationDao.insert(modification);
    } catch (Exception ex) {
      Cat.logError(ex);
    }
  }

  private void storeModifyInfo(Context ctx, Payload payload) {
    Cookie cookie = ctx.getCookie("ct");
    Action action = payload.getAction();
    String lowName = action.getName().toLowerCase();

    if (lowName.indexOf("update") >= 0 || lowName.indexOf("submit") >= 0 || lowName.indexOf("delete") >= 0) {
      if (cookie != null) {
        String cookieValue = cookie.getValue();

        try {
          String[] values = cookieValue.split("\\|");
          String userName = values[0];
          String account = values[1];

          if (userName.startsWith("\"")) {
            userName = userName.substring(1, userName.length() - 1);
          }
          userName = URLDecoder.decode(userName, "UTF-8");

          store(userName, account, payload);
        } catch (Exception ex) {
          Cat.logError("store cookie fail:" + cookieValue, new RuntimeException());
        }
      } else {
        Cat.logError("cannot get cookie info", new RuntimeException());
      }
    }
  }

}
TOP

Related Classes of com.dianping.cat.system.page.config.Handler

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.