mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-06 06:40:27 +08:00
浏览访问日志时自动用点符号标记有数据的分表
This commit is contained in:
67
internal/web/actions/default/servers/logs/hasLogs.go
Normal file
67
internal/web/actions/default/servers/logs/hasLogs.go
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||||
|
|
||||||
|
package logs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
timeutil "github.com/iwind/TeaGo/utils/time"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// HasLogsAction 检查某个分区是否有日志
|
||||||
|
type HasLogsAction struct {
|
||||||
|
actionutils.ParentAction
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *HasLogsAction) RunPost(params struct {
|
||||||
|
ClusterId int64
|
||||||
|
NodeId int64
|
||||||
|
Day string
|
||||||
|
Hour string
|
||||||
|
Keyword string
|
||||||
|
Ip string
|
||||||
|
Domain string
|
||||||
|
HasError int
|
||||||
|
HasWAF int
|
||||||
|
Partition int32 `default:"-1"`
|
||||||
|
|
||||||
|
RequestId string
|
||||||
|
ServerId int64
|
||||||
|
}) {
|
||||||
|
if len(params.Day) == 0 {
|
||||||
|
params.Day = timeutil.Format("Y-m-d")
|
||||||
|
}
|
||||||
|
|
||||||
|
var day = params.Day
|
||||||
|
|
||||||
|
if len(day) > 0 && regexp.MustCompile(`\d{4}-\d{2}-\d{2}`).MatchString(day) {
|
||||||
|
day = strings.ReplaceAll(day, "-", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := this.RPC().HTTPAccessLogRPC().ListHTTPAccessLogs(this.AdminContext(), &pb.ListHTTPAccessLogsRequest{
|
||||||
|
Partition: params.Partition,
|
||||||
|
RequestId: params.RequestId,
|
||||||
|
NodeClusterId: params.ClusterId,
|
||||||
|
NodeId: params.NodeId,
|
||||||
|
ServerId: params.ServerId,
|
||||||
|
HasError: params.HasError > 0,
|
||||||
|
HasFirewallPolicy: params.HasWAF > 0,
|
||||||
|
Day: day,
|
||||||
|
HourFrom: params.Hour,
|
||||||
|
HourTo: params.Hour,
|
||||||
|
Keyword: params.Keyword,
|
||||||
|
Ip: params.Ip,
|
||||||
|
Domain: params.Domain,
|
||||||
|
Size: 1,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Data["hasLogs"] = len(resp.HttpAccessLogs) > 0
|
||||||
|
|
||||||
|
this.Success()
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@ func init() {
|
|||||||
Get("", new(IndexAction)).
|
Get("", new(IndexAction)).
|
||||||
GetPost("/settings", new(SettingsAction)).
|
GetPost("/settings", new(SettingsAction)).
|
||||||
Post("/partitionData", new(PartitionDataAction)).
|
Post("/partitionData", new(PartitionDataAction)).
|
||||||
|
Post("/hasLogs", new(HasLogsAction)).
|
||||||
EndAll()
|
EndAll()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
3
web/public/js/components/common/dot.js
Normal file
3
web/public/js/components/common/dot.js
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Vue.component("dot", {
|
||||||
|
template: '<span style="display: inline-block; padding-bottom: 3px"><i class="icon circle tiny"></i></span>'
|
||||||
|
})
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
Vue.component("http-access-log-partitions-box", {
|
Vue.component("http-access-log-partitions-box", {
|
||||||
props: ["v-partition", "v-day"],
|
props: ["v-partition", "v-day", "v-query"],
|
||||||
mounted: function () {
|
mounted: function () {
|
||||||
let that = this
|
let that = this
|
||||||
Tea.action("/servers/logs/partitionData")
|
Tea.action("/servers/logs/partitionData")
|
||||||
@@ -11,13 +11,18 @@ Vue.component("http-access-log-partitions-box", {
|
|||||||
resp.data.partitions.reverse().forEach(function (v) {
|
resp.data.partitions.reverse().forEach(function (v) {
|
||||||
that.partitions.push({
|
that.partitions.push({
|
||||||
code: v,
|
code: v,
|
||||||
isDisabled: false
|
isDisabled: false,
|
||||||
|
hasLogs: false
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
if (that.partitions.length > 0) {
|
if (that.partitions.length > 0) {
|
||||||
if (that.vPartition == null || that.vPartition < 0) {
|
if (that.vPartition == null || that.vPartition < 0) {
|
||||||
that.selectedPartition = that.partitions[0].code
|
that.selectedPartition = that.partitions[0].code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (that.partitions.length > 1) {
|
||||||
|
that.checkLogs()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.post()
|
.post()
|
||||||
@@ -25,7 +30,8 @@ Vue.component("http-access-log-partitions-box", {
|
|||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
partitions: [],
|
partitions: [],
|
||||||
selectedPartition: this.vPartition
|
selectedPartition: this.vPartition,
|
||||||
|
checkingPartition: 0
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -48,12 +54,43 @@ Vue.component("http-access-log-partitions-box", {
|
|||||||
p.isDisabled = true
|
p.isDisabled = true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
checkLogs: function () {
|
||||||
|
let that = this
|
||||||
|
let index = this.checkingPartition
|
||||||
|
let params = {
|
||||||
|
partition: index
|
||||||
|
}
|
||||||
|
let query = this.vQuery
|
||||||
|
if (query == null || query.length == 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
query.split("&").forEach(function (v) {
|
||||||
|
let param = v.split("=")
|
||||||
|
params[param[0]] = decodeURIComponent(param[1])
|
||||||
|
})
|
||||||
|
Tea.action("/servers/logs/hasLogs")
|
||||||
|
.params(params)
|
||||||
|
.post()
|
||||||
|
.success(function (response) {
|
||||||
|
if (response.data.hasLogs) {
|
||||||
|
// 因为是倒序,所以这里需要使用总长度减去index
|
||||||
|
that.partitions[that.partitions.length - 1 - index].hasLogs = true
|
||||||
|
}
|
||||||
|
|
||||||
|
index++
|
||||||
|
if (index >= that.partitions.length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
that.checkingPartition = index
|
||||||
|
that.checkLogs()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
template: `<div v-if="partitions.length > 1">
|
template: `<div v-if="partitions.length > 1">
|
||||||
<div class="ui divider" style="margin-bottom: 0"></div>
|
<div class="ui divider" style="margin-bottom: 0"></div>
|
||||||
<div class="ui menu text small blue" style="margin-bottom: 0; margin-top: 0">
|
<div class="ui menu text small blue" style="margin-bottom: 0; margin-top: 0">
|
||||||
<a v-for="(p, index) in partitions" :href="url(p.code)" class="item" :class="{active: selectedPartition == p.code, disabled: p.isDisabled}">分表{{p.code+1}} <span class="disabled" v-if="index != partitions.length - 1">|</span></a>
|
<a v-for="(p, index) in partitions" :href="url(p.code)" class="item" :class="{active: selectedPartition == p.code, disabled: p.isDisabled}">分表{{p.code+1}} <span v-if="p.hasLogs"> <dot></dot></span> <span class="disabled" v-if="index != partitions.length - 1">|</span></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="ui divider" style="margin-top: 0"></div>
|
<div class="ui divider" style="margin-top: 0"></div>
|
||||||
</div>`
|
</div>`
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
{$template "/datepicker"}
|
{$template "/datepicker"}
|
||||||
|
|
||||||
<first-menu>
|
<first-menu>
|
||||||
<menu-item :href="path + '?clusterId=' + clusterId + '&nodeId=' + nodeId + '&serverId=' + serverId + '&day=' + day + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize" :active="hasError == 0 && hasWAF == 0">所有日志</menu-item>
|
<menu-item :href="path + '?' + query('')" :active="hasError == 0 && hasWAF == 0">所有日志</menu-item>
|
||||||
<menu-item :href="path + '?clusterId=' + clusterId + '&nodeId=' + nodeId + '&serverId=' + serverId + '&day=' + day + '&hasError=1' + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize" :active="hasError > 0">错误日志</menu-item>
|
<menu-item :href="path + '?' + query('hasError=1')" :active="hasError > 0">错误日志</menu-item>
|
||||||
<menu-item :href="path + '?clusterId=' + clusterId + '&nodeId=' + nodeId + '&serverId=' + serverId + '&day=' + day + '&hasWAF=1' + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize" :active="hasWAF > 0">WAF日志</menu-item>
|
<menu-item :href="path + '?' + query('hasWAF=1')" :active="hasWAF > 0">WAF日志</menu-item>
|
||||||
<span class="item disabled">|</span>
|
<span class="item disabled">|</span>
|
||||||
<menu-item :href="'/servers/logs/settings'" code="settings">设置</menu-item>
|
<menu-item :href="'/servers/logs/settings'" code="settings">设置</menu-item>
|
||||||
</first-menu>
|
</first-menu>
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
</http-access-log-search-box>
|
</http-access-log-search-box>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
<http-access-log-partitions-box :v-partition="partition" :v-day="day"></http-access-log-partitions-box>
|
<http-access-log-partitions-box :v-partition="partition" :v-day="day" :v-query="currentQuery"></http-access-log-partitions-box>
|
||||||
|
|
||||||
<warning-message v-if="isSlowQuery">看起来你的访问日志查询非常慢({{slowQueryCost}}s),建议<span v-if="domain.length == 0"> 1)指定具体域名查询;2)</span>通过添加新的 <a href="/db">[日志节点]</a> 来分散存储访问日志。</warning-message>
|
<warning-message v-if="isSlowQuery">看起来你的访问日志查询非常慢({{slowQueryCost}}s),建议<span v-if="domain.length == 0"> 1)指定具体域名查询;2)</span>通过添加新的 <a href="/db">[日志节点]</a> 来分散存储访问日志。</warning-message>
|
||||||
|
|
||||||
@@ -43,10 +43,10 @@
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div v-if="accessLogs.length > 0">
|
<div v-if="accessLogs.length > 0">
|
||||||
<a :href="path + '?clusterId=' + clusterId + '&nodeId=' + nodeId + '&serverId=' + serverId + '&requestId=' + lastRequestId + '&day=' + day + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize + '&partition=' + partition" v-if="hasPrev">上一页</a>
|
<a :href="path + '?' + query('requestId=' + lastRequestId + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&partition=' + partition)" v-if="hasPrev">上一页</a>
|
||||||
<span v-else class="disabled">上一页</span>
|
<span v-else class="disabled">上一页</span>
|
||||||
<span class="disabled"> | </span>
|
<span class="disabled"> | </span>
|
||||||
<a :href="path + '?clusterId=' + clusterId + '&nodeId=' + nodeId + '&serverId=' + serverId + '&requestId=' + nextRequestId + '&day=' + day + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize + '&partition=' + partition" v-if="hasMore">下一页</a>
|
<a :href="path + '?' + query('requestId=' + nextRequestId + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&partition=' + partition)" v-if="hasMore">下一页</a>
|
||||||
<span v-else class="disabled">下一页</span>
|
<span v-else class="disabled">下一页</span>
|
||||||
|
|
||||||
<page-size-selector></page-size-selector>
|
<page-size-selector></page-size-selector>
|
||||||
|
|||||||
@@ -19,4 +19,60 @@ Tea.context(function () {
|
|||||||
accessLog.wafInfo = null
|
accessLog.wafInfo = null
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.query = function (args) {
|
||||||
|
// 初始化时页面尚未设置Vue变量,所以使用全局的变量获取
|
||||||
|
let that = TEA.ACTION.data
|
||||||
|
|
||||||
|
if (that.clusterId == null) {
|
||||||
|
that.clusterId = 0
|
||||||
|
}
|
||||||
|
if (that.nodeId == null) {
|
||||||
|
that.nodeId = 0
|
||||||
|
}
|
||||||
|
if (that.serverId == null) {
|
||||||
|
that.serverId = 0
|
||||||
|
}
|
||||||
|
if (that.day == null) {
|
||||||
|
that.day = ""
|
||||||
|
}
|
||||||
|
if (that.keyword == null) {
|
||||||
|
that.keyword = ""
|
||||||
|
}
|
||||||
|
if (that.ip == null) {
|
||||||
|
that.ip = ""
|
||||||
|
}
|
||||||
|
if (that.domain == null) {
|
||||||
|
that.domain = ""
|
||||||
|
}
|
||||||
|
if (that.hour == null) {
|
||||||
|
that.hour = ""
|
||||||
|
}
|
||||||
|
if (that.pageSize == null) {
|
||||||
|
that.pageSize = 0
|
||||||
|
}
|
||||||
|
let query = 'clusterId=' + that.clusterId + '&nodeId=' + that.nodeId + '&serverId=' + that.serverId + '&day=' + that.day + '&keyword=' + encodeURIComponent(that.keyword) + '&ip=' + that.ip + '&domain=' + that.domain + '&hour=' + that.hour + '&pageSize=' + that.pageSize
|
||||||
|
|
||||||
|
if (args != null && args.length > 0) {
|
||||||
|
query += "&" + args
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
this.allQuery = function () {
|
||||||
|
if (this.query == null) {
|
||||||
|
// 尚未初始化完成
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let query = this.query()
|
||||||
|
if (this.hasError == 1) {
|
||||||
|
query += "&hasError=1"
|
||||||
|
}
|
||||||
|
if (this.hasWAF == 1) {
|
||||||
|
query += "&hasWAF=1"
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
this.currentQuery = this.allQuery()
|
||||||
})
|
})
|
||||||
@@ -15,9 +15,9 @@
|
|||||||
{$template "/left_menu_with_menu"}
|
{$template "/left_menu_with_menu"}
|
||||||
<div class="right-box with-menu">
|
<div class="right-box with-menu">
|
||||||
<first-menu>
|
<first-menu>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&day=' + day + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize" :active="hasError == 0 && hasWAF == 0">所有日志</menu-item>
|
<menu-item :href="path + '?' + query()" :active="hasError == 0 && hasWAF == 0">所有日志</menu-item>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&day=' + day + '&hasError=1' + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize" :active="hasError > 0">错误日志</menu-item>
|
<menu-item :href="path + '?' + query('hasError=1')" :active="hasError > 0">错误日志</menu-item>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&day=' + day + '&hasWAF=1' + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize" :active="hasWAF > 0">WAF日志</menu-item>
|
<menu-item :href="path + '?' + query('hasWAF=1')" :active="hasWAF > 0">WAF日志</menu-item>
|
||||||
</first-menu>
|
</first-menu>
|
||||||
|
|
||||||
<form method="get" class="ui form small" :action="path">
|
<form method="get" class="ui form small" :action="path">
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<!-- 分区 -->
|
<!-- 分区 -->
|
||||||
<http-access-log-partitions-box :v-day="day" :v-partition="partition"></http-access-log-partitions-box>
|
<http-access-log-partitions-box :v-day="day" :v-partition="partition" :v-query="currentQuery"></http-access-log-partitions-box>
|
||||||
|
|
||||||
<p class="comment" v-if="accessLogs.length == 0">暂时还没有访问日志。</p>
|
<p class="comment" v-if="accessLogs.length == 0">暂时还没有访问日志。</p>
|
||||||
|
|
||||||
@@ -50,10 +50,10 @@
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div v-if="accessLogs.length > 0">
|
<div v-if="accessLogs.length > 0">
|
||||||
<a :href="path + '?serverId=' + serverId + '&requestId=' + lastRequestId + '&day=' + day + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize + '&partition=' + partition" v-if="hasPrev">上一页</a>
|
<a :href="path + '?' + query('requestId=' + lastRequestId + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&partition=' + partition)" v-if="hasPrev">上一页</a>
|
||||||
<span v-else class="disabled">上一页</span>
|
<span v-else class="disabled">上一页</span>
|
||||||
<span class="disabled"> | </span>
|
<span class="disabled"> | </span>
|
||||||
<a :href="path + '?serverId=' + serverId + '&requestId=' + nextRequestId + '&day=' + day + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&hour=' + hour + '&pageSize=' + pageSize + '&partition=' + partition" v-if="hasMore">下一页</a>
|
<a :href="path + '?' + query('requestId=' + nextRequestId + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&partition=' + partition)" v-if="hasMore">下一页</a>
|
||||||
<span v-else class="disabled">下一页</span>
|
<span v-else class="disabled">下一页</span>
|
||||||
<page-size-selector></page-size-selector>
|
<page-size-selector></page-size-selector>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -19,4 +19,53 @@ Tea.context(function () {
|
|||||||
accessLog.wafInfo = null
|
accessLog.wafInfo = null
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.query = function (args) {
|
||||||
|
// 初始化时页面尚未设置Vue变量,所以使用全局的变量获取
|
||||||
|
let that = TEA.ACTION.data
|
||||||
|
|
||||||
|
if (that.serverId == null) {
|
||||||
|
that.serverId = 0
|
||||||
|
}
|
||||||
|
if (that.keyword == null) {
|
||||||
|
that.keyword = ""
|
||||||
|
}
|
||||||
|
if (that.ip == null) {
|
||||||
|
that.ip = ""
|
||||||
|
}
|
||||||
|
if (that.domain == null) {
|
||||||
|
that.domain = ""
|
||||||
|
}
|
||||||
|
if (that.pageSize == null) {
|
||||||
|
that.pageSize = ""
|
||||||
|
}
|
||||||
|
if (that.day == null) {
|
||||||
|
that.day = ""
|
||||||
|
}
|
||||||
|
if (that.hour == null) {
|
||||||
|
that.hour = ""
|
||||||
|
}
|
||||||
|
let query = 'serverId=' + that.serverId + '&day=' + that.day + '&keyword=' + encodeURIComponent(that.keyword) + '&ip=' + that.ip + '&domain=' + that.domain + '&hour=' + that.hour + '&pageSize=' + that.pageSize
|
||||||
|
if (args != null && args.length > 0) {
|
||||||
|
query += "&" + args
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
this.allQuery = function () {
|
||||||
|
if (this.query == null) {
|
||||||
|
// 尚未初始化完成
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let query = this.query()
|
||||||
|
if (this.hasError == 1) {
|
||||||
|
query += "&hasError=1"
|
||||||
|
}
|
||||||
|
if (this.hasWAF == 1) {
|
||||||
|
query += "&hasWAF=1"
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
this.currentQuery = this.allQuery()
|
||||||
})
|
})
|
||||||
@@ -13,9 +13,9 @@
|
|||||||
{$template "/left_menu_with_menu"}
|
{$template "/left_menu_with_menu"}
|
||||||
<div class="right-box with-menu">
|
<div class="right-box with-menu">
|
||||||
<first-menu>
|
<first-menu>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&pageSize=' + pageSize" :active="hasError == 0 && hasWAF == 0">所有日志</menu-item>
|
<menu-item :href="path + '?' + query()" :active="hasError == 0 && hasWAF == 0">所有日志</menu-item>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&hasError=1' + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&pageSize=' + pageSize" :active="hasError > 0">错误日志</menu-item>
|
<menu-item :href="path + '?' + query('hasError=1')" :active="hasError > 0">错误日志</menu-item>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&hasWAF=1' + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&pageSize=' + pageSize" :active="hasWAF > 0">WAF日志</menu-item>
|
<menu-item :href="path + '?' + query('hasWAF=1')" :active="hasWAF > 0">WAF日志</menu-item>
|
||||||
</first-menu>
|
</first-menu>
|
||||||
|
|
||||||
<form method="get" class="ui form small" :action="path">
|
<form method="get" class="ui form small" :action="path">
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<!-- 分区 -->
|
<!-- 分区 -->
|
||||||
<http-access-log-partitions-box :v-day="day" :v-partition="partition"></http-access-log-partitions-box>
|
<http-access-log-partitions-box :v-day="day" :v-partition="partition" :v-query="currentQuery"></http-access-log-partitions-box>
|
||||||
|
|
||||||
<p class="comment" v-if="accessLogs.length == 0">今天暂时还没有访问日志。</p>
|
<p class="comment" v-if="accessLogs.length == 0">今天暂时还没有访问日志。</p>
|
||||||
|
|
||||||
@@ -38,10 +38,10 @@
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div v-if="accessLogs.length > 0">
|
<div v-if="accessLogs.length > 0">
|
||||||
<a :href="path + '?serverId=' + serverId + '&requestId=' + lastRequestId + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&pageSize=' + pageSize + '&partition=' + partition" v-if="hasPrev">上一页</a>
|
<a :href="path + '?' + query('requestId=' + lastRequestId + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&partition=' + partition)" v-if="hasPrev">上一页</a>
|
||||||
<span v-else class="disabled">上一页</span>
|
<span v-else class="disabled">上一页</span>
|
||||||
<span class="disabled"> | </span>
|
<span class="disabled"> | </span>
|
||||||
<a :href="path + '?serverId=' + serverId + '&requestId=' + nextRequestId + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain + '&pageSize=' + pageSize + '&partition=' + partition" v-if="hasMore">下一页</a>
|
<a :href="path + '?' + query('&requestId=' + nextRequestId + '&hasError=' + hasError + '&hasWAF=' + hasWAF + '&partition=' + partition)" v-if="hasMore">下一页</a>
|
||||||
<span v-else class="disabled">下一页</span>
|
<span v-else class="disabled">下一页</span>
|
||||||
<page-size-selector></page-size-selector>
|
<page-size-selector></page-size-selector>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,4 +12,47 @@ Tea.context(function () {
|
|||||||
accessLog.wafInfo = null
|
accessLog.wafInfo = null
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.query = function (args) {
|
||||||
|
// 初始化时页面尚未设置Vue变量,所以使用全局的变量获取
|
||||||
|
let that = TEA.ACTION.data
|
||||||
|
|
||||||
|
if (that.serverId == null) {
|
||||||
|
that.serverId = 0
|
||||||
|
}
|
||||||
|
if (that.keyword == null) {
|
||||||
|
that.keyword = ""
|
||||||
|
}
|
||||||
|
if (that.ip == null) {
|
||||||
|
that.ip = ""
|
||||||
|
}
|
||||||
|
if (that.domain == null) {
|
||||||
|
that.domain = ""
|
||||||
|
}
|
||||||
|
if (that.pageSize == null) {
|
||||||
|
that.pageSize = ""
|
||||||
|
}
|
||||||
|
let query = 'serverId=' + that.serverId + '&keyword=' + encodeURIComponent(that.keyword) + '&ip=' + that.ip + '&domain=' + that.domain + '&pageSize=' + that.pageSize
|
||||||
|
if (args != null && args.length > 0) {
|
||||||
|
query += "&" + args
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
this.allQuery = function () {
|
||||||
|
if (this.query == null) {
|
||||||
|
// 尚未初始化完成
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let query = this.query()
|
||||||
|
if (this.hasError == 1) {
|
||||||
|
query += "&hasError=1"
|
||||||
|
}
|
||||||
|
if (this.hasWAF == 1) {
|
||||||
|
query += "&hasWAF=1"
|
||||||
|
}
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
this.currentQuery = this.allQuery()
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user