package com.wgcloud.service; import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.TypeReference; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.wgcloud.entity.OspfErrorLog; import com.wgcloud.entity.OspfInfo; import com.wgcloud.entity.SnmpInfo; import com.wgcloud.entity.vo.OspfNeighbor; import com.wgcloud.mapper.OspfErrorLogMapper; import com.wgcloud.mapper.OspfInfoMapper; import com.wgcloud.util.DateUtil; import com.wgcloud.util.OspfNeighborUtil; import com.wgcloud.util.UUIDUtil; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.alibaba.fastjson.JSON; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @version v3.3 * @ClassName:OspfInfoService.java * @author: http://www.wgstart.com * @date: 2021年1月16日 * @Description: OspfInfoService.java * @Copyright: 2019-2021 wgcloud. All rights reserved. */ @Service public class OspfInfoService { @Autowired private RouterConnectionService routerConnectionService; @Autowired private OspfNeighborUtil ospfNeighborUtil; @Autowired private OspfErrorLogMapper errorLogMapper; @Value("${osfService.host}") private String remoteHost; @Value("${osfService.port}") private String remotePort; private static final Logger logger = LoggerFactory.getLogger(OspfInfoService.class); public PageInfo selectByParams(Map params, int currPage, int pageSize) throws Exception { PageHelper.startPage(currPage, pageSize); List list = OspfInfoMapper.selectByParams(params); PageInfo pageInfo = new PageInfo(list); return pageInfo; } public void saveRecord(List recordList) throws Exception { if (recordList.size() < 1) { return; } Map map = new HashMap(); for (OspfInfo as : recordList) { as.setId(UUIDUtil.getUUID()); as.setCreateTime(DateUtil.getNowTime()); } OspfInfoMapper.insertList(recordList); } public void save(OspfInfo ospfInfo) { ospfInfo.setId(UUIDUtil.getUUID()); ospfInfo.setCreateTime(DateUtil.getNowTime()); try { OspfInfoMapper.save(ospfInfo); } catch (Exception e) { logger.error("保存日志信息异常:", e); } } public void updateById(OspfInfo ospfInfo) throws Exception { if (StringUtils.isEmpty(ospfInfo.getHostname())) { ospfInfo.setHostname(ospfInfo.getHostname().trim()); } OspfInfoMapper.updateById(ospfInfo); } /** * 获取详细的OSPF邻居信息 */ public void getDetailedOspfNeighborInfo() { List ospfInfos = OspfInfoMapper.selectAllByParams(null); for (OspfInfo ospfInfo : ospfInfos) { String command = "display ospf peer "+ospfInfo.getHostname(); String result = routerConnectionService.executeCommand(command,ospfInfo.getMonitorUsername(),ospfInfo.getMonitorPassword(),ospfInfo.getMonitorIp()); System.out.println("获取到的邻居信息为:"+result); if(StringUtils.isNotBlank(result)){ List neighbors = ospfNeighborUtil.analysisStr(result); if(neighbors != null || neighbors.size()>0){ OspfNeighbor ospfNeighbor = neighbors.get(0); String state = ospfNeighbor.getState(); if (state.contains("Down") || state.contains("Init")) { ospfInfo.setState("1"); OspfInfoMapper.updateById(ospfInfo); HashMap hashMap = new HashMap<>(); hashMap.put("state","1"); hashMap.put("hostname",ospfInfo.getHostname()); List ospfErrorLogs = errorLogMapper.selectAllByParams(hashMap); if(ospfErrorLogs==null||ospfErrorLogs.size()==0){ OspfErrorLog ospfErrorLog = new OspfErrorLog(); ospfErrorLog.setInfoContent(ospfInfo.getInfoContent()); ospfErrorLog.setHostname(ospfInfo.getHostname()); ospfErrorLog.setState("1"); try { errorLogMapper.save(ospfErrorLog); }catch (Exception e){ e.printStackTrace(); } } }else { ospfInfo.setState("0"); OspfInfoMapper.updateById(ospfInfo); } } }else { ospfInfo.setState("1"); OspfInfoMapper.updateById(ospfInfo); } } } public void getRouterStatus() { List ospfInfos = OspfInfoMapper.selectAllByParams(null); for (OspfInfo ospfInfo : ospfInfos) { String command = "display ospf peer "+ospfInfo.getHostname(); Map map = new HashMap<>(); map.put("command",command); map.put("username",ospfInfo.getMonitorUsername()); map.put("password",ospfInfo.getMonitorPassword()); map.put("monitorIp",ospfInfo.getMonitorIp()); String str = JSON.toJSONString(map); System.out.println(str); try { String url = "http://"+remoteHost+":"+remotePort+"/api/connect/getResult"; String responseBody = HttpRequest.post(url) .timeout(5000) .body(str) .execute() .body(); System.out.println(responseBody); if(responseBody.equals("1")){ HashMap hashMap = new HashMap<>(); hashMap.put("state","1"); hashMap.put("hostname",ospfInfo.getHostname()); List ospfErrorLogs = errorLogMapper.selectAllByParams(hashMap); if(ospfErrorLogs==null||ospfErrorLogs.size()==0){ OspfErrorLog ospfErrorLog = new OspfErrorLog(); ospfErrorLog.setInfoContent(ospfInfo.getInfoContent()); ospfErrorLog.setHostname(ospfInfo.getHostname()); ospfErrorLog.setState("1"); try { errorLogMapper.save(ospfErrorLog); }catch (Exception e){ e.printStackTrace(); } } } ospfInfo.setState(responseBody); OspfInfoMapper.updateById(ospfInfo); } catch (Exception e) { e.printStackTrace(); ospfInfo.setState("1"); OspfInfoMapper.updateById(ospfInfo); } } } /** * 获取OSPF接口状态 */ // public String getOspfInterfaceStatus() { // String command = "display ospf interface"; // return routerConnectionService.executeCommand(command); // } public int countByParams(Map params) throws Exception { return OspfInfoMapper.countByParams(params); } public int deleteById(String[] id) throws Exception { return OspfInfoMapper.deleteById(id); } public OspfInfo selectById(String id) throws Exception { return OspfInfoMapper.selectById(id); } public List selectAllByParams(Map params) throws Exception { return OspfInfoMapper.selectAllByParams(params); } public int deleteByDate(Map map) throws Exception{ return OspfInfoMapper.deleteByDate(map); } @Autowired private OspfInfoMapper OspfInfoMapper; }