summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author段冬梅 <[email protected]>2018-12-12 19:35:46 +0800
committer段冬梅 <[email protected]>2018-12-12 19:35:46 +0800
commit4833c228873bbd11dacc0cf27fcc2db5c0e5957a (patch)
tree426a45acb0f39e8eb7e00bcda93caced765446fe
parent20179ffa776841d3c7c7a036cd3e15e2905d21a6 (diff)
radius泛收日志功能增加
-rw-r--r--src/main/java/com/nis/domain/log/NtcCollectRadiusLog.java39
-rw-r--r--src/main/java/com/nis/util/Constants.java1
-rw-r--r--src/main/java/com/nis/web/controller/log/ntc/NtcCollectRadiusLogController.java74
-rw-r--r--src/main/resources/messages/message_en.properties7
-rw-r--r--src/main/resources/messages/message_ru.properties7
-rw-r--r--src/main/resources/messages/message_zh_CN.properties7
-rw-r--r--src/main/resources/nis.properties3
-rw-r--r--src/main/resources/sql/20181212/add_data_dictionary.sql18
-rw-r--r--src/main/resources/sql/20181212/add_sys_menu.sql2
-rw-r--r--src/main/webapp/WEB-INF/views/log/ntc/radiusLogList.jsp354
10 files changed, 508 insertions, 4 deletions
diff --git a/src/main/java/com/nis/domain/log/NtcCollectRadiusLog.java b/src/main/java/com/nis/domain/log/NtcCollectRadiusLog.java
new file mode 100644
index 0000000..3f932f9
--- /dev/null
+++ b/src/main/java/com/nis/domain/log/NtcCollectRadiusLog.java
@@ -0,0 +1,39 @@
+package com.nis.domain.log;
+
+public class NtcCollectRadiusLog extends BaseLogEntity<NtcCollectRadiusLog> {
+
+ private static final long serialVersionUID = -4947912502754359817L;
+
+ protected Integer code;
+ protected String nasIp;
+ protected String framedIp;
+ protected String account;
+ public Integer getCode() {
+ return code;
+ }
+ public void setCode(Integer code) {
+ this.code = code;
+ }
+ public String getNasIp() {
+ return nasIp;
+ }
+ public void setNasIp(String nasIp) {
+ this.nasIp = nasIp;
+ }
+ public String getFramedIp() {
+ return framedIp;
+ }
+ public void setFramedIp(String framedIp) {
+ this.framedIp = framedIp;
+ }
+ public String getAccount() {
+ return account;
+ }
+ public void setAccount(String account) {
+ this.account = account;
+ }
+
+
+
+
+}
diff --git a/src/main/java/com/nis/util/Constants.java b/src/main/java/com/nis/util/Constants.java
index 8139d72..e353768 100644
--- a/src/main/java/com/nis/util/Constants.java
+++ b/src/main/java/com/nis/util/Constants.java
@@ -766,4 +766,5 @@ public final class Constants {
//日志查询接口URL
public static final String DNS_SPOOFING_IP_DESC = Configurations.getStringProperty("dns_spoofing_ip_desc","");
public static final String DNS_SPOOFING_IP_IP = Configurations.getStringProperty("dns_spoofing_ip_ip","");
+ public static final String NTC_COLLECT_RADIUS_LOG =Configurations.getStringProperty("ntcCollectRadiusLog","");
}
diff --git a/src/main/java/com/nis/web/controller/log/ntc/NtcCollectRadiusLogController.java b/src/main/java/com/nis/web/controller/log/ntc/NtcCollectRadiusLogController.java
new file mode 100644
index 0000000..77506b1
--- /dev/null
+++ b/src/main/java/com/nis/web/controller/log/ntc/NtcCollectRadiusLogController.java
@@ -0,0 +1,74 @@
+package com.nis.web.controller.log.ntc;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+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 com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.reflect.TypeToken;
+import com.nis.domain.FunctionServiceDict;
+import com.nis.domain.Page;
+import com.nis.domain.PageLog;
+import com.nis.domain.log.IrDnatLog;
+import com.nis.domain.log.IrSnatLog;
+import com.nis.domain.log.NtcCollectRadiusLog;
+import com.nis.domain.maat.LogRecvData;
+import com.nis.util.Constants;
+import com.nis.util.DictUtils;
+import com.nis.util.httpclient.HttpClientUtil;
+import com.nis.web.controller.BaseController;
+
+@Controller
+@RequestMapping("${adminPath}/log/ntc/radiusLogs")
+public class NtcCollectRadiusLogController extends BaseController {
+
+ @RequestMapping(value = {"list", ""})
+ public String list(@ModelAttribute("log") IrSnatLog log, Model model, HttpServletRequest request, HttpServletResponse response) {
+ try {
+ PageLog<NtcCollectRadiusLog> page = new PageLog<NtcCollectRadiusLog>(request, response);
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("pageSize", page.getPageSize());
+ params.put("pageNo", page.getPageNo());
+ initLogSearchValue(log, params);
+
+ List<FunctionServiceDict> serviceList = DictUtils.getFunctionServiceDictList(log.getFunctionId());
+ model.addAttribute("serviceList", serviceList);
+
+ String url =Constants.LOG_BASE_URL + Constants.NTC_COLLECT_RADIUS_LOG;
+ String recv = HttpClientUtil.getMsg(url, params, request);
+
+ if (StringUtils.isNotBlank(recv)) {
+ Gson gson = new GsonBuilder().create();
+ LogRecvData<NtcCollectRadiusLog> fromJson = gson.fromJson(recv, new TypeToken<LogRecvData<NtcCollectRadiusLog>>(){}.getType());
+ if (fromJson.getStatus().intValue() == 200) {
+ Page<NtcCollectRadiusLog> data = fromJson.getData();
+ page.setCount(data.getCount());
+ page.setLast(data.getLast());
+ page.setList(data.getList());
+ List<NtcCollectRadiusLog> list = page.getList();
+ for (NtcCollectRadiusLog l : list) {
+ l.setFunctionId(log.getFunctionId());
+ setLogAction(l,serviceList);
+ }
+ model.addAttribute("page", page);
+ }
+ }
+ } catch (Exception e) {
+ logger.error("查询失败", e);
+ addMessageLog(model, e.getMessage());
+ }
+
+ return "/log/ntc/radiusLogList";
+ }
+
+}
diff --git a/src/main/resources/messages/message_en.properties b/src/main/resources/messages/message_en.properties
index 0882e12..91d95c7 100644
--- a/src/main/resources/messages/message_en.properties
+++ b/src/main/resources/messages/message_en.properties
@@ -1358,4 +1358,9 @@ show_available_ips=View available IP
log_search_http_monit=HTTP Monitor
log_search_http_reject=HTTP Block
log_search_keyword_monit=Keyword Monitor
-log_search_keyword_reject=Keyword Block \ No newline at end of file
+log_search_keyword_reject=Keyword Block
+radius_log=Radius Identify
+message_type=Code
+nas_ip=NAS IP Address
+framed_ip=Framed IP Address
+log_user_name=User Name \ No newline at end of file
diff --git a/src/main/resources/messages/message_ru.properties b/src/main/resources/messages/message_ru.properties
index 6b7a3d6..e72b00e 100644
--- a/src/main/resources/messages/message_ru.properties
+++ b/src/main/resources/messages/message_ru.properties
@@ -1362,4 +1362,9 @@ show_available_ips=\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C
log_search_http_monit=HTTP \u041C\u043E\u043D\u0438\u0442\u043E\u0440\u0438\u043D\u0433
log_search_http_reject=HTTP \u0411\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435
log_search_keyword_monit=\u041C\u043E\u043D\u0438\u0442\u043E\u0440\u0438\u043D\u0433 \u041A\u043B\u044E\u0447\u0435\u0432\u044B\u0445 \u0421\u043B\u043E\u0432
-log_search_keyword_reject=\u0411\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u041A\u043B\u044E\u0447\u0435\u0432\u044B\u0445 \u0421\u043B\u043E\u0432 \ No newline at end of file
+log_search_keyword_reject=\u0411\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u041A\u043B\u044E\u0447\u0435\u0432\u044B\u0445 \u0421\u043B\u043E\u0432
+radius_log=Radius Identify
+message_type=Code
+nas_ip=NAS IP Address
+framed_ip=Framed IP Address
+log_user_name=User Name \ No newline at end of file
diff --git a/src/main/resources/messages/message_zh_CN.properties b/src/main/resources/messages/message_zh_CN.properties
index b1d33ca..d01629e 100644
--- a/src/main/resources/messages/message_zh_CN.properties
+++ b/src/main/resources/messages/message_zh_CN.properties
@@ -1358,4 +1358,9 @@ website_keyword_reject=\u5173\u952E\u5B57\u963B\u65AD
log_search_http_monit=HTTP\u76D1\u6D4B
log_search_http_reject=HTTP\u963B\u65AD
log_search_keyword_monit=\u5173\u952E\u5B57\u76D1\u6D4B
-log_search_keyword_reject=\u5173\u952E\u5B57\u963B\u65AD \ No newline at end of file
+log_search_keyword_reject=\u5173\u952E\u5B57\u963B\u65AD
+radius_log=Radius \u534F\u8BAE
+message_type=Code
+nas_ip=NAS IP Address
+framed_ip=Framed IP Address
+log_user_name=User Name \ No newline at end of file
diff --git a/src/main/resources/nis.properties b/src/main/resources/nis.properties
index f933d84..f8ebfbe 100644
--- a/src/main/resources/nis.properties
+++ b/src/main/resources/nis.properties
@@ -582,4 +582,5 @@ redis.expire=1800
redis.timeout=10000
dns_spoofing_ip_desc=Default Spoofing IP
dns_spoofing_ip_ip=1.1.1.1
-trafficBandwidthTransTwo=trafficBandwidthTransTwo \ No newline at end of file
+trafficBandwidthTransTwo=trafficBandwidthTransTwo
+ntcCollectRadiusLog=ntcCollectRadiusLogs \ No newline at end of file
diff --git a/src/main/resources/sql/20181212/add_data_dictionary.sql b/src/main/resources/sql/20181212/add_data_dictionary.sql
new file mode 100644
index 0000000..90e0bf6
--- /dev/null
+++ b/src/main/resources/sql/20181212/add_data_dictionary.sql
@@ -0,0 +1,18 @@
+#RADIUS协议日志 报文类型
+INSERT INTO `sys_data_dictionary_name` (`id`, `module_name`, `mark`, `remark`, `revision`, `create_time`, `modify_time`, `status`) VALUES ('149', 'RADIUS协议日志', 'MESSAGE_TYPE', '报文类型', '', '2018-12-12 17:22:38', '2018-12-12 17:22:38', '1');
+
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3945', '1', 'Access-Request', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3946', '2', 'Access-Accept', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3947', '3', 'Access-Reject', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3948', '4', 'Accounting-Request', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3949', '5', 'Accounting-Response', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3950', '11', 'Access-Challenge', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3951', '12', 'Status-Server—Experimental', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3952', '13', 'Status-Client—Experimental', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3953', '40', 'Disconnect-Request', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3954', '41', 'Disconnect-ACK', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3955', '42', 'Disconnect-NAK', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3956', '43', 'CoA-Request', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3957', '44', 'CoA-ACK', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3958', '45', 'CoA-NAK', '', '0', '1', '1', '149');
+INSERT INTO `sys_data_dictionary_item` (`id`, `item_code`, `item_value`, `item_desc`, `item_sort`, `status`, `type`, `dictionary_id`) VALUES ('3959', '255', 'Reserved', '', '0', '1', '1', '149');
diff --git a/src/main/resources/sql/20181212/add_sys_menu.sql b/src/main/resources/sql/20181212/add_sys_menu.sql
new file mode 100644
index 0000000..2a58d1a
--- /dev/null
+++ b/src/main/resources/sql/20181212/add_sys_menu.sql
@@ -0,0 +1,2 @@
+#添加 RADIUS协议日志
+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 ('1179', '1131', '0,1,152,1131,', 'radius_log', 'RADIUS协议日志', '80', '/log/ntc/radiusLogs', '', '', '1', '', '1', '2018-12-12 15:14:37', '1', '2018-12-12 15:14:37', '', '1', NULL, '0', '0', '');
diff --git a/src/main/webapp/WEB-INF/views/log/ntc/radiusLogList.jsp b/src/main/webapp/WEB-INF/views/log/ntc/radiusLogList.jsp
new file mode 100644
index 0000000..3108c54
--- /dev/null
+++ b/src/main/webapp/WEB-INF/views/log/ntc/radiusLogList.jsp
@@ -0,0 +1,354 @@
+<%@ page contentType="text/html;charset=UTF-8"%>
+<%@ include file="/WEB-INF/include/taglib.jsp"%>
+<html>
+<head>
+<title>
+ IP<spring:message code="log"></spring:message>
+</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);
+ });
+ $(".Wdate").attr("value",'');
+ $(':input','#searchForm')
+ .not(':button,:submit,:reset,:hidden')
+ .attr("value",'');
+ $("#searchForm")[0].reset();
+ });
+ //筛选功能
+ filterActionInit();
+
+
+ $("span[id^=close]").on("click",function(){
+ var closeId=$(this).attr("id");
+ var openId=$(this).attr("id").replace("close","open");
+ $("#"+closeId).hide();
+ $("#"+openId).show();
+ $("#"+closeId).parent().parent().next("tr").hide();
+ });
+ });
+</script>
+</head>
+<body>
+
+<div class="page-content">
+ <div class="theme-panel hidden-xs hidden-sm">
+ </div>
+ <h3 class="page-title">
+ <spring:message code="radius_log"/>
+ </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="log" action="${ctx}/log/ntc/radiusLogs/list" 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}"/>
+ <input id="functionId" name="functionId" type="hidden" value="${log.functionId}"/>
+ <input id="isLogTotalSearch" name="isLogTotalSearch" type="hidden" value="${log.isLogTotalSearch}"/>
+ <!-- 筛选按钮展开状态-->
+ <input id="isFilterAction" name="isFilterAction" type="hidden" value="${log.isFilterAction }"/>
+ <sys:tableSort id="orderBy" name="orderBy.
+ " value="${page.orderBy}" callback="page();" />
+ <!-- 搜索内容与操作按钮栏 -->
+ <div class="col-md-12">
+ <%-- <div class="pull-left">
+ <form:select path="service" class="selectpicker select2 input-small">
+ <form:option value=""><spring:message code="action"/></form:option>
+ <c:forEach items="${serviceList}" var="service"
+ varStatus="satus">
+ <c:forEach items="${fns:getDictList('SERVICE_ACTION') }" var="dict">
+ <c:if test="${(dict.itemCode eq service.action) && (service.action ne 128) && (service.action ne 32) && (service.action ne 96) && (service.serviceId ne 37)&& (service.serviceId ne 149) }">
+ <form:option value="${service.serviceId}"><spring:message code="${dict.itemValue}"/></form:option>
+ </c:if>
+ </c:forEach>
+ </c:forEach>
+ </form:select>
+ </div> --%>
+ <div class="pull-left">
+ <div class="input-group">
+ <div class="input-group-btn">
+ <span class="selectpicker form-control" ><spring:message code="begin_date"/></span>
+ </div>
+ <input name="searchFoundStartTime" type="text" readonly="readonly" maxlength="20" class="form-control Wdate input-medium"
+ value="${log.searchFoundStartTime}" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
+ </div>
+ </div>
+ <div class="pull-left">
+ <div class="input-group">
+ <div class="input-group-btn">
+ <span class="selectpicker form-control" ><spring:message code="end_date"/></span>
+ </div>
+ <input name="searchFoundEndTime" type="text" readonly="readonly" maxlength="20" class="form-control Wdate input-medium"
+ value="${log.searchFoundEndTime}" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss',isShowClear:true});"/>
+ </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>
+ <button type="button" class="btn btn-default" id="filter-btn"> <spring:message code="filter"/><i class="fa fa-angle-double-down"></i></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>
+ <!-- 搜索内容与操作按钮栏 -->
+
+ <!-- 筛选搜索内容栏默认隐藏-->
+ <div class="col-md-12 filter-action-select-panle hide" >
+ <div class="row">
+ <div class="col-md-2">
+ <div class="form-group">
+ <label class="control-label"><spring:message code='transport_layer_protocol'/>:</label>
+ <form:select path="transProto" class="selectpicker form-control">
+ <form:option value=""><spring:message code="select"/></form:option>
+ <c:forEach items="${fns:getDictList('LOG_PROTOCOL')}" var="protocol" >
+ <form:option value="${protocol.itemCode}"><spring:message code="${protocol.itemValue}"></spring:message></form:option>
+ </c:forEach>
+ </form:select>
+ </div>
+ </div>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label class="control-label"><spring:message code="direction"/>:</label>
+ <form:select path="direction" class="selectpicker form-control">
+ <form:option value=""><spring:message code="select"/></form:option>
+ <c:forEach items="${fns:getDictList('LOG_DIRECTION')}" var="direction" >
+ <form:option value="${direction.itemCode}"><spring:message code="${direction.itemValue}"></spring:message></form:option>
+ </c:forEach>
+ </form:select>
+ </div>
+ </div>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="entrance"/>:</label>
+ <form:select path="entranceId" class="selectpicker form-control" data-live-search="true" data-live-search-placeholder="search">
+ <form:option value=""><spring:message code="select"/></form:option>
+ <c:forEach items="${fns:getDictList('ENTRANCE')}" var="entrance" >
+ <form:option value="${entrance.itemCode}"><spring:message code="${entrance.itemValue}"></spring:message></form:option>
+ </c:forEach>
+ </form:select>
+ </div>
+ </div>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="clj_ip"></spring:message>:</label>
+ <input name="capIp" type="text" class="form-control" value="${log.capIp }"/>
+ </div>
+ </div>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="clientip"></spring:message>:</label>
+ <input name="sIp" type="text" class="form-control" value="${log.sIp }"/>
+ </div>
+ </div>
+
+ <div class="col-md-2">
+ <div class="form-group">
+ <label><spring:message code="serverip"></spring:message>:</label>
+ <input name="dIp" type="text" class="form-control" value="${log.dIp }"/>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-2">
+ <label><spring:message code="cfg_id"></spring:message>:</label>
+ <input name="cfgId" type="text" class="form-control logCfgId number" value="${log.cfgId }"/>
+ </div>
+ </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><spring:message code="log"/></th>
+ <th class="sort-column cfg_id " isVisible="false" ><spring:message code="cfg_id"/></th>
+ <th class="sort-column service" isVisible="false"><spring:message code="action"/></th>
+ <th class="sort-column found_time"><spring:message code="found_time"/></th>
+ <th class="sort-column recv_time" isVisible="false"><spring:message code="recv_time"/></th>
+ <th class="sort-column entrance_id" isVisible="false"><spring:message code="entrance_id"/></th>
+
+ <th class="sort-column code" ><spring:message code="message_type"/></th>
+ <th class="sort-column nas_ip"><spring:message code="nas_ip"/></th>
+ <th class="sort-column framed_ip"><spring:message code='framed_ip'/></th>
+ <th class="sort-column account"><spring:message code="log_user_name"/></th>
+
+
+ <th class="sort-column cap_ip" isVisible="false"><spring:message code="clj_ip"/></th>
+ <th class="sort-column trans_proto"><spring:message code="transport_layer_protocol"/></th>
+ <th class="sort-column addr_type"><spring:message code='addr_type'/></th>
+ <th class="sort-column d_ip"><spring:message code="server_ip"/></th>
+ <th class="sort-column s_ip"><spring:message code="client_ip"/></th>
+ <th class="sort-column d_port"><spring:message code="server_port"/></th>
+ <th class="sort-column s_port"><spring:message code="client_port"/></th>
+ <th class="sort-column device_id" isVisible="false"><spring:message code="deviceid"/></th>
+ <th class="sort-column link_id" isVisible="false"><spring:message code="link_id"/></th>
+ <th class="sort-column encap_type"><spring:message code="encap_type"/></th>
+ <th class="sort-column direction"><spring:message code="direction"/></th>
+ <th class="sort-column inner_smac"><spring:message code="inner_smac"/></th>
+ <th class="sort-column inner_dmac"><spring:message code="inner_dmac"/></th>
+ <th class="sort-column stream_dir"><spring:message code="stream_type"/></th>
+
+ <th class="sort-column addr_list"><spring:message code="nest_addr_list"/></th>
+ <th class="sort-column server_locate"><spring:message code='server_locate'/></th>
+ <th class="sort-column client_locate"><spring:message code='client_locate'/></th>
+ <th class="sort-column s_asn" isVisible="false"><spring:message code='s_asn'/></th>
+ <th class="sort-column d_asn" isVisible="false"><spring:message code='d_asn'/></th>
+ <th class="sort-column s_subscribe_id" isVisible="false"><spring:message code='s_subscribe_id'/></th>
+ <th class="sort-column d_subscribe_id" isVisible="false"><spring:message code='d_subscribe_id'/></th>
+ <th class="sort-column user_region" isVisible="false"><spring:message code='user_region'/></th>
+ <c:if test="${fns:getUser().isAdmin()}"><th class="sort-column scene_file"><spring:message code='scene_file'/></th></c:if>
+ </tr>
+ </thead>
+ <tbody>
+ <c:forEach var="log" items="${page.list }" varStatus="status">
+ <tr>
+ <td>
+ <%-- <span id="open${status.index}" class="log-open-cfg" compileId="${log.cfgId }"> ▷ </span><span style="display: none" id="close${status.index}" > ▼ </span> --%>
+ <a href="javascript:void(0)" name="viewLogInfo" ><i class="icon-book-open"></i></a>
+ </td>
+ <td>${log.cfgId }</td>
+ <td>
+ <c:set var="actions">${log.action }</c:set>
+ <c:forEach items="${fns:getDictList('SERVICE_ACTION')}" var="dict">
+ <c:if test="${dict.itemCode eq log.action}">
+ <c:set var="actions">${dict.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${actions}"/>
+ </td>
+ <td>${log.foundTime }</td>
+ <td>${log.recvTime }</td>
+ <td>
+ <c:set var="entrances">${log.entranceId }</c:set>
+ <c:forEach items="${fns:getDictList('ENTRANCE')}" var="dic">
+ <c:if test="${dic.itemCode eq log.entranceId}">
+ <c:set var="entrances">${dic.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${entrances}"/>
+ </td>
+
+ <td>
+ <c:set var="codes">${log.code }</c:set>
+ <c:forEach items="${fns:getDictList('MESSAGE_TYPE')}" var="dic">
+ <c:if test="${dic.itemCode eq log.code}">
+ <c:set var="codes">${dic.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ ${codes}
+ </td>
+ <td>${log.nasIp }</td>
+ <td>${log.framedIp }</td>
+ <td>${log.account }</td>
+
+ <td title="${log.capIp }">${fns:abbr(log.capIp, 42)}</td>
+ <td>
+ <c:set var="transProtos">${log.transProto }</c:set>
+ <c:forEach items="${fns:getDictList('LOG_PROTOCOL')}" var="dic">
+ <c:if test="${dic.itemCode eq log.transProto}">
+ <c:set var="transProtos">${dic.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${transProtos}"/>
+ </td>
+ <td>
+ <c:set var="addrTypes">${log.addrType }</c:set>
+ <c:forEach items="${fns:getDictList('IP_TYPE')}" var="dic">
+ <c:if test="${log.addrType==dic.itemCode}">
+ <c:set var="addrTypes">${dic.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${addrTypes}"/>
+ </td>
+ <td title="${log.dIp }">${fns:abbr(log.dIp, 42)}</td>
+ <td title="${log.sIp }">${fns:abbr(log.sIp, 42)}</td>
+ <td>${log.dPort }</td>
+ <td>${log.sPort }</td>
+ <td>
+ <c:set var="deviceIds">${log.deviceId }</c:set>
+ <c:forEach items="${fns:getDictList('DEVICE')}" var="device">
+ <c:if test="${device.itemCode eq log.deviceId}">
+ <c:set var="deviceIds">${device.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${deviceIds}"/>
+ </td>
+ <td>
+ <c:set var="linkIds">${log.linkId }</c:set>
+ <c:forEach items="${fns:getDictList('LINK')}" var="link">
+ <c:if test="${link.itemCode eq log.linkId}">
+ <c:set var="linkIds">${link.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${linkIds}"/>
+ </td>
+ <td>
+ <c:set var="encapTypes">${log.encapType }</c:set>
+ <c:forEach items="${fns:getDictList('ENCAP_TYPE')}" var="encapType">
+ <c:if test="${encapType.itemCode eq log.encapType}">
+ <c:set var="encapTypes">${encapType.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${encapTypes}"/>
+ </td>
+ <td>
+ <c:set var="directions">${log.direction }</c:set>
+ <c:forEach items="${fns:getDictList('LOG_DIRECTION')}" var="direction">
+ <c:if test="${direction.itemCode eq log.direction}">
+ <c:set var="directions">${direction.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${directions}"/>
+ </td>
+
+ <td>${log.innerSmac }</td>
+ <td>${log.innerDmac }</td>
+ <td>
+ <c:set var="streamDirs">${log.streamDir }</c:set>
+ <c:forEach items="${fns:getDictList('LOG_STREAM_TYPE')}" var="streamType">
+ <c:if test="${streamType.itemCode eq log.streamDir}">
+ <c:set var="streamDirs">${streamType.itemValue}</c:set>
+ </c:if>
+ </c:forEach>
+ <spring:message code="${streamDirs}"/>
+ </td>
+ <td>${log.addrList }</td>
+ <td>${log.serverLocate}</td>
+ <td>${log.clientLocate}</td>
+ <td>${log.sAsn}</td>
+ <td>${log.dAsn}</td>
+ <td>${log.sSubscribeId}</td>
+ <td>${log.dSubscribeId}</td>
+ <td>${log.userRegion}</td>
+ <c:if test="${fns:getUser().isAdmin()}"><td>${log.sceneFile}</td></c:if>
+ </tr>
+ </c:forEach>
+ </tbody>
+ </table>
+ <div class="page">${page}</div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+</body>
+</html> \ No newline at end of file