付延余
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
package com.wgcloud.controller;
 
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.wgcloud.entity.FileWarnInfo;
import com.wgcloud.entity.FileWarnState;
import com.wgcloud.service.*;
import com.wgcloud.util.ThreadPoolUtil;
import com.wgcloud.util.TokenUtils;
import com.wgcloud.util.msg.WarnMailUtil;
import com.wgcloud.util.staticvar.BatchData;
import com.wgcloud.util.staticvar.StaticKeys;
import org.apache.commons.lang3.StringUtils;
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.Date;
import java.util.Iterator;
 
/**
 * @version v3.3
 * @ClassName:AgentLogGoController.java
 * @author: http://www.wgstart.com
 * @date: 2021年1月16日
 * @Description: 日志监控处理,默认每10分钟提交一次
 * @Copyright: 2019-2021 wgcloud. All rights reserved.
 */
@Controller
@RequestMapping("/agentLogGo")
public class AgentLogGoController {
 
 
    private static final Logger logger = LoggerFactory.getLogger(AgentLogGoController.class);
 
 
    @Resource
    private LogInfoService logInfoService;
    @Resource
    private SystemInfoService systemInfoService;
    @Autowired
    private DockerInfoService dockerInfoService;
    @Autowired
    private FileWarnInfoService fileWarnInfoService;
    @Autowired
    private AppInfoService appInfoService;
    @Autowired
    private PortInfoService portInfoService;
    @Autowired
    private TokenUtils tokenUtils;
 
    @ResponseBody
    @RequestMapping("/minTask")
    public JSONObject minTask(@RequestBody String paramBean) {
        JSONObject agentJsonObject = (JSONObject) JSONUtil.parse(paramBean);
        logger.debug("agent上报日志监控数据-------------" + agentJsonObject.toString());
        JSONObject resultJson = new JSONObject();
        if (!tokenUtils.checkAgentToken(agentJsonObject)) {
            logger.error(StaticKeys.TOKEN_ERROR);
            resultJson.set("result", StaticKeys.TOKEN_ERROR);
            return resultJson;
        }
        Date nowtime = new Date();
 
        try {
            JSONObject fileWarnInfosJson = agentJsonObject.getJSONObject("fileWarnInfos");
            if (fileWarnInfosJson == null) {
                logger.error("fileWarnList is null");
                resultJson.set("result", "error:fileWarnList is null");
                return resultJson;
            }
            Iterator iter = fileWarnInfosJson.keySet().iterator();
            while (iter.hasNext()) {
                String id = (String) iter.next();
                JSONObject jsonObject = fileWarnInfosJson.getJSONObject(id);
                String filePath = jsonObject.getStr("filePath");//日志文件路径
                String fileSize = jsonObject.getStr("fileSize");//日志文件当前大小
                String warnRows = jsonObject.getStr("warnRows");//本次读取日志的行数
                String warnContent = jsonObject.getStr("warnContent");//日志告警内容
 
                FileWarnState state = new FileWarnState();
                state.setCreateTime(nowtime);
                state.setFilePath(filePath);
                state.setFileWarnId(id);
                state.setWarContent(warnContent);
                if (!StringUtils.isEmpty(warnContent)) {
                    BatchData.FILEWARN_STATE_LIST.add(state);
                }
 
                FileWarnInfo info = new FileWarnInfo();
                info.setId(id);
                info.setCreateTime(nowtime);
                info.setFileSize(fileSize);
                info.setWarnRows(warnRows);
                BatchData.FILEWARN_INFO_LIST.add(info);
 
                //日志有错误信息,发邮件 begin
                if (!StringUtils.isEmpty(warnContent)) {
                    Runnable runnable = () -> {
                        try {
                            FileWarnInfo fileWarnInfo = fileWarnInfoService.selectById(info.getId());
                            if (fileWarnInfo != null) {
                                WarnMailUtil.sendFileWarnDown(fileWarnInfo, filePath, warnContent, true);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
 
                    };
                    ThreadPoolUtil.executor.execute(runnable);
                }
                //日志有错误信息,发邮件 end
            }
 
            resultJson.set("result", "success");
        } catch (Exception e) {
            logger.error("解析日志监控上报数据错误", e);
            resultJson.set("result", "error:" + e.toString());
        }
        return resultJson;
    }
 
 
}