ASN IPv4或IPv6的统计修改为使用qurtz来做定时;

暂时不开放服务和界面配置不一致提示;
This commit is contained in:
段冬梅
2019-04-04 16:45:18 +08:00
parent f6405c6f04
commit af4491d739
4 changed files with 158 additions and 9 deletions

View File

@@ -0,0 +1,137 @@
package com.nis.quartz;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.PersistJobDataAfterExecution;
import com.nis.util.IPUtil;
import com.nis.util.StringUtil;
import com.nis.web.dao.basics.AsnGroupInfoDao;
import com.nis.web.dao.basics.AsnIpCfgDao;
import com.nis.web.service.SpringContextHolder;
/**
* 定时任务: 定时统计ASN 下IPv4和IPV6的个数
* 1、每 n s 执行一次(两个小时执行一次)
* 2、单线程执行
* @author ddm
*
*/
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class ScheduleStatisticASNIPNumJob implements Job {
private static final Logger logger = Logger.getLogger(ScheduleStatisticASNIPNumJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
AsnIpCfgDao asnIpCfgDao = SpringContextHolder.getBean(AsnIpCfgDao.class);
logger.info("定时统计ASN IP个数开始。。。。。。。。。。。。。。");
long start=System.currentTimeMillis();
Map<Integer,Map<String,Long>> asnNumerMap=new HashMap<>();
List<Object[]> asnIpList=new ArrayList<>();
asnIpList=asnIpCfgDao.findAllAsnIpCfgList();
getAllASNIPNumber(asnIpList, asnNumerMap);
updateAllASNIPNumber(asnNumerMap);
long end=System.currentTimeMillis();
logger.info("定时统计ASN IP个数结束:耗时("+(end-start)+"/毫秒)。。。。。。。。。。。。。。");
}
public void getAllASNIPNumber(List<Object[]> asnIpList,Map<Integer,Map<String,Long>> asnNumerMap){
logger.info("计算ASN IP开始asn ip size:"+asnIpList.size()+"。。。。。。。。。。。。。。");
long start=System.currentTimeMillis();
if(!StringUtil.isEmpty(asnIpList)){
try {
for (Iterator iterator = asnIpList.iterator(); iterator.hasNext();) {
Map asnIpMap=(Map) iterator.next();
//groupId
Integer asnGroupId = (Integer)asnIpMap.get("asn_ip_group");
//ipType(4:v4,6:v6)
Integer ipType= (Integer)asnIpMap.get("ip_type");
//(1:mask,2:range,3:ip)
//Integer ipPattern= (Integer)asnIpMap.get("ip_pattern");
//dest_ip_address
String ipAddress= (String)asnIpMap.get("dest_ip_address");
long IPNumber=0;
if(ipType.equals(4)){
if(ipAddress.indexOf("/") > -1){
Integer mask=Integer.parseInt(ipAddress.split("/")[1]);
ipAddress=ipAddress.split("/")[0];
IPNumber=IPUtil.getIpNum(ipAddress, mask);
}else{
IPNumber=1;
}
//判断组是否已经存在
if(asnNumerMap.keySet().contains(asnGroupId)){
asnNumerMap.get(asnGroupId).put("v4", asnNumerMap.get(asnGroupId).get("v4")+IPNumber);
asnNumerMap.put(asnGroupId, asnNumerMap.get(asnGroupId));
}else{
Map<String, Long> map=new HashMap<>();
map.put("v4", IPNumber);
map.put("v6", 0l);
asnNumerMap.put(asnGroupId, map);
}
}else{
IPNumber=1;
//判断组是否已经存在
if(asnNumerMap.keySet().contains(asnGroupId)){
asnNumerMap.get(asnGroupId).put("v6", asnNumerMap.get(asnGroupId).get("v6")+IPNumber);
asnNumerMap.put(asnGroupId, asnNumerMap.get(asnGroupId));
}else{
Map<String, Long> map=new HashMap<>();
map.put("v4", 0l);
map.put("v6", IPNumber);
asnNumerMap.put(asnGroupId, map);
}
}
}
} catch (Exception e) {
logger.error("计算ASN IP个数失败",e);
}
}
long end=System.currentTimeMillis();
logger.info("计算ASN IP个数结束:耗时("+(end-start)+"/毫秒)。。。。。。。。。。。。。。");
}
public void updateAllASNIPNumber(Map<Integer,Map<String,Long>> asnNumerMap) {
logger.info("修改ASN IP个数开始asn size:"+asnNumerMap.size()+"。。。。。。。。。。。。。。");
long start=System.currentTimeMillis();
if(!StringUtil.isEmpty(asnNumerMap)){
int index=0;
SqlSessionFactory sqlSessionFactory=SpringContextHolder.getBean(SqlSessionFactory.class);
SqlSession batchSqlSession = null;
try {
batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, true);
for(Entry<Integer,Map<String,Long>> e: asnNumerMap.entrySet()) {
((AsnGroupInfoDao) batchSqlSession.getMapper(AsnGroupInfoDao.class)).updateIpNum(e.getValue().get("v4"),e.getValue().get("v6"),e.getKey());
batchSqlSession.commit();
index++;
}
}catch (Exception e) {
logger.error("修改ASN IP个数失败", e);
} finally {
if(batchSqlSession != null){
batchSqlSession.close();
}
}
}
long end=System.currentTimeMillis();
logger.info("修改ASN IP个数结束:耗时("+(end-start)+"/毫秒)。。。。。。。。。。。。。。");
}
}

