package com.sohu.cache.web.controller;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sohu.cache.constant.AppStatusEnum;
import com.sohu.cache.entity.*;
import com.sohu.cache.machine.MachineCenter;
import com.sohu.cache.stats.app.AppStatsCenter;
import com.sohu.cache.stats.instance.InstanceStatsCenter;
import com.sohu.cache.web.vo.AppDetailVO;
import org.apache.commons.lang.math.NumberUtils;
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.web.enums.SuccessEnum;
/**
* 全局统计
*
* @author leifu
* @Time 2014年10月14日
*/
@Controller
@RequestMapping("manage/total")
public class TotalManageController extends BaseController {
@Resource(name = "appStatsCenter")
private AppStatsCenter appStatsCenter;
@Resource
private MachineCenter machineCenter;
@Resource
private InstanceStatsCenter instanceStatsCenter;
@RequestMapping(value = "/list")
public ModelAndView doTotalList(HttpServletRequest request,
HttpServletResponse response, Model model) {
AppUser currentUser = getUserInfo(request);
List<AppDesc> apps = appService.getAppDescList(currentUser, new AppSearch());
List<AppDetailVO> appDetailList = new ArrayList<AppDetailVO>();
long totalApplyMem = 0;
long totalUsedMem = 0;
long totalApps = 0;
long totalRunningApps = 0;
if (apps != null && apps.size() > 0) {
for (AppDesc appDesc : apps) {
AppDetailVO appDetail = appStatsCenter.getAppDetail(appDesc.getAppId());
appDetailList.add(appDetail);
totalApplyMem += appDetail.getMem();
totalUsedMem += appDetail.getMemUsePercent() * appDetail.getMem() / 100.0;
if (appDesc.getStatus() == AppStatusEnum.STATUS_PUBLISHED.getStatus()) {
totalRunningApps++;
}
totalApps++;
}
}
long totalMachineMem = 0;
long totalFreeMachineMem = 0;
List<MachineStats> allMachineStats = machineCenter.getAllMachineStats();
for (MachineStats machineStats : allMachineStats) {
totalMachineMem += NumberUtils.toLong(machineStats.getMemoryTotal(), 0l);
totalFreeMachineMem += NumberUtils.toLong(machineStats.getMemoryFree(), 0l);
}
long totalInstanceMem = 0;
long totalUseInstanceMem = 0;
List<InstanceStats> instanceStats = instanceStatsCenter.getInstanceStats();
for (InstanceStats instanceStat : instanceStats) {
totalInstanceMem += instanceStat.getMaxMemory();
totalUseInstanceMem += instanceStat.getUsedMemory();
}
model.addAttribute("totalApps", totalApps);
model.addAttribute("totalApplyMem", totalApplyMem);
model.addAttribute("totalUsedMem", totalUsedMem);
model.addAttribute("totalRunningApps", totalRunningApps);
model.addAttribute("totalMachineMem", totalMachineMem);
model.addAttribute("totalFreeMachineMem", totalFreeMachineMem);
model.addAttribute("totalInstanceMem", totalInstanceMem);
model.addAttribute("totalUseInstanceMem", totalUseInstanceMem);
model.addAttribute("apps", apps);
model.addAttribute("appDetailList", appDetailList);
model.addAttribute("list", apps);
model.addAttribute("totalActive", SuccessEnum.SUCCESS.value());
return new ModelAndView("manage/total/list");
}
}