/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/

package com.cesgroup.cesmonitor.ws;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.cesgroup.cesmonitor.bean.Cpu;
import com.cesgroup.cesmonitor.bean.Disk;
import com.cesgroup.cesmonitor.bean.HostByGroup;
import com.cesgroup.cesmonitor.bean.Memory;
import com.cesgroup.cesmonitor.bean.OneHostConfig;
import com.cesgroup.cesmonitor.bean.PriorityCount;
import com.cesgroup.cesmonitor.bean.PriorityDetail;
import com.cesgroup.cesmonitor.bean.ResponseTime;
import com.cesgroup.cesmonitor.service.FormViewService;
import com.cesgroup.cesmonitor.service.IdentityService;

/**
 * 统计报表WEB服务控制器
 *
 * @author zhang.erwei
 * @version 1.0.0 2017年5月24日
 */
@Controller
@RequestMapping(value = "/ws/formview")
public class FormviewServiceController {

    @Autowired
    FormViewService formViewService;

    @Autowired
    protected IdentityService identityService;

    /**
     * 这个星期的每天异常数（这里不针对月的概念）
     *
     * @return 返回这个星期的每天异常数（这里不针对月的概念）
     */
    @RequestMapping(value = "currentWeekExceptionData")
    @ResponseBody
    public Map<Integer, Integer> currentWeekExceptionData() {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.currentWeekExceptionData();
    }

    /**
     * 上个星期的每天异常数（这里不针对月的概念）
     *
     * @return 返回上个星期的每天异常数（这里不针对月的概念）
     */
    @RequestMapping(value = "lastWeekExceptionData")
    @ResponseBody
    public Map<Integer, Integer> lastWeekExceptionData() {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.lastWeekExceptionData();
    }

    /**
     * @return 返回当月每天异常数
     */
    @RequestMapping(value = "currentMonthExceptionData")
    @ResponseBody
    public Map<Integer, Integer> currentMonthExceptionData() {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.currentMonthExceptionData();
    }

    /**
     *
     * @return 返回上个月每天异常数
     */
    @RequestMapping(value = "lastMonthExceptionData")
    @ResponseBody
    public Map<Integer, Integer> lastMonthExceptionData() {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.lastMonthExceptionData();
    }

    /**
     * TOPN 响应时间接口
     *
     * @param order
     *            排序（DESC || ASC）
     * @param limit
     *            取几位
     * @return 所有主机响应时间排行
     */
    @RequestMapping(value = "allHostsResponseTime")
    @ResponseBody
    public List<ResponseTime> allHostsResponseTime(String order, Integer limit) {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.allHostsResponseTime(order, limit);
    }

    /**
     * TOPN 磁盘使用率接口
     *
     * @param order
     *            排序（DESC || ASC）
     * @param limit
     *            取几位
     * @return 所有主机磁盘利用率
     */
    @RequestMapping(value = "allHostsDisk")
    @ResponseBody
    public List<Disk> allHostsDisk(String order, Integer limit) {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.allHostsDisk(order, limit);
    }

    /**
     * TOPN CPU使用率接口
     *
     * @param order
     *            排序（DESC || ASC）
     * @param limit
     *            取几位
     * @return 所有主机CPU利用率
     */
    @RequestMapping(value = "allHostsCpu")
    @ResponseBody
    public List<Cpu> allHostsCpu(String order, Integer limit) {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.allHostsCpu(order, limit);
    }

    /**
     * TOPN 内存使用率接口
     *
     * @param order
     *            排序（DESC || ASC）
     * @param limit
     *            取几位
     * @return 所有主机内存利用率
     */
    @RequestMapping(value = "allHostsMemory")
    @ResponseBody
    public List<Memory> allHostsMemory(String order, Integer limit) {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.allHostsMemory(order, limit);
    }

    /**
     * 当前关注主机信息接口
     *
     * @param hosts
     *            前端页面保存的ID
     * @return 单个主机的查询，返回主机CPU，磁盘，内存，可用性等信息
     */
    @RequestMapping(value = "currentFocus")
    @ResponseBody
    public Map<Long, OneHostConfig> currentFocus(String hosts) {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.currentFocus(hosts);
    }

    /**
     * 查找某个主机组下面的主机
     *
     * @param groupName
     *            组名
     * @param hostIp
     *            主机的名字
     * @return 在当前关注页面弹出框中根据组名查主机
     */
    @RequestMapping(value = "findHostByGroup")
    @ResponseBody
    public List<HostByGroup> findHostByGroup(String groupName, String hostIp) {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.findHostByGroup(groupName, hostIp);
    }

    /**
     * 根据等级查找已知主机组下的告警数
     *
     * @param name
     *            主机组名
     * @return 这个组下的异常分布情况
     */
    @RequestMapping(value = "findCountByPriority")
    @ResponseBody
    public List<PriorityCount> findCountByPriority(String name) {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.findCountByPriority(name);
    }

    /**
     * 根据等级查找已知主机组下的告警信息
     *
     * @param priority
     *            等级
     * @param name
     *            主机组的名字
     * @return 根据饼状图点击查出来具体哪个主机组下哪个告警等级的的触发器异常信息
     */
    @RequestMapping(value = "findMessageByPriority")
    @ResponseBody
    public List<PriorityDetail> findMessageByPriority(Integer priority, String name) {
        IdentifyServiceController.checkLogin(identityService);
        return formViewService.findMessageByPriority(priority, name);
    }

}