View File

@@ -16,7 +16,7 @@
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"
default-lazy-init="true">
<!-- 配置加载 任务执行类 -->
<!-- 配置加载 (正常任务)任务执行类 -->
<bean id="scheduleCfgJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.nis.quartz.ScheduleCfgJob"/>
<property name="name" value="scheduleCfgJobDetail" />
@@ -35,7 +35,7 @@
</bean>
<!-- 配置加载 任务执行类 -->
<!-- 配置加载 (全量同步未执行任务)任务执行类 -->
<bean id="scheduleSyncCfgJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.nis.quartz.ScheduleSyncCfgJob"/>
<property name="name" value="scheduleSyncCfgJobDetail" />
@@ -51,8 +51,22 @@
<property name="name" value="scheduleSyncCfgTri" />
<property name="group" value="syncCfg" />
</bean>
<!-- ASN IP统计 start-->
<bean id="scheduleStatisticASNIPNumJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.nis.quartz.ScheduleStatisticASNIPNumJob"/>
<property name="name" value="scheduleStatisticASNIPNumJobDetail" />
<property name="group" value="statisticASNIPNum" />
</bean>
<bean id="scheduleStatisticASNIPNumSimpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="scheduleStatisticASNIPNumJobDetail" />
</property>
<!-- 每天零点执行一次-->
<property name="cronExpression" value="0 0 0 * * ?"/>
</bean>
<!-- 定时任务 -->
<bean id="NTCScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name="dataSource" ref="ProductDataSource" /><!-- 配置数据源 -->
@@ -64,6 +78,7 @@
<list>
<ref bean="scheduleCfgSimpleTrigger" />
<ref bean="scheduleSyncCfgSimpleTrigger" />
<ref bean="scheduleStatisticASNIPNumSimpleTrigger" />
</list>
</property>
</bean>

View File

@@ -104,10 +104,6 @@
<context:component-scan base-package="com.nis.web"></context:component-scan>
<context:component-scan base-package="com.nis.restful"></context:component-scan>
<bean id="asnIpIask" class="com.nis.web.task.StatisticASNIpNumer"></bean>
<task:scheduled-tasks>
<task:scheduled ref="asnIpIask" method="calculateASNIp" cron=" 0 0 0 * * ?" />
</task:scheduled-tasks>
<!-- 定时任务配置 end -->
<!-- 统计页面配置总量和服务配置总量的定时任务配置 -->
<!-- <bean id="sysUserWarnTask" class="com.nis.web.controller.sys.StatisticSysUserWarnNumber"></bean>

View File

@@ -72,12 +72,13 @@
$(this).val("");
});
//定时查询界面配置总量和服务配置总量 是否一致
t2 = window.setInterval("getServiceSum()",5*60*1000);
/** 20190404后台逻辑需要再修改暂时不开放此功能
t2 = window.setInterval("getServiceSum()",5*60*1000); */
//去掉定时器的方法
//window.clearInterval(t2);
});
var t2;
/* var t2; */
//获取界面总量和服务总量
function getServiceSum(){
$.ajax({