package com.wgcloud.service; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.wgcloud.entity.SnmpInfo; import com.wgcloud.entity.SnmpInterfaceInfo; import com.wgcloud.entity.SnmpState; import com.wgcloud.mapper.SnmpInfoMapper; import com.wgcloud.mapper.SnmpInterfaceInfoMapper; import com.wgcloud.util.HostUtil; import com.wgcloud.util.SnmpUtil; import com.wgcloud.util.UUIDUtil; 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.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; /** * @version v3.3 * @ClassName:SnmpInfoService.java * @author: http://www.wgstart.com * @date: 2022年4月10日 * @Description: SnmpInfoService.java * @Copyright: 2019-2021 wgcloud. All rights reserved. */ @Service public class SnmpInfoService { public PageInfo selectByParams(Map params, int currPage, int pageSize) throws Exception { PageHelper.startPage(currPage, pageSize); List list = snmpInfoMapper.selectByParams(params); PageInfo pageInfo = new PageInfo(list); return pageInfo; } public void save(SnmpInfo SnmpInfo) throws Exception { SnmpInfo.setId(UUIDUtil.getUUID()); SnmpInfo.setCreateTime(new Date()); //第一次保存,初始化一些数据 SnmpInfo.setState(StaticKeys.ON_STATE); SnmpInfo.setSnmpUnit(StaticKeys.BYTES_STR); SnmpInfo.setBytesSent("0"); SnmpInfo.setBytesRecv("0"); SnmpInfo.setSentAvg("0"); SnmpInfo.setRecvAvg("0"); SnmpInfo.setCpuPer("0"); SnmpInfo.setMemPer("0"); if (StringUtils.isEmpty(SnmpInfo.getHostname())) { SnmpInfo.setHostname(SnmpInfo.getHostname().trim()); } if (StringUtils.isEmpty(SnmpInfo.getRecvOID())) { SnmpInfo.setRecvOID(SnmpInfo.getRecvOID().trim()); } if (StringUtils.isEmpty(SnmpInfo.getSentOID())) { SnmpInfo.setSentOID(SnmpInfo.getSentOID().trim()); } if (StringUtils.isEmpty(SnmpInfo.getCpuPerOID())) { SnmpInfo.setCpuPerOID(SnmpInfo.getCpuPerOID().trim()); } if (StringUtils.isEmpty(SnmpInfo.getMemSizeOID())) { SnmpInfo.setMemSize(SnmpInfo.getMemSizeOID().trim()); } if (StringUtils.isEmpty(SnmpInfo.getMemTotalSizeOID())) { SnmpInfo.setMemTotalSizeOID(SnmpInfo.getMemTotalSizeOID().trim()); } snmpInfoMapper.save(SnmpInfo); } public int countByParams(Map params) throws Exception { return snmpInfoMapper.countByParams(params); } @Transactional public int deleteById(String[] id) throws Exception { return snmpInfoMapper.deleteById(id); } public void updateById(SnmpInfo snmpInfo) throws Exception { if (StringUtils.isEmpty(snmpInfo.getHostname())) { snmpInfo.setHostname(snmpInfo.getHostname().trim()); } snmpInfoMapper.updateById(snmpInfo); } public SnmpInfo selectById(String id) throws Exception { return snmpInfoMapper.selectById(id); } @Transactional public void updateRecord(List recordList) throws Exception { snmpInfoMapper.updateList(recordList); } public List selectAllByParams(Map params) throws Exception { return snmpInfoMapper.selectAllByParams(params); } /** * snmp设备扫描检测任务具体处理线程 * * @param snmpMap * @param h * @param date */ public void taskThreadHandler(Map snmpMap, SnmpInfo h, Date date) { SnmpInfo snmpInfo = null; List interfaceSnmpInfo = new ArrayList<>(); if (StaticKeys.ON_STATE.equals(snmpMap.get(h.getHostname()))) { snmpInfo = SnmpUtil.getAvgSnmpInfo(h); interfaceSnmpInfo = SnmpUtil.getInterfaceSnmpInfo(h); } h.setCreateTime(date); h.setState(StaticKeys.ON_STATE); if (null != snmpInfo) { h.setRecvAvg(snmpInfo.getRecvAvg()); h.setSentAvg(snmpInfo.getSentAvg()); h.setBytesSent(snmpInfo.getBytesSent()); h.setBytesRecv(snmpInfo.getBytesRecv()); h.setMemPer(snmpInfo.getMemPer()); h.setCpuPer(snmpInfo.getCpuPer()); } //设备下线后,不再更新时间 begin if (null == snmpInfo) { h.setState(StaticKeys.DOWN_STATE); h.setCreateTime(null); h.setRecvAvg(null); h.setSentAvg(null); h.setBytesSent(null); h.setBytesRecv(null); } //设备下线后,不再更新时间 end try { updateById(h); } catch (Exception e) { e.printStackTrace(); } if (StaticKeys.ON_STATE.equals(h.getState())) { SnmpState snmpState = new SnmpState(); snmpState.setRecvAvg(h.getRecvAvg()); snmpState.setSentAvg(h.getSentAvg()); snmpState.setCpuPer(h.getCpuPer()); snmpState.setMemPer(h.getMemPer()); snmpState.setSnmpInfoId(h.getId()); snmpState.setCreateTime(date); BatchData.SNMP_STATE_LIST.add(snmpState); //新增接口詳情 if(interfaceSnmpInfo.size() > 0){ List interfaceInfos = snmpInterfaceInfoMapper.selectByHostName(h.getHostname()); if(interfaceInfos.size() > 0){ snmpInterfaceInfoMapper.deleteByHostName(h.getHostname()); snmpInterfaceInfoMapper.insertList(interfaceSnmpInfo); }else { snmpInterfaceInfoMapper.insertList(interfaceSnmpInfo); } } } if (StaticKeys.DOWN_STATE.equals(h.getState())) { //返回错误处理 WarnMailUtil.sendSnmpInfo(h, true); } else { //返回成功处理 if (null != WarnPools.MEM_WARN_MAP.get(h.getId())) { WarnMailUtil.sendSnmpInfo(h, false); } } } /** * 保存操作日志 * * @param request 获取当前登录用户 * @param action 操作标识 */ public void saveLog(HttpServletRequest request, String action, SnmpInfo snmpInfo) { if (null == snmpInfo) { return; } logInfoService.save(HostUtil.getAccountByRequest(request).getAccount() + action + "snmp设备监测信息:" + snmpInfo.getHostname(), "snmp设备:" + snmpInfo.getRemark(), StaticKeys.LOG_XTCZ); } @Autowired private SnmpInfoMapper snmpInfoMapper; @Autowired private LogInfoService logInfoService; @Autowired private SnmpInterfaceInfoMapper snmpInterfaceInfoMapper; }