package com.sohu.cache.web.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.sohu.cache.entity.AppUser;
import com.sohu.cache.entity.SystemConfig;
import com.sohu.cache.web.enums.SuccessEnum;
import com.sohu.cache.web.service.ConfigService;
import com.sohu.cache.web.util.AppEmailUtil;
/**
* cachecloud配置管理
*
* @author leifu
* @Date 2016年5月23日
* @Time 上午10:31:16
*/
@Controller
@RequestMapping("manage/config")
public class ConfigManageController extends BaseController {
@Resource(name = "configService")
private ConfigService configService;
@Resource(name = "appEmailUtil")
private AppEmailUtil appEmailUtil;
/**
* 初始化配置
*
* @param request
* @param response
* @param model
* @return
*/
@RequestMapping(value = "/init")
public ModelAndView init(HttpServletRequest request, HttpServletResponse response, Model model) {
List<SystemConfig> configList = configService.getConfigList(1);
model.addAttribute("configList", configList);
model.addAttribute("success", request.getParameter("success"));
model.addAttribute("configActive", SuccessEnum.SUCCESS.value());
return new ModelAndView("manage/config/init");
}
/**
* 修改配置
*
* @param request
* @param response
* @param model
* @return
*/
@RequestMapping(value = "/update")
public ModelAndView update(HttpServletRequest request, HttpServletResponse response, Model model) {
AppUser appUser = getUserInfo(request);
logger.warn("user {} want to change config!", appUser.getName());
List<SystemConfig> oldConfigList = configService.getConfigList(1);
SuccessEnum successEnum;
Map<String, String> configMap = new HashMap<String, String>();
try {
Map<String, String[]> paramMap = request.getParameterMap();
for (Entry<String, String[]> entry : paramMap.entrySet()) {
String key = entry.getKey();
String value = entry.getValue()[0];
if (StringUtils.isNotBlank(key)) {
configMap.put(key, value);
}
}
if (MapUtils.isEmpty(configMap)) {
logger.error("params {} may be empty!!", paramMap);
}
successEnum = configService.updateConfig(configMap);
if (successEnum.equals(SuccessEnum.SUCCESS)) {
configService.reloadSystemConfig();
}
} catch (Exception e) {
successEnum = SuccessEnum.FAIL;
logger.error(e.getMessage(), e);
}
Map<String, String> systemDifConfigMap = getDifConfigMap(oldConfigList, configMap);
appEmailUtil.sendSystemConfigDifEmail(appUser, systemDifConfigMap, successEnum);
logger.warn("user {} change config result is {}!", appUser.getName(), successEnum.value());
return new ModelAndView("redirect:/manage/config/init?success=" + successEnum.value());
}
private Map<String, String> getDifConfigMap(List<SystemConfig> oldConfigList, Map<String, String> configMap) {
Map<String, String> systemDifConfigMap = new HashMap<String, String>();
for (SystemConfig systemConfig : oldConfigList) {
String key = systemConfig.getConfigKey();
String oldValue = systemConfig.getConfigValue();
String newValue = configMap.get(key);
if (newValue != null && !oldValue.equals(newValue)) {
systemDifConfigMap.put(systemConfig.getInfo(), String.format("old value: %s, new value: %s", oldValue, newValue));
}
}
return systemDifConfigMap;
}
}