付延余
2022-12-16 f0f8ee8c4a945adbc742d9bab69382b28ad311fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package com.wgcloud.controller;
 
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.wgcloud.config.CommonConfig;
import com.wgcloud.entity.DbInfo;
import com.wgcloud.entity.DbTable;
import com.wgcloud.entity.DbTableCount;
import com.wgcloud.service.DbInfoService;
import com.wgcloud.service.DbTableService;
import com.wgcloud.service.LogInfoService;
import com.wgcloud.util.ResDataUtils;
import com.wgcloud.util.ThreadPoolUtil;
import com.wgcloud.util.TokenUtils;
import com.wgcloud.util.msg.WarnMailUtil;
import com.wgcloud.util.msg.WarnPools;
import com.wgcloud.util.staticvar.BatchData;
import com.wgcloud.util.staticvar.StaticKeys;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
import javax.annotation.Resource;
import java.util.*;
 
/**
 * @version v3.3
 * @ClassName:AgentDbTableGoController.java
 * @author: http://www.wgstart.com
 * @date: 2022年9月16日
 * @Description: server-backup监控数据表提交处理,默认每60分钟提交一次
 * @Copyright: 2019-2022 wgcloud. All rights reserved.
 */
@Controller
@RequestMapping("/agentDbTableGo")
public class AgentDbTableGoController {
 
 
    private static final Logger logger = LoggerFactory.getLogger(AgentDbTableGoController.class);
 
 
    @Resource
    private LogInfoService logInfoService;
    @Autowired
    private DbInfoService dbInfoService;
    @Autowired
    private DbTableService dbTableService;
    @Autowired
    private TokenUtils tokenUtils;
    @Autowired
    private CommonConfig commonConfig;
 
    @ResponseBody
    @RequestMapping("/minTask")
    public String minTask(@RequestBody String paramBean) {
        JSONObject agentJsonObject = (JSONObject) JSONUtil.parse(paramBean);
        logger.debug("server-backup监控数据表上报数据-------------" + agentJsonObject.toString());
        if (!tokenUtils.checkAgentToken(agentJsonObject)) {
            logger.error(StaticKeys.TOKEN_ERROR);
            return ResDataUtils.resetErrorJson(StaticKeys.TOKEN_ERROR);
        }
        Date nowtime = new Date();
 
        try {
            //数据源状态数据
            JSONArray dbInfosJsonArr = agentJsonObject.getJSONArray("dbInfosUpdate");
            //数据表状态数据
            JSONArray dbTablesJsonArr = agentJsonObject.getJSONArray("dbTablesUpdate");
            if (dbInfosJsonArr == null) {
                logger.error("dbInfosUpdate is null");
                return ResDataUtils.resetErrorJson("dbInfosUpdate is null");
            }
            //处理数据源状态数据
            List<DbInfo> dbInfoList = JSONUtil.toList(dbInfosJsonArr, DbInfo.class);
            for (DbInfo dbInfo : dbInfoList) {
                //之前存贮的数据源旧数据
                DbInfo dbInfoSaved = dbInfoService.selectById(dbInfo.getId());
                //只有数据源在线时候,才更新时间,连接失败就不更新时间
                if (StaticKeys.ON_STATE.equals(dbInfo.getDbState())) {
                    dbInfo.setCreateTime(nowtime);
                    if (null != WarnPools.MEM_WARN_MAP && null != WarnPools.MEM_WARN_MAP.get(dbInfo.getId())) {
                        Runnable runnable = () -> {
                            WarnMailUtil.sendDbDown(dbInfoSaved, false);
                        };
                        ThreadPoolUtil.executor.execute(runnable);
                    }
                } else {
                    Runnable runnable = () -> {
                        WarnMailUtil.sendDbDown(dbInfoSaved, true);
                    };
                    ThreadPoolUtil.executor.execute(runnable);
                }
                dbInfoService.updateById(dbInfo);
            }
 
            //处理数据表上报数据
            if (null != dbTablesJsonArr) {
                List<DbTable> dbTableList = JSONUtil.toList(dbTablesJsonArr, DbTable.class);
                for (DbTable dbTable : dbTableList) {
                    dbTable.setCreateTime(nowtime);
 
                    DbTableCount dbTableCount = new DbTableCount();
                    dbTableCount.setCreateTime(nowtime);
                    dbTableCount.setDbTableId(dbTable.getId());
                    dbTableCount.setTableCount(dbTable.getTableCount());
                    BatchData.DBTABLE_COUNT_LIST.add(dbTableCount);
                }
                Map<String, Object> params = new HashMap<>();
                List<DbInfo> dbInfos = new ArrayList<>();
                if (StaticKeys.TRUE_VAL.equals(commonConfig.getUserInfoManage())) {
                    dbInfos = dbInfoService.selectAllByParams(params);
                }
                dbTableService.warnCheckExp(dbTableList, dbInfos);
                dbTableService.updateRecord(dbTableList);
            }
 
        } catch (Exception e) {
            logger.error("解析server-backup监控数据表上报数据错误", e);
            return ResDataUtils.resetErrorJson(e.toString());
        }
        return ResDataUtils.resetSuccessJson(null);
    }
 
 
}