(1)asn_ip_cfg增加四列 (2)新增asn_group_info表 (3)asn ip菜单移动到policy object下,新增审核审计菜单 (4)asn ip导入修改,适应新的需求放弃了使用AsnCache,直接从数据库查 (5)asn ip加入审核流程 (6)Packet IP选择asn时,改为选中一个组织,审核下发的配置为as号字符串域 (7)asn ip 新增业务新增function_service_dict字典,serviceId为400
188 lines
5.4 KiB
Java
188 lines
5.4 KiB
Java
package com.nis.util;
|
|
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map.Entry;
|
|
|
|
import org.apache.log4j.Logger;
|
|
import org.apache.shiro.cache.Cache;
|
|
|
|
import com.beust.jcommander.internal.Lists;
|
|
import com.nis.domain.basics.AsnGroupInfo;
|
|
import com.nis.web.dao.basics.AsnGroupInfoDao;
|
|
import com.nis.web.service.SpringContextHolder;
|
|
|
|
import jersey.repackaged.com.google.common.collect.Maps;
|
|
|
|
/**
|
|
* asn no缓存工具类
|
|
* @author Administrator
|
|
*
|
|
*/
|
|
public class AsnCacheUtils{
|
|
private static Logger logger=Logger.getLogger(AsnCacheUtils.class);
|
|
/**
|
|
* ASN号缓存
|
|
*/
|
|
private static final String ASN_NO_CACHE = "asnNoCache";
|
|
private static final int cache_rage = 1000;
|
|
private final static AsnGroupInfoDao configGroupInfoDao = SpringContextHolder.getBean(AsnGroupInfoDao.class);
|
|
/**
|
|
* 获取缓存
|
|
* @param cacheName
|
|
* @param key
|
|
* @return
|
|
*/
|
|
public static AsnGroupInfo get(Long key) {
|
|
Cache cache = getCache(ASN_NO_CACHE);
|
|
Object element = cache.get(key/cache_rage);
|
|
|
|
// Element element = getCache(ASN_NO_CACHE).get(key/cache_rage);
|
|
if(element!=null) {
|
|
Map<Long,AsnGroupInfo> map=(Map<Long,AsnGroupInfo>)element;
|
|
if(map.containsKey(key)) {
|
|
return map.get(key);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
public static Map<Long,AsnGroupInfo> getMap(Object key) {
|
|
Object element = getCache(ASN_NO_CACHE).get(key);
|
|
return (Map<Long,AsnGroupInfo>)element;
|
|
}
|
|
public static void clearCache() {
|
|
logger.warn("clear cache!");
|
|
getCache(ASN_NO_CACHE).clear();
|
|
}
|
|
public static List<AsnGroupInfo> getAllAsnGroup(){
|
|
List<AsnGroupInfo> configGroupInfos=Lists.newArrayList();
|
|
Cache cache=getCache(ASN_NO_CACHE);
|
|
for(Object val : cache.values()) {
|
|
if(val!=null) {
|
|
Map<Long,AsnGroupInfo> map=(Map<Long,AsnGroupInfo>)val;
|
|
configGroupInfos.addAll(map.values());
|
|
}
|
|
}
|
|
return configGroupInfos;
|
|
}
|
|
/**
|
|
*
|
|
* 初始化缓存
|
|
*
|
|
* @param force是否强制刷新
|
|
*/
|
|
//@PostConstruct
|
|
public synchronized static void init(boolean force) {
|
|
long start=System.currentTimeMillis();
|
|
logger.warn("AsnCacheUtils init start...");
|
|
Cache cache=getCache(ASN_NO_CACHE);
|
|
if(force) {
|
|
cache.clear();
|
|
List<AsnGroupInfo> list=configGroupInfoDao.findAsnGroupInfos();
|
|
Map<Long,Map<Long,AsnGroupInfo>> groupMap=Maps.newHashMap();
|
|
for(AsnGroupInfo configGroupInfo:list) {
|
|
if(groupMap.containsKey(configGroupInfo.getAsnId()/cache_rage)) {
|
|
groupMap.get(configGroupInfo.getAsnId()/cache_rage)
|
|
.put(configGroupInfo.getAsnId(), configGroupInfo);
|
|
}else {
|
|
Map<Long,AsnGroupInfo> m=Maps.newHashMap();
|
|
m.put(configGroupInfo.getAsnId(), configGroupInfo);
|
|
groupMap.put(configGroupInfo.getAsnId()/cache_rage, m);
|
|
}
|
|
}
|
|
for(Entry<Long, Map<Long, AsnGroupInfo>> e:groupMap.entrySet()) {
|
|
cache.put(e.getKey(),e.getValue());
|
|
}
|
|
}else {
|
|
//查询总量
|
|
Long count=configGroupInfoDao.getCount();
|
|
boolean loadDatabase=false;
|
|
if(cache.keys().size()==0) {
|
|
loadDatabase=true;
|
|
}else {
|
|
long c=0l;
|
|
for(Object key:cache.keys()) {
|
|
Map<Long, AsnGroupInfo> map = getMap(key);
|
|
if(map != null) {
|
|
c+=getMap(key).size();
|
|
}
|
|
}
|
|
if(c!=count) {
|
|
loadDatabase=true;
|
|
}
|
|
}
|
|
if(loadDatabase) {
|
|
List<AsnGroupInfo> list=configGroupInfoDao.findAsnGroupInfos();
|
|
Map<Long,Map<Long,AsnGroupInfo>> groupMap=Maps.newHashMap();
|
|
for(AsnGroupInfo configGroupInfo:list) {
|
|
if(groupMap.containsKey(configGroupInfo.getAsnId()/cache_rage)) {
|
|
groupMap.get(configGroupInfo.getAsnId()/cache_rage)
|
|
.put(configGroupInfo.getAsnId(), configGroupInfo);
|
|
}else {
|
|
Map<Long,AsnGroupInfo> m=Maps.newHashMap();
|
|
m.put(configGroupInfo.getAsnId(), configGroupInfo);
|
|
groupMap.put(configGroupInfo.getAsnId()/cache_rage, m);
|
|
}
|
|
}
|
|
for(Entry<Long, Map<Long, AsnGroupInfo>> e:groupMap.entrySet()) {
|
|
cache.put(e.getKey(), e.getValue());
|
|
}
|
|
}
|
|
}
|
|
|
|
long end=System.currentTimeMillis();
|
|
logger.warn("AsnCacheUtils init finish,cost:"+(end-start));
|
|
}
|
|
/**
|
|
* 写入ASN_NO_CACHE缓存
|
|
* @param key
|
|
* @return
|
|
*/
|
|
public static void put(Long key, AsnGroupInfo value) {
|
|
Long _key=key/cache_rage;
|
|
Object element = getCache(ASN_NO_CACHE).get(_key);
|
|
if(element==null) {
|
|
Map<Long,AsnGroupInfo> map=Maps.newHashMap();
|
|
map.put(key, value);
|
|
getCache(ASN_NO_CACHE).put(_key,map);
|
|
}else {
|
|
Map<Long,AsnGroupInfo> map=(Map<Long,AsnGroupInfo>)element;
|
|
map.put(key, value);
|
|
getCache(ASN_NO_CACHE).put(_key,map);
|
|
}
|
|
}
|
|
/**
|
|
* 从缓存中移除
|
|
* @param cacheName
|
|
* @param key
|
|
*/
|
|
public static void remove(String key) {
|
|
getCache(ASN_NO_CACHE).remove(key);
|
|
}
|
|
public static void remove(Long key) {
|
|
Long _key=key/cache_rage;
|
|
Object element = getCache(ASN_NO_CACHE).get(_key);
|
|
if(element!=null) {
|
|
Map<Long,AsnGroupInfo> map=(Map<Long,AsnGroupInfo>)element;
|
|
if(map.containsKey(key)) {
|
|
map.remove(key);
|
|
}
|
|
if(map.isEmpty()) {
|
|
getCache(ASN_NO_CACHE).remove(_key);
|
|
}else {
|
|
getCache(ASN_NO_CACHE).put(_key, map);
|
|
}
|
|
|
|
}
|
|
}
|
|
private static Cache getCache(String cacheName){
|
|
Cache cache = CacheUtils.getCacheManager().getCache(cacheName);
|
|
return cache;
|
|
}
|
|
|
|
public static String getCacheName() {
|
|
return ASN_NO_CACHE;
|
|
}
|
|
|
|
|
|
} |