Merge branch 'develop_no_common_group' of https://git.mesalab.cn/K18_NTCS_WEB/NTC.git into develop_no_common_group

This commit is contained in:
段冬梅
2019-04-01 10:10:46 +08:00
23 changed files with 828 additions and 76 deletions

View File

@@ -0,0 +1,92 @@
package com.nis.domain;
import java.util.Date;
import javax.xml.bind.annotation.XmlTransient;
import org.apache.poi.ss.formula.functions.T;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class SysUserWarn {
private String serviceId; //业务Id
private String serviceDesc;//业务描述
private Integer interfaceCfgTotal;//界面配置数量
private Integer systemCfgTotal;//服务端配置数量
private Date time;//时间
private String remark;//备注
private Integer id;//serviceID
private String tableName;//表名
/**
* 当前实体分页对象
*/
protected Page<SysUserWarn> page;
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public String getServiceDesc() {
return serviceDesc;
}
public void setServiceDesc(String serviceDesc) {
this.serviceDesc = serviceDesc;
}
public Integer getInterfaceCfgTotal() {
return interfaceCfgTotal;
}
public void setInterfaceCfgTotal(Integer interfaceCfgTotal) {
this.interfaceCfgTotal = interfaceCfgTotal;
}
public Integer getSystemCfgTotal() {
return systemCfgTotal;
}
public void setSystemCfgTotal(Integer systemCfgTotal) {
this.systemCfgTotal = systemCfgTotal;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
@JsonIgnore
@XmlTransient
public Page<SysUserWarn> getPage() {
if (page == null){
page = new Page<SysUserWarn>();
}
return page;
}
public Page<SysUserWarn> setPage(Page<SysUserWarn> page) {
this.page = page;
return page;
}
}

View File

@@ -0,0 +1,46 @@
package com.nis.domain;
import java.util.List;
import java.util.Map;
public class SysUserWarnData {
private Map<String,List<String>> effective;
private Integer effectiveCount;
private Map<String,List<String>> obsolete;
private Integer obsoleteCount;
public Map<String, List<String>> getEffective() {
return effective;
}
public void setEffective(Map<String, List<String>> effective) {
this.effective = effective;
}
public Integer getEffectiveCount() {
return effectiveCount;
}
public void setEffectiveCount(Integer effectiveCount) {
this.effectiveCount = effectiveCount;
}
public Map<String, List<String>> getObsolete() {
return obsolete;
}
public void setObsolete(Map<String, List<String>> obsolete) {
this.obsolete = obsolete;
}
public Integer getObsoleteCount() {
return obsoleteCount;
}
public void setObsoleteCount(Integer obsoleteCount) {
this.obsoleteCount = obsoleteCount;
}
@Override
public String toString() {
return "SysUserWarnData [effective=" + effective + ", effectiveCount=" + effectiveCount + ", obsolete="
+ obsolete + ", obsoleteCount=" + obsoleteCount + "]";
}
}

View File

@@ -0,0 +1,67 @@
package com.nis.domain;
public class SysUserWarnRecvData {
private Integer status;
private Integer businessCode;
private String reason;
private String msg;
private String fromuri;
private String logSource;
private String traceCode;
private SysUserWarnData data;
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getBusinessCode() {
return businessCode;
}
public void setBusinessCode(Integer businessCode) {
this.businessCode = businessCode;
}
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getFromuri() {
return fromuri;
}
public void setFromuri(String fromuri) {
this.fromuri = fromuri;
}
public String getLogSource() {
return logSource;
}
public void setLogSource(String logSource) {
this.logSource = logSource;
}
public String getTraceCode() {
return traceCode;
}
public void setTraceCode(String traceCode) {
this.traceCode = traceCode;
}
public SysUserWarnData getData() {
return data;
}
public void setData(SysUserWarnData data) {
this.data = data;
}
}

View File

@@ -834,4 +834,8 @@ public final class Constants {
* 配置保护名单字典key
*/
public static final String CACHE_PROTECTION_LIST_DICT = "protetionListDict";
/**
* 管理员用户预警查询服务配置总量接口
*/
public static final String CONFIG_BY_SERVICE = Configurations.getStringProperty("getConfigByService","");
}

View File

@@ -423,7 +423,7 @@ public class ImportBigExcel extends XLSXCovertCSVReader{
throw new RuntimeException("regionDict is null!");
}
if(dataList.size()==0) {
throw new ServiceException(props.getProperty("noneData", "noneData"));
throw new ServiceException(props.getProperty("no_data", "no_data"));
}else if(this.hasImportLimit&&dataList.size()>(Constants.IMPORT_LIMIT+1)) {
throw new ServiceException(props.getProperty("import_limit_is", "The maximum import size is")+" "+Constants.IMPORT_LIMIT);
}

View File

@@ -132,10 +132,16 @@ public class CheckIpFormatThread implements Callable<String>{
// 特殊字段验证
// packet ip ratelimit
if (serviceDict!=null&&serviceDict.getFunctionId().intValue() == 5 && serviceDict.getAction().intValue() == 64) {
if (serviceDict!=null && serviceDict.getAction().intValue() == 64 && (serviceDict.getFunctionId().intValue() == 5
|| serviceDict.getFunctionId().intValue() == 63
|| serviceDict.getFunctionId().intValue() == 407
|| serviceDict.getFunctionId().intValue() == 408) ) {
String userRegion1 = IpRateLimitTemplate.userRegion1;
baseIpCfg.setUserRegion1(userRegion1);
if("0".equals(userRegion1)) {
if(StringUtils.isBlank(baseIpCfg.getUserRegion2())) {
baseIpCfg.setUserRegion2("0.1");
}
String userRegion2 = baseIpCfg.getUserRegion2();
try {
// Double ratelimt= Double.parseDouble(userRegion2);

View File

@@ -1534,6 +1534,9 @@ public class BaseController {
|| regionDict.getFunctionId().equals(566)) { // APP Feature IP
BlockingQueue<IpAllNotDoLogTemplate> list = ei.getDataList(IpAllNotDoLogTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,asnGroupInfos, list);
}else if((regionDict.getFunctionId().equals(63) || regionDict.getFunctionId().equals(407) || regionDict.getFunctionId().equals(408)) && serviceDict!=null && serviceDict.getAction().equals(64)) { // Policies -> Stream
BlockingQueue<IpRateLimitTemplate> list = ei.getDataList(IpRateLimitTemplate.class);
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict,null,asnGroupInfos, list);
}else {
BlockingQueue<IpAllTemplate> list = ei.getDataList(IpAllTemplate.class );
ipPortCfgs=this.checkIpCfgMulity(errTip,serviceDict, regionDict, null,asnGroupInfos, list);
@@ -1628,6 +1631,9 @@ public class BaseController {
String isSend = request.getParameter("isSend")==null?"":request.getParameter("isSend");
SpecificServiceCfg specificServiceCfg = null;
if (serviceDict!=null&&(serviceDict.getServiceId().intValue() == 33 || serviceDict.getServiceId().intValue() == 145
|| serviceDict.getServiceId().intValue() == 1056
|| serviceDict.getServiceId().intValue() == 1059
|| serviceDict.getServiceId().intValue() == 1060
|| serviceDict.getServiceId().intValue() == 35
|| serviceDict.getServiceId().intValue() == 147
|| serviceDict.getServiceId().intValue() == 36
@@ -1902,6 +1908,9 @@ public class BaseController {
}
if (serviceDict!=null&&(serviceDict.getServiceId().intValue() == 33
|| serviceDict.getServiceId().intValue() == 145
|| serviceDict.getServiceId().intValue() == 1056
|| serviceDict.getServiceId().intValue() == 1059
|| serviceDict.getServiceId().intValue() == 1060
|| serviceDict.getServiceId().intValue() == 35
|| serviceDict.getServiceId().intValue() == 147
|| serviceDict.getServiceId().intValue() == 36
@@ -2487,7 +2496,9 @@ public class BaseController {
} else if(regionDict.getFunctionId().equals(405) || regionDict.getFunctionId().equals(563) || regionDict.getFunctionId().equals(565)
|| regionDict.getFunctionId().equals(566)) { // APP Feature IP
ei.loadInitParams(IpAllNotDoLogTemplate.class, msgProp, regionDict, serviceDict);
} else {
} else if((regionDict.getFunctionId().equals(63) || regionDict.getFunctionId().equals(407) || regionDict.getFunctionId().equals(408)) && serviceDict.getAction().equals(64)){ // Policies -> Stream
ei.loadInitParams(IpRateLimitTemplate.class, msgProp, regionDict, serviceDict);
}else {
ei.loadInitParams(IpAllTemplate.class, msgProp, regionDict, serviceDict);
}
} else if (regionDict.getRegionType().equals(2)) {// 字符串类

View File

@@ -429,6 +429,11 @@ public class IpController extends BaseController{
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, IpAllNotDoLogTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else if((regionDict.getFunctionId().equals(63)|| regionDict.getFunctionId().equals(407) || regionDict.getFunctionId().equals(408)) && serviceDict.getAction().equals(64)){// Policies -> Stream
List<IpRateLimitTemplate> classList=new ArrayList<IpRateLimitTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, IpRateLimitTemplate.class, 2);
excel.setDataList(pro,classList,null).
write(request,response, fileName).dispose();
}else{
List<IpAllTemplate> classList=new ArrayList<IpAllTemplate>();
ExportExcel excel=new ExportExcel(serviceDict,regionDict,pro,null, IpAllTemplate.class, 2);

View File

@@ -0,0 +1,110 @@
package com.nis.web.controller.sys;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import com.nis.domain.SysUserWarn;
import com.nis.domain.SysUserWarnData;
import com.nis.domain.SysUserWarnRecvData;
import com.nis.util.Constants;
import com.nis.util.ServiceConfigTemplateUtil;
import com.nis.util.httpclient.HttpClientUtil;
import com.nis.web.service.SysUserWarnService;
/**
* 定时查询 界面配置总量和 服务配置总量 并添加到 sys_user_warn表中
*
*
*/
public class StatisticSysUserWarnNumber {
private Logger logger = Logger.getLogger(this.getClass());
@Autowired
protected SysUserWarnService sysUserWarnService;
@Autowired
private HttpServletRequest request;
public void insertTotalInfo() {
logger.info("定时统计业务号的界面配置总量和服务配置总量-开始。。。。。。。。。。。。。。");
long start=System.currentTimeMillis();
//获取界面配置的所有业务信息
List<Map<String, Object>> serviceList = ServiceConfigTemplateUtil.getServiceList();
getSysData(serviceList);
long end=System.currentTimeMillis();
logger.info("定时统计业务号的界面配置总量和服务配置总量-结束:"+(end-start)+"。。。。。。。。。。。。。。");
}
public void getSysData(List<Map<String, Object>> serviceList){
//调用服务端接口,查询所有业务服务端的配置总量
try{
Map<String, Object> params = new HashMap<String, Object>();
params.put("service", -1);
String url = Constants.SERVICE_URL + Constants.CONFIG_BY_SERVICE;
String recv = HttpClientUtil.getMsg(url, params, request);
if (StringUtils.isNotBlank(recv)) {
Gson gson = new GsonBuilder().create();
SysUserWarnRecvData fromJson = gson.fromJson(recv, new TypeToken<SysUserWarnRecvData>() {
}.getType());
if (fromJson.getStatus().intValue() == 200) {
SysUserWarnData data = fromJson.getData();
Map<String, List<String>> effective = data.getEffective();
List<SysUserWarn> listTotal =new ArrayList<SysUserWarn>();
for (Map<String, Object> map1 : serviceList) {
SysUserWarn entity=new SysUserWarn();
entity.setId(Integer.parseInt(map1.get("id").toString()));
entity.setTableName(map1.get("tableName").toString());
//根据serviceID和表名查询界面各个业务的配置数量
Integer cfgCount = sysUserWarnService.getCfgCount(entity);
//查询服务端的各个业务的配置数量
List<String> list = effective.get(map1.get("id"));
SysUserWarn sysUserWarn=new SysUserWarn();
sysUserWarn.setServiceId(map1.get("id").toString());
sysUserWarn.setServiceDesc(map1.get("desc").toString());
if(cfgCount>0){
sysUserWarn.setInterfaceCfgTotal(cfgCount);
}else{
sysUserWarn.setInterfaceCfgTotal(0);
}
if(list !=null && list.size()>0){
sysUserWarn.setSystemCfgTotal(list.size());
}else {
sysUserWarn.setSystemCfgTotal(0);
}
sysUserWarn.setTime(new Date());
listTotal.add(sysUserWarn);
}
//判断表中是否有数据
Integer total = sysUserWarnService.getAllInfoCount();
if(total !=null && total>0){//说明有数据 先删除 后添加
sysUserWarnService.deleteAllData();
sysUserWarnService.insert(listTotal);
}else{// 没有 直接 添加
sysUserWarnService.insert(listTotal);
}
}
}
}catch(Exception e) {
logger.error("更新所有业务的配置数量失败", e);
}
}
}

View File

@@ -0,0 +1,61 @@
package com.nis.web.controller.sys;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.nis.domain.Page;
import com.nis.domain.SysUserWarn;
import com.nis.util.ServiceConfigTemplateUtil;
import com.nis.web.controller.BaseController;
import com.nis.web.service.SysUserWarnService;
@Controller
@RequestMapping(value = "${adminPath}/sys/warn")
public class SysUserWarnController extends BaseController{
@Autowired
protected SysUserWarnService sysUserWarnService;
@RequiresPermissions("sys:warnList:view")
@RequestMapping(value = {"userWarnList", ""})
public String list(@ModelAttribute("warn") SysUserWarn warn, Model model,HttpServletRequest request
,HttpServletResponse response) {
Page<SysUserWarn> pageCondition = new Page<SysUserWarn>(request, response,"r");
Properties msgProp = getMsgProp();
Page<SysUserWarn> page = sysUserWarnService.getAllList(pageCondition,warn,msgProp);
model.addAttribute("warn", warn);
model.addAttribute("page", page);
return "/sys/sysUserWarnList";
}
@RequiresPermissions("sys:warnList:view")
@ResponseBody
@RequestMapping(value = {"serviceSum", ""})
public SysUserWarn findServiceSum() {
SysUserWarn findServiceSum = sysUserWarnService.findServiceSum();
return findServiceSum;
}
public static void main(String[] args) {
List<Map<String, Object>> serviceList = ServiceConfigTemplateUtil.getServiceList();
System.out.println(serviceList);
for (Map<String, Object> map : serviceList) {
System.out.println(map.get("id"));
System.out.println(map.get("tableName"));
}
}
}

View File

@@ -0,0 +1,22 @@
package com.nis.web.dao;
import java.util.List;
import com.nis.domain.SysUserWarn;
@MyBatisDao
public interface SysUserWarnDao extends CrudDao<SysUserWarn>{
//查询所有的数据
public List<SysUserWarn> getAllList(SysUserWarn entity);
//查询总的记录数
public Integer getAllInfoCount();
//查询 所有数据中界面总量 和 服务总量
public SysUserWarn getAllSum(SysUserWarn entity);
//根据serviceID和表名查询业务配置的数量
public Integer getCfgCount(SysUserWarn entity);
//新增
public int insert(List<SysUserWarn> list);
//删除所有的数据
public int deleteAllData();
}

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.nis.web.dao.SysUserWarnDao" >
<resultMap id="SysUserWarnMap" type="com.nis.domain.SysUserWarn" >
<result column="service_id" property="serviceId" jdbcType="VARCHAR" />
<result column="service_desc" property="serviceDesc" jdbcType="VARCHAR" />
<result column="interface_cfg_total" property="interfaceCfgTotal" jdbcType="INTEGER" />
<result column="system_cfg_total" property="systemCfgTotal" jdbcType="INTEGER" />
<result column="time" property="time" jdbcType="TIMESTAMP" />
<result column="remark" property="remark" jdbcType="VARCHAR" />
</resultMap>
<select id="getAllList" parameterType="com.nis.domain.SysUserWarn" resultMap="SysUserWarnMap">
SELECT
service_id,
service_desc,
interface_cfg_total,
system_cfg_total,
time,
remark
FROM
sys_user_warn
<where>
<if test="serviceId != null and serviceId !=''" >
and service_id = #{serviceId}
</if>
</where>
order by service_id
</select>
<select id="getAllSum" parameterType="com.nis.domain.SysUserWarn" resultType="com.nis.domain.SysUserWarn">
SELECT
SUM(interface_cfg_total) interface_cfg_total,
SUM(system_cfg_total) system_cfg_total
FROM
sys_user_warn
<where>
<if test="serviceId != null and serviceId !=''" >
and service_id = #{serviceId}
</if>
</where>
order by service_id
</select>
<select id="getAllInfoCount" resultType="java.lang.Integer">
select count(service_id) total from sys_user_warn
</select>
<select id="getCfgCount" parameterType="com.nis.domain.SysUserWarn" resultType="java.lang.Integer">
select count(cfg_id) cfgTotal from ${tableName}
<where>
service_id = #{id}
and is_valid=1
</where>
</select>
<insert id="insert" parameterType="java.util.List" >
insert into sys_user_warn (
service_id,
service_desc,
interface_cfg_total,
system_cfg_total,
time,
remark
)values
<foreach collection="list" item="item" index= "index" separator =",">
(
#{item.serviceId,jdbcType=VARCHAR},
#{item.serviceDesc,jdbcType=VARCHAR},
#{item.interfaceCfgTotal,jdbcType=INTEGER},
#{item.systemCfgTotal,jdbcType=INTEGER},
#{item.time,jdbcType=TIMESTAMP},
#{item.remark,jdbcType=VARCHAR}
)
</foreach>
</insert>
<delete id="deleteAllData">
delete from sys_user_warn
</delete>
</mapper>

View File

@@ -2344,7 +2344,8 @@ public abstract class BaseService {
try{
batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
for(int index = 0; index < appPolicyCfgs.size();index++){
AppPolicyCfg _cfg = appPolicyCfgs.get(index);
AppPolicyCfg _cfg = new AppPolicyCfg();
BeanUtils.copyProperties(appPolicyCfgs.get(index), _cfg);
((AppCfgDao) batchSqlSession.getMapper(AppCfgDao.class)).insertAppPolicyCfgForBatch(_cfg);
}

View File

@@ -0,0 +1,72 @@
package com.nis.web.service;
import java.util.List;
import java.util.Properties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.nis.domain.Page;
import com.nis.domain.SysUserWarn;
import com.nis.web.dao.SysUserWarnDao;
@Service
public class SysUserWarnService extends BaseService{
@Autowired
private SysUserWarnDao sysUserWarnDao;
//查询所有的数据
public Page<SysUserWarn> getAllList(Page<SysUserWarn> page,SysUserWarn entity,Properties msgProp){
entity.setPage(page);
List<SysUserWarn> allList = sysUserWarnDao.getAllList(entity);
if(allList !=null && allList.size()>0){
SysUserWarn obj=new SysUserWarn();
obj.setServiceId(entity.getServiceId());
SysUserWarn allSum = sysUserWarnDao.getAllSum(obj);
SysUserWarn sysWarn=new SysUserWarn();
String report_total = msgProp.getProperty("report_total");
sysWarn.setServiceId(report_total);
sysWarn.setServiceDesc("--");
sysWarn.setInterfaceCfgTotal(allSum.getInterfaceCfgTotal());
sysWarn.setSystemCfgTotal(allSum.getSystemCfgTotal());
sysWarn.setTime(allList.get(0).getTime());
allList.add(0, sysWarn);
}
page.setList(allList);
return page;
}
//根据serviceID和表名查询业务配置的数量
public Integer getAllInfoCount(){
return sysUserWarnDao.getAllInfoCount();
}
//根据serviceID和表名查询业务配置的数量
public Integer getCfgCount(SysUserWarn entity){
return sysUserWarnDao.getCfgCount(entity);
}
//新增
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
public int insert(List<SysUserWarn> list){
return sysUserWarnDao.insert(list);
}
//删除所有的数据
@Transactional(readOnly=false,rollbackFor=RuntimeException.class)
public int deleteAllData(){
return sysUserWarnDao.deleteAllData();
}
//查询 所有业务 界面总量和服务总量的和
public SysUserWarn findServiceSum(){
SysUserWarn obj=new SysUserWarn();
SysUserWarn allSum = sysUserWarnDao.getAllSum(obj);
return allSum;
}
}

View File

@@ -1481,7 +1481,7 @@ reedit=Please re-edit!
intercep_domain_required_tip=Domain is required
packets=packets
GByte=GByte
#\u5B9A\u65F6\u5668\u53C2\u6570
#\u5b9a\u65f6\u5668\u53c2\u6570
interval=Recure every
month=Months
day=Days
@@ -1503,4 +1503,7 @@ cancel_all=Cancel all configurations!
pre_version=Previous Version
approved_all=Approve all configurations!
protection_list_manage=Protection List Manage
effective=Effective
effective=Effective
admin_user_warn=Admin User Warn
interface_total=Interface Total
service_total=Service Total

View File

@@ -1323,7 +1323,7 @@ address_pool_id=ID \u043f\u0443\u043b \u0430\u0434\u0440\u0435\u0441\u043e\u0432
outgoing_unicast_total_size=\u0417\u0430\u043a\u0430\u0447\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u044b
voip_sample_reject=\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0437\u0446\u043e\u0432 VOIP \u0430\u0443\u0434\u0438\u043e
available_ip=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 IP
block_by_app_server_ip=DNS-\u0421\u043F\u0443\u0444\u0438\u043D\u0433
block_by_app_server_ip=DNS-\u0421\u043f\u0443\u0444\u0438\u043d\u0433
certificate_file=\u0424\u0430\u0439\u043b \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430
address_pool=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u043b\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432
transfer_bytes=\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0431\u0430\u0439\u0442\u043e\u0432
@@ -1370,7 +1370,7 @@ keyword_log_tips=\u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u
conn_record=\u0417\u0430\u043f\u0438\u0441\u0438 \u041f\u043e\u0434\u043a\u044e\u0447\u0435\u043d\u0438\u0439
bps=\u0413\u0431\u0438\u0442/\u0441
bps_percent=Bps Percent
pps=\u041F\u0430\u043A\u0435\u0442/\u0441
pps=\u041f\u0430\u043a\u0435\u0442/\u0441
pps_percent=pps Percent
spoofing_ip_object=\u041f\u0443\u043b IP \u0421\u043f\u0443\u0444\u0438\u043d\u0433
spoofing_ip_policy=IP \u0421\u043f\u0443\u0444\u0438\u043d\u0433
@@ -1382,13 +1382,13 @@ d_asn=DASN
asn_conn_report=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 ASN
https_url_report=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 HTTP(s) URL
url=URL
sum=\u0421\u0443\u043C\u043C\u0430
sum=\u0421\u0443\u043c\u043c\u0430
url_count=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e URL
ip_range_report=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0425\u043e\u0441\u0442\u043e\u0432 \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0438 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439
ip_start=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 IP
ip_end=\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 IP
ip_start_num=\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u041D\u0430\u0447\u0430\u043B\u044C\u043D\u044B\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u043E\u0432
ip_end_num=\u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u041A\u043E\u043D\u0435\u0447\u043D\u044B\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u043E\u0432
ip_start_num=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432
ip_end_num=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432
ip_sub=IP-\u043f\u043e\u0434\u0441\u0435\u0442\u044c
start_ip=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 IP
end_ip=\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 IP
@@ -1403,21 +1403,21 @@ ip_spoofing_group_manage=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\
min_tcp=\u041c\u0438\u043d.
max_tcp=\u041c\u0430\u043a\u0441.
APP_TCP_SESSION_BYTE=\u0421\u0435\u0430\u043d\u0441
ip_count=\u0415\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 IP-\u0430\u0434\u0440\u0435\u0441
ip_count=\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441
counnection_count=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439
asn=ASN
Unique_num=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u041a\u043b\u0438\u0435\u043d\u0442\u0430 IP
ip=IP
country=\u0421\u0442\u0440\u0430\u043d\u0430
unique_num=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u041a\u043b\u0438\u0435\u043d\u0442\u0430 IP
import_limit_is=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 \u0440\u0430\u0437\u043C\u0435\u0440 \u0438\u043C\u043F\u043E\u0440\u0442\u0430
upload_limit_is=\u041E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438 \u0444\u0430\u0439\u043B\u0430
count=\u041F\u043E\u0434\u0441\u0447\u0435\u0442
do_blacklist=\u0427\u0435\u0440\u043D\u044B\u0439 \u0421\u043F\u0438\u0441\u043E\u043A
l3_header_error=\u0422\u043E\u043B\u044C\u043A\u043E \u0447\u0435\u0442\u044B\u0440\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043F\u0440\u0438\u0437\u043D\u0430\u043A\u0438 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u0432\u0432\u0435\u0434\u0435\u043D\u044B \u0432
IP_HEADER=IP \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430
ICMP_HEADER=ICMP \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430
offset_expression=\u0421\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430
import_limit_is=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u043f\u043e\u0440\u0442\u0430
upload_limit_is=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430
count=\u041f\u043e\u0434\u0441\u0447\u0435\u0442
do_blacklist=\u0427\u0435\u0440\u043d\u044b\u0439 \u0421\u043f\u0438\u0441\u043e\u043a
l3_header_error=\u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u0432\u0435\u0434\u0435\u043d\u044b \u0432
IP_HEADER=IP \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430
ICMP_HEADER=ICMP \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430
offset_expression=\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430
cfg_custom=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0421\u0442\u043e\u043b\u0431\u0446\u044b
event_report=\u041e\u0442\u0447\u0435\u0442 \u043e \u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0438
ntc_event_monitor_report=\u0441\u043e\u0431\u044b\u0442\u0438\u044f \u041c\u043e\u043d\u0438\u0442\u043e\u0440 \u041e\u0442\u0447\u0435\u0442
@@ -1432,33 +1432,33 @@ letter_num=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u041f\u
config_num=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439
monitor_num=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430
control_num=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f
contains_non_hex_char=\u0421\u043E\u0434\u0435\u0440\u0436\u0438\u0442 \u043D\u0435 \u0448\u0435\u0441\u0442\u043D\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043D\u044B\u0435 \u0441\u0438\u043C\u0432\u043E\u043B\u044B
max_length=\u041C\u0430\u043A\u0441. \u0414\u043B\u0438\u043D\u0430
min_length=\u041C\u0438\u043D. \u0414\u043B\u0438\u043D\u0430
length_error=\u041E\u0448\u0438\u0431\u043A\u0430 \u0441 \u0414\u043B\u0438\u043D\u043E\u0439
duplicate=\u0414\u0443\u0431\u043B\u0438\u043A\u0430\u0442
print=\u041F\u0435\u0447\u0430\u0442\u044C
contains_non_hex_char=\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b
max_length=\u041c\u0430\u043a\u0441. \u0414\u043b\u0438\u043d\u0430
min_length=\u041c\u0438\u043d. \u0414\u043b\u0438\u043d\u0430
length_error=\u041e\u0448\u0438\u0431\u043a\u0430 \u0441 \u0414\u043b\u0438\u043d\u043e\u0439
duplicate=\u0414\u0443\u0431\u043b\u0438\u043a\u0430\u0442
print=\u041f\u0435\u0447\u0430\u0442\u044c
traffic_connect_log=\u0416\u0443\u0440\u043d\u0430\u043b \u0422\u0440\u0430\u0444\u0438\u043a\u0430
keyword_log_to_url=\u041E\u0442 \u041A\u043B\u044E\u0447\u0435\u0432\u043E\u0433\u043E \u0421\u043B\u043E\u0432\u0430 \u0414\u043E URL
http_log=HTTP \u0436\u0443\u0440\u043D\u0430\u043B\u044B
cut_sample_tool=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0434\u043B\u044F \u0432\u044B\u0440\u0435\u0437\u043E\u043A \u043E\u0431\u0440\u0430\u0437\u0446\u0430
keyword_log_to_url=\u041e\u0442 \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0421\u043b\u043e\u0432\u0430 \u0414\u043e URL
http_log=HTTP \u0436\u0443\u0440\u043d\u0430\u043b\u044b
cut_sample_tool=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u044b\u0440\u0435\u0437\u043e\u043a \u043e\u0431\u0440\u0430\u0437\u0446\u0430
hex_minlength_3=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u0438\u043d\u043e\u0439 3
hex_minlength_4=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u0438\u043d\u043e\u0439 4
hex_minlength_8=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u0438\u043d\u043e\u0439 8
hex_minlength_16=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043b\u0438\u043d\u043e\u0439 16
need_input=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e
max_input=\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430
no_need_input=\u041D\u0435 \u043D\u0443\u0436\u043D\u043E \u0437\u0430\u043F\u043E\u043B\u043D\u044F\u0442\u044C \u043F\u0440\u0438\u0437\u043D\u0430\u043A\u0438
close_link=\u0417\u0430\u043A\u0440\u044B\u0442\u043E\u0435 \u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435
asn_group=ASN \u0433\u0440\u0443\u043F\u043F\u0430
can_not_edit_issued_ans_group=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043B\u044C\u043D\u0443\u044E \u0433\u0440\u0443\u043F\u043F\u0443 ASN
can_not_delete_asn_group_with_audited_ip=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0433\u0440\u0443\u043F\u043F\u0443 ASN \u0441 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u043D\u044B\u043C IP-\u0430\u0434\u0440\u0435\u0441\u043E\u043C
organization=\u041E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u044F
mismatch=\u041D\u0435\u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435
can_not_delete_asn_group_with_audited_ip_address=\u041D\u0435\u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0433\u0440\u0443\u043F\u043F\u0443 ASN \u0441 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u043D\u044B\u043C \u043F\u0430\u043A\u0435\u0442\u043E\u043C IP-\u0430\u0434\u0440\u0435\u0441\u0430
country_code=\u041A\u043E\u0434 \u0421\u0442\u0440\u0430\u043D\u044B
asn_name=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 ASN
details=\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438
no_need_input=\u041d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438
close_link=\u0417\u0430\u043a\u0440\u044b\u0442\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435
asn_group=ASN \u0433\u0440\u0443\u043f\u043f\u0430
can_not_edit_issued_ans_group=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 ASN
can_not_delete_asn_group_with_audited_ip=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 ASN \u0441 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043d\u044b\u043c IP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c
organization=\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f
mismatch=\u041d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435
can_not_delete_asn_group_with_audited_ip_address=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0433\u0440\u0443\u043f\u043f\u0443 ASN \u0441 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u043d\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c IP-\u0430\u0434\u0440\u0435\u0441\u0430
country_code=\u041a\u043e\u0434 \u0421\u0442\u0440\u0430\u043d\u044b
asn_name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 ASN
details=\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438
NTC_ASN_NUMBER=ASN
application_layer_protocol=L7 \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b
traffic_statistics=\u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0421\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0422\u0440\u0430\u0444\u0438\u043a\u0430
@@ -1467,10 +1467,10 @@ protocol_statistics=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430
app_statistics=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439
service_statistics=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0421\u0435\u0440\u0432\u0438\u0441\u043e\u0432
website_statistics=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0412\u0435\u0431-\u0441\u0430\u0439\u0442\u043e\u0432
not_exist=\u041D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442
real_time=\u0412 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u043C \u0432\u0440\u0435\u043C\u0435\u043D\u0438
history=\u0418\u0441\u0442\u043E\u0440\u0438\u044F
all_columns_hidden=\u0412\u0441\u0435 \u0441\u0442\u043E\u043B\u0431\u0446\u044B \u0441\u043A\u0440\u044B\u0442\u044B!
not_exist=\u041d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442
real_time=\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438
history=\u0418\u0441\u0442\u043e\u0440\u0438\u044f
all_columns_hidden=\u0412\u0441\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0441\u043a\u0440\u044b\u0442\u044b!
no_log=\u041d\u0435\u0442 \u0416\u0443\u0440\u043d\u0430\u043b\u043e\u0432
all_log=\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0416\u0443\u0440\u043d\u0430\u043b \u0438 \u0416\u0443\u0440\u043d\u0430\u043b-\u0444\u0430\u0439\u043b
framework_log=\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0416\u0443\u0440\u043d\u0430\u043b
@@ -1483,29 +1483,32 @@ ip_existed=IP \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u044
user_check=\u0414\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u043d\u044f\u0442, \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c!
deletedAsnTip=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u2116 cfgId \u0441 ASN asnId \u0431\u044b\u043b\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430;
reedit=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0437\u0430\u043d\u043e\u0432\u043e!
intercep_domain_required_tip=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u0434\u043E\u043C\u0435\u043D
packets=\u041F\u0430\u043A\u0435\u0442\u044B
intercep_domain_required_tip=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043c\u0435\u043d
packets=\u041f\u0430\u043a\u0435\u0442\u044b
GByte=GByte
#\u5B9A\u65F6\u5668\u53C2\u6570
interval=\u041F\u0440\u043E\u043C\u0435\u0436\u0443\u0442\u043E\u043A
month=\u041C\u0435\u0441\u044F\u0446\u044B
day=\u0414\u043D\u0438
#\u5b9a\u65f6\u5668\u53c2\u6570
interval=\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a
month=\u041c\u0435\u0441\u044f\u0446\u044b
day=\u0414\u043d\u0438
week=weeks
startTime=\u041D\u0430\u0447\u0430\u0442\u044C
endTime=\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C
single=\u041E\u0434\u043D\u043E\u043A\u0440\u0430\u0442\u043D\u043E
everyDay=\u0415\u0436\u0435\u0434\u043D\u0435\u0432\u043D\u043E
everyWeek=\u0415\u0436\u0435\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u043E
everyMonth=\u0415\u0436\u0435\u043C\u0435\u0441\u044F\u0447\u043D\u043E
startTime=\u041d\u0430\u0447\u0430\u0442\u044c
endTime=\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c
single=\u041e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e
everyDay=\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u043e
everyWeek=\u0415\u0436\u0435\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e
everyMonth=\u0415\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e
on=On
is_schduler=Scheduler
validate_error=Unexpected error occurred while validating
v4_num=IPv4 Number
v6_num=IPv6 Number
always=\u041F\u043E\u0441\u0442\u043E\u044F\u043D\u043D\u043E
always=\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e
schedule=Scheduler
cancel_all=Cancel all configurations!
pre_version=Previous Version
approved_all=Approve all configurations!
protection_list_manage=Protection List Manage
effective=Effective
effective=Effective
admin_user_warn=Admin User Warn
interface_total=Interface Total
service_total=Service Total

View File

@@ -231,7 +231,7 @@ delete_failed_admin=\u5220\u9664\u5931\u8d25\uff0c\u7ba1\u7406\u5458\u7528\u6237
audit_success=\u5ba1\u6838\u6210\u529f
audit_failed=\u5ba1\u6838\u5931\u8d25
turning_page=\u6b63\u5728\u4e3a\u60a8\u8df3\u8f6c\u9875\u9762
login_timeout=\u767B\u5F55\u8D85\u65F6,\u8bf7\u91cd\u65b0\u767b\u5f55\u3002
login_timeout=\u767b\u5f55\u8d85\u65f6,\u8bf7\u91cd\u65b0\u767b\u5f55\u3002
captcha_error=\u9a8c\u8bc1\u7801\u4e0d\u6b63\u786e
enter_captcha=\u8bf7\u8f93\u5165\u9a8c\u8bc1\u7801
input=\u8bf7\u8f93\u5165
@@ -1481,24 +1481,27 @@ reedit=\u8bf7\u91cd\u65b0\u7f16\u8f91\uff01
intercep_domain_required_tip=\u57df\u540d\u4fe1\u606f\u5fc5\u987b\u914d\u7f6e
packets=packets
GByte=GByte
#\u5B9A\u65F6\u5668\u53C2\u6570
interval=\u95F4\u9694
#\u5b9a\u65f6\u5668\u53c2\u6570
interval=\u95f4\u9694
month=\u6708
day=\u65E5
startTime=\u5F00\u59CB\u65F6\u95F4
endTime=\u7ED3\u675F\u65F6\u95F4
single=\u5355\u6B21
everyDay=\u6BCF\u5929
everyWeek=\u6BCF\u5468
everyMonth=\u6BCF\u6708
validate_error=\u9A8C\u8BC1\u65F6\u53D1\u751F\u610F\u5916\u9519\u8BEF
day=\u65e5
startTime=\u5f00\u59cb\u65f6\u95f4
endTime=\u7ed3\u675f\u65f6\u95f4
single=\u5355\u6b21
everyDay=\u6bcf\u5929
everyWeek=\u6bcf\u5468
everyMonth=\u6bcf\u6708
validate_error=\u9a8c\u8bc1\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef
v4_num=IPv4 Number
v6_num=IPv6 Number
always=\u957F\u671F
always=\u957f\u671f
schedule=Scheduler
cancel_all=\u53D6\u6D88\u6240\u6709\u914D\u7F6E!
cancel_all=\u53d6\u6d88\u6240\u6709\u914d\u7f6e!
pre_version=\u4e0a\u4e00\u7248
is_schduler=\u5b9a\u65f6\u5668
approved_all=\u5BA1\u6838\u901A\u8FC7\u6240\u6709\u914D\u7F6E!
protection_list_manage=\u5185\u7F6E\u4FDD\u62A4\u540D\u5355\u7BA1\u7406
effective=\u6709\u6548
approved_all=\u5ba1\u6838\u901a\u8fc7\u6240\u6709\u914d\u7f6e!
protection_list_manage=\u5185\u7f6e\u4fdd\u62a4\u540d\u5355\u7ba1\u7406
effective=\u6709\u6548
admin_user_warn=\u7ba1\u7406\u5458\u7528\u6237\u9884\u8b66
interface_total=\u754c\u9762\u603b\u91cf
service_total=\u670d\u52a1\u603b\u91cf

View File

@@ -109,6 +109,11 @@
<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>
<task:scheduled-tasks>
<task:scheduled ref="sysUserWarnTask" method="insertTotalInfo" cron="0 0/10 * * * ?" />
</task:scheduled-tasks>
<!-- 默认的注解映射的支持org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping -->
<mvc:annotation-driven

View File

@@ -0,0 +1,2 @@
--->
INSERT INTO `sys_menu` (`id`, `parent_id`, `parent_ids`, `code`, `name`, `sort`, `href`, `target`, `icon`, `is_show`, `permission`, `create_by`, `create_date`, `update_by`, `update_date`, `remarks`, `del_flag`, `menu_bg`, `quick_action`, `is_top`, `function_id`) VALUES ('1252', '2', '0,1,2,', 'admin_user_warn', '管理员用户预警', '5060', '/sys/warn/userWarnList', '', '', '1', 'sys:warnList:view', '1', '2019-03-28 10:06:26', '1', '2019-03-28 11:36:42', '', '1', NULL, '0', '0', NULL);

View File

@@ -0,0 +1,9 @@
CREATE TABLE `sys_user_warn` (
`service_id` int(11) NOT NULL COMMENT '业务ID',
`service_desc` varchar(255) DEFAULT '' COMMENT '业务描述',
`interface_cfg_total` int(11) DEFAULT NULL COMMENT '界面配置数量',
`system_cfg_total` int(11) DEFAULT NULL COMMENT '服务配置数量',
`time` datetime DEFAULT NULL COMMENT '数据插入时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`service_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='管理员用户预警表';

View File

@@ -71,9 +71,32 @@
$("#searchText").click(function(){
$(this).val("");
});
//定时查询界面配置总量和服务配置总量 是否一致
t2 = window.setInterval("getServiceSum()",5*60*1000);
//去掉定时器的方法
//window.clearInterval(t2);
});
var t2;
//获取界面总量和服务总量
function getServiceSum(){
$.ajax({
type:'post',
async:false,
cache:false,
url:'${ctx}/sys/warn/serviceSum',
dataType:"json",
success: function(data){
if(data !=null && (data.interfaceCfgTotal !=data.systemCfgTotal)){
top.$.jBox.tip("界面配置总量和服务配置总量不一致!");
}
},
error: function(){
    top.$.jBox.tip("界面配置总量和服务配置总量查询失败!");
        window.clearInterval(t2);
}
});
}
//页面跳转函数 level:级别1顶级2有子级。name:菜单名称,有多级#间隔。url访问路径。object点击元素对象。
function page_turn(id, functionId,level, name, url,obj){
//$(".page-bar").removeClass("hidden");

View File

@@ -0,0 +1,105 @@
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ include file="/WEB-INF/include/taglib.jsp"%>
<html>
<head>
<title>
<spring:message code="admin_user_warn"/>
</title>
<script>
$(document).ready(function() {
//reset
$("#resetBtn").on("click",function(){
$("select.selectpicker").each(function(){
$(this).selectpicker('val',$(this).find('option:first').val());
$(this).find("option").attr("selected",false);
$(this).find("option:first").attr("selected",true);
});
$(':input','#searchForm')
.not(':button,:submit,:reset,:hidden')
.attr("value",'');
$("#searchForm")[0].reset();
});
});
</script>
</head>
<body>
<div class="page-content">
<h3 class="page-title">
<spring:message code="admin_user_warn"/>
</h3>
<h5 class="page-header"></h5>
<div class="col-md-12">
<div class="portlet">
<div class="portlet-body">
<div class="row" >
<form:form id="searchForm" modelAttribute="warn" action="${ctx}/sys/warn/userWarnList" method="post" class="form-search">
<input id="pageNo" name="pageNo" type="hidden" value="${page.pageNo}"/>
<input id="pageSize" name="pageSize" type="hidden" value="${page.pageSize}"/>
<div class="col-md-12">
<div class="pull-left">
<div class="input-group">
<div class="input-group-btn">
<span class="selectpicker form-control" ><spring:message code="service_id"/></span>
</div>
<input name="serviceId" type="text" class="form-control input-medium" maxlength="20" value="${warn.serviceId }" />
</div>
</div>
<div class="pull-left">
<button type="button" class="btn blue" onClick="return page()"> <i class="fa fa-search"></i> <spring:message code="search"/> </button>
<button type="button" class="btn btn-default" id="resetBtn"> <i class="fa fa-refresh"></i> <spring:message code="reset"/> </button>
</div>
<div class="pull-right">
<a class="btn btn-icon-only btn-default setfields tooltips"
data-container="body" data-placement="top" data-original-title=<spring:message code="custom_columns"/> href="javascript:;">
<i class="icon-wrench"></i>
</a>
</div>
</div>
<!-- 搜索内容与操作按钮栏 -->
</form:form>
</div>
<sys:message content="${message}"/>
<div class="table-responsive">
<table id="contentTable" class="table table-striped table-bordered table-condensed text-nowrap logTb">
<thead>
<tr>
<th class="sort-column service_id" column="service_id"><spring:message code="service_id"/></th>
<th ><spring:message code="service_name"/></th>
<th class="sort-column interface_total" column="interface_total"><spring:message code="interface_total"/></th>
<th class="sort-column service_total" column="service_total"><spring:message code="service_total"/></th>
<th class="sort-column create_time" column="create_time"><spring:message code="create_time"/></th>
</tr>
</thead>
<tbody>
<c:forEach var="log" items="${page.list }" varStatus="status">
<tr>
<td>${log.serviceId }</td>
<td>${log.serviceDesc }</td>
<td>${log.interfaceCfgTotal }</td>
<td>${log.systemCfgTotal }</td>
<td><fmt:formatDate value="${log.time }" pattern="yyyy-MM-dd HH:mm:ss"/></td>
</tr>
</c:forEach>
</tbody>
</table>
<div class="page">${page}</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -67,6 +67,17 @@ function switchService(){
$(".service").removeClass("hidden");
}
// App Identify -> RateLimit隐藏SubscribeID
if(functionId == 63){
var action = $("input[name='serviceDictId']:checked").attr("action");
var label = $(".region").find("input[configservicetype='subscribe_id']").parents("label:first");
if(action == 64){
$("input[name='regionDictIds'][regiontype='1']").prop("checked",true);
$(label).hide();
}else{
$(label).show();
}
}
}
/**
* 模板下载