mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-04 13:10:26 +08:00
访问日志搜索增加域名和IP搜索
This commit is contained in:
@@ -22,6 +22,8 @@ func (this *HistoryAction) RunGet(params struct {
|
|||||||
ServerId int64
|
ServerId int64
|
||||||
Day string
|
Day string
|
||||||
Keyword string
|
Keyword string
|
||||||
|
Ip string
|
||||||
|
Domain string
|
||||||
|
|
||||||
RequestId string
|
RequestId string
|
||||||
HasError int
|
HasError int
|
||||||
@@ -33,6 +35,8 @@ func (this *HistoryAction) RunGet(params struct {
|
|||||||
this.Data["path"] = this.Request.URL.Path
|
this.Data["path"] = this.Request.URL.Path
|
||||||
this.Data["day"] = params.Day
|
this.Data["day"] = params.Day
|
||||||
this.Data["keyword"] = params.Keyword
|
this.Data["keyword"] = params.Keyword
|
||||||
|
this.Data["ip"] = params.Ip
|
||||||
|
this.Data["domain"] = params.Domain
|
||||||
this.Data["accessLogs"] = []interface{}{}
|
this.Data["accessLogs"] = []interface{}{}
|
||||||
this.Data["hasError"] = params.HasError
|
this.Data["hasError"] = params.HasError
|
||||||
|
|
||||||
@@ -51,6 +55,8 @@ func (this *HistoryAction) RunGet(params struct {
|
|||||||
HasError: params.HasError > 0,
|
HasError: params.HasError > 0,
|
||||||
Day: day,
|
Day: day,
|
||||||
Keyword: params.Keyword,
|
Keyword: params.Keyword,
|
||||||
|
Ip: params.Ip,
|
||||||
|
Domain: params.Domain,
|
||||||
Size: size,
|
Size: size,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -84,6 +90,8 @@ func (this *HistoryAction) RunGet(params struct {
|
|||||||
HasError: params.HasError > 0,
|
HasError: params.HasError > 0,
|
||||||
Day: day,
|
Day: day,
|
||||||
Keyword: params.Keyword,
|
Keyword: params.Keyword,
|
||||||
|
Ip: params.Ip,
|
||||||
|
Domain: params.Domain,
|
||||||
Size: size,
|
Size: size,
|
||||||
Reverse: true,
|
Reverse: true,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -20,10 +20,14 @@ func (this *IndexAction) Init() {
|
|||||||
func (this *IndexAction) RunGet(params struct {
|
func (this *IndexAction) RunGet(params struct {
|
||||||
ServerId int64
|
ServerId int64
|
||||||
RequestId string
|
RequestId string
|
||||||
|
Ip string
|
||||||
|
Domain string
|
||||||
Keyword string
|
Keyword string
|
||||||
}) {
|
}) {
|
||||||
this.Data["serverId"] = params.ServerId
|
this.Data["serverId"] = params.ServerId
|
||||||
this.Data["requestId"] = params.RequestId
|
this.Data["requestId"] = params.RequestId
|
||||||
|
this.Data["ip"] = params.Ip
|
||||||
|
this.Data["domain"] = params.Domain
|
||||||
this.Data["keyword"] = params.Keyword
|
this.Data["keyword"] = params.Keyword
|
||||||
this.Data["path"] = this.Request.URL.Path
|
this.Data["path"] = this.Request.URL.Path
|
||||||
|
|
||||||
@@ -44,6 +48,8 @@ func (this *IndexAction) RunPost(params struct {
|
|||||||
ServerId int64
|
ServerId int64
|
||||||
RequestId string
|
RequestId string
|
||||||
Keyword string
|
Keyword string
|
||||||
|
Ip string
|
||||||
|
Domain string
|
||||||
|
|
||||||
Must *actions.Must
|
Must *actions.Must
|
||||||
}) {
|
}) {
|
||||||
@@ -54,6 +60,8 @@ func (this *IndexAction) RunPost(params struct {
|
|||||||
Size: 20,
|
Size: 20,
|
||||||
Day: timeutil.Format("Ymd"),
|
Day: timeutil.Format("Ymd"),
|
||||||
Keyword: params.Keyword,
|
Keyword: params.Keyword,
|
||||||
|
Ip: params.Ip,
|
||||||
|
Domain: params.Domain,
|
||||||
Reverse: isReverse,
|
Reverse: isReverse,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -21,12 +21,16 @@ func (this *TodayAction) RunGet(params struct {
|
|||||||
ServerId int64
|
ServerId int64
|
||||||
HasError int
|
HasError int
|
||||||
Keyword string
|
Keyword string
|
||||||
|
Ip string
|
||||||
|
Domain string
|
||||||
}) {
|
}) {
|
||||||
size := int64(10)
|
size := int64(10)
|
||||||
|
|
||||||
this.Data["path"] = this.Request.URL.Path
|
this.Data["path"] = this.Request.URL.Path
|
||||||
this.Data["hasError"] = params.HasError
|
this.Data["hasError"] = params.HasError
|
||||||
this.Data["keyword"] = params.Keyword
|
this.Data["keyword"] = params.Keyword
|
||||||
|
this.Data["ip"] = params.Ip
|
||||||
|
this.Data["domain"] = params.Domain
|
||||||
|
|
||||||
resp, err := this.RPC().HTTPAccessLogRPC().ListHTTPAccessLogs(this.AdminContext(), &pb.ListHTTPAccessLogsRequest{
|
resp, err := this.RPC().HTTPAccessLogRPC().ListHTTPAccessLogs(this.AdminContext(), &pb.ListHTTPAccessLogsRequest{
|
||||||
RequestId: params.RequestId,
|
RequestId: params.RequestId,
|
||||||
@@ -34,6 +38,8 @@ func (this *TodayAction) RunGet(params struct {
|
|||||||
HasError: params.HasError > 0,
|
HasError: params.HasError > 0,
|
||||||
Day: timeutil.Format("Ymd"),
|
Day: timeutil.Format("Ymd"),
|
||||||
Keyword: params.Keyword,
|
Keyword: params.Keyword,
|
||||||
|
Ip: params.Ip,
|
||||||
|
Domain: params.Domain,
|
||||||
Size: size,
|
Size: size,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -67,6 +73,9 @@ func (this *TodayAction) RunGet(params struct {
|
|||||||
ServerId: params.ServerId,
|
ServerId: params.ServerId,
|
||||||
HasError: params.HasError > 0,
|
HasError: params.HasError > 0,
|
||||||
Day: timeutil.Format("Ymd"),
|
Day: timeutil.Format("Ymd"),
|
||||||
|
Keyword: params.Keyword,
|
||||||
|
Ip: params.Ip,
|
||||||
|
Domain: params.Domain,
|
||||||
Size: size,
|
Size: size,
|
||||||
Reverse: true,
|
Reverse: true,
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
// 访问日志搜索框
|
||||||
|
Vue.component("http-access-log-search-box", {
|
||||||
|
props: ["v-ip", "v-domain", "v-keyword"],
|
||||||
|
data: function () {
|
||||||
|
let ip = this.vIp
|
||||||
|
if (ip == null) {
|
||||||
|
ip = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
let domain = this.vDomain
|
||||||
|
if (domain == null) {
|
||||||
|
domain = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
let keyword = this.vKeyword
|
||||||
|
if (keyword == null) {
|
||||||
|
keyword = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
ip: ip,
|
||||||
|
domain: domain,
|
||||||
|
keyword: keyword
|
||||||
|
}
|
||||||
|
},
|
||||||
|
template: `<div>
|
||||||
|
<div class="margin"></div>
|
||||||
|
<div class="ui fields inline">
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input left labeled small">
|
||||||
|
<span class="ui label basic" style="font-weight: normal">IP</span>
|
||||||
|
<input type="text" name="ip" placeholder="x.x.x.x" size="15" v-model="ip"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input left labeled small">
|
||||||
|
<span class="ui label basic" style="font-weight: normal">域名</span>
|
||||||
|
<input type="text" name="domain" placeholder="xxx.com" size="15" v-model="domain"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="ui field">
|
||||||
|
<div class="ui input left labeled small">
|
||||||
|
<span class="ui label basic" style="font-weight: normal">关键词</span>
|
||||||
|
<input type="text" name="keyword" v-model="keyword" placeholder="路径、UserAgent等..." size="18"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<slot></slot>
|
||||||
|
<div class="ui field">
|
||||||
|
<button class="ui button small" type="submit">查找</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>`
|
||||||
|
})
|
||||||
@@ -37,7 +37,10 @@ Tea.context(function () {
|
|||||||
|
|
||||||
// 清理节点
|
// 清理节点
|
||||||
this.cleanNode = function (nodeId) {
|
this.cleanNode = function (nodeId) {
|
||||||
teaweb.popup("/db/cleanPopup?nodeId=" + nodeId)
|
teaweb.popup("/db/cleanPopup?nodeId=" + nodeId, {
|
||||||
|
width: "44em",
|
||||||
|
height: "26em"
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 显示错误信息
|
// 显示错误信息
|
||||||
|
|||||||
@@ -5,26 +5,19 @@
|
|||||||
|
|
||||||
<div class="right-box">
|
<div class="right-box">
|
||||||
<first-menu>
|
<first-menu>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&day=' + day + '&keyword=' + keyword" :active="hasError == 0">所有日志</menu-item>
|
<menu-item :href="path + '?serverId=' + serverId + '&day=' + day + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain" :active="hasError == 0">所有日志</menu-item>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&day=' + day + '&hasError=1' + '&keyword=' + keyword" :active="hasError > 0">错误日志</menu-item>
|
<menu-item :href="path + '?serverId=' + serverId + '&day=' + day + '&hasError=1' + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain" :active="hasError > 0">错误日志</menu-item>
|
||||||
<div class="item right">
|
|
||||||
<form method="get" class="ui form small" :action="path" autocomplete="off">
|
|
||||||
<input type="hidden" name="serverId" :value="serverId"/>
|
|
||||||
<div class="ui fields inline">
|
|
||||||
<div class="ui field">
|
|
||||||
<input type="text" name="keyword" v-model="keyword" placeholder="IP、域名、路径等..."/>
|
|
||||||
</div>
|
|
||||||
<div class="ui field">
|
|
||||||
<input type="text" name="day" maxlength="10" placeholder="选择日期" style="width:7.8em" id="day-input" v-model="day"/>
|
|
||||||
</div>
|
|
||||||
<div class="ui field">
|
|
||||||
<button class="ui button small" type="submit">查找</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</first-menu>
|
</first-menu>
|
||||||
|
|
||||||
|
<form method="get" class="ui form small" :action="path" autocomplete="off">
|
||||||
|
<input type="hidden" name="serverId" :value="serverId"/>
|
||||||
|
<http-access-log-search-box :v-ip="ip" :v-domain="domain" :v-keyword="keyword">
|
||||||
|
<div class="ui field">
|
||||||
|
<input type="text" name="day" maxlength="10" placeholder="选择日期" style="width:7.8em" id="day-input" v-model="day"/>
|
||||||
|
</div>
|
||||||
|
</http-access-log-search-box>
|
||||||
|
</form>
|
||||||
|
|
||||||
<p class="comment" v-if="accessLogs.length == 0">暂时还没有访问日志。</p>
|
<p class="comment" v-if="accessLogs.length == 0">暂时还没有访问日志。</p>
|
||||||
|
|
||||||
<table class="ui table selectable" v-if="accessLogs.length > 0">
|
<table class="ui table selectable" v-if="accessLogs.length > 0">
|
||||||
@@ -35,10 +28,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 + '&keyword=' + keyword" v-if="hasPrev">上一页</a>
|
<a :href="path + '?serverId=' + serverId + '&requestId=' + lastRequestId + '&day=' + day + '&hasError=' + hasError + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain" 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 + '&keyword=' + keyword" v-if="hasMore">下一页</a>
|
<a :href="path + '?serverId=' + serverId + '&requestId=' + nextRequestId + '&day=' + day + '&hasError=' + hasError + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain" v-if="hasMore">下一页</a>
|
||||||
<span v-else class="disabled">下一页</span>
|
<span v-else class="disabled">下一页</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -2,21 +2,10 @@
|
|||||||
|
|
||||||
{$template "/left_menu"}
|
{$template "/left_menu"}
|
||||||
<div class="right-box">
|
<div class="right-box">
|
||||||
<first-menu>
|
<form method="get" class="ui form small" :action="path" autocomplete="off">
|
||||||
<div class="item right">
|
<input type="hidden" name="serverId" :value="serverId"/>
|
||||||
<form method="get" class="ui form small" :action="path" autocomplete="off">
|
<http-access-log-search-box :v-ip="ip" :v-domain="domain" :v-keyword="keyword"></http-access-log-search-box>
|
||||||
<input type="hidden" name="serverId" :value="serverId"/>
|
</form>
|
||||||
<div class="ui fields inline">
|
|
||||||
<div class="ui field">
|
|
||||||
<input type="text" name="keyword" v-model="keyword" placeholder="IP、域名、路径等..."/>
|
|
||||||
</div>
|
|
||||||
<div class="ui field">
|
|
||||||
<button class="ui button small" type="submit">查找</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</first-menu>
|
|
||||||
|
|
||||||
<p class="comment" v-if="isLoaded && accessLogs.length == 0">今天暂时还没有访问日志。</p>
|
<p class="comment" v-if="isLoaded && accessLogs.length == 0">今天暂时还没有访问日志。</p>
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ Tea.context(function () {
|
|||||||
.params({
|
.params({
|
||||||
serverId: this.serverId,
|
serverId: this.serverId,
|
||||||
requestId: this.requestId,
|
requestId: this.requestId,
|
||||||
keyword: this.keyword
|
keyword: this.keyword,
|
||||||
|
ip: this.ip,
|
||||||
|
domain: this.domain
|
||||||
})
|
})
|
||||||
.success(function (resp) {
|
.success(function (resp) {
|
||||||
this.accessLogs = resp.data.accessLogs.concat(this.accessLogs)
|
this.accessLogs = resp.data.accessLogs.concat(this.accessLogs)
|
||||||
|
|||||||
@@ -3,24 +3,15 @@
|
|||||||
{$template "/left_menu"}
|
{$template "/left_menu"}
|
||||||
<div class="right-box">
|
<div class="right-box">
|
||||||
<first-menu>
|
<first-menu>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&keyword=' + keyword" :active="hasError == 0">所有日志</menu-item>
|
<menu-item :href="path + '?serverId=' + serverId + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain" :active="hasError == 0">所有日志</menu-item>
|
||||||
<menu-item :href="path + '?serverId=' + serverId + '&hasError=1' + '&keyword=' + keyword" :active="hasError > 0">错误日志</menu-item>
|
<menu-item :href="path + '?serverId=' + serverId + '&hasError=1' + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain" :active="hasError > 0">错误日志</menu-item>
|
||||||
|
|
||||||
<div class="item right">
|
|
||||||
<form method="get" class="ui form small" :action="path" autocomplete="off">
|
|
||||||
<input type="hidden" name="serverId" :value="serverId"/>
|
|
||||||
<div class="ui fields inline">
|
|
||||||
<div class="ui field">
|
|
||||||
<input type="text" name="keyword" v-model="keyword" placeholder="IP、域名、路径等..."/>
|
|
||||||
</div>
|
|
||||||
<div class="ui field">
|
|
||||||
<button class="ui button small" type="submit">查找</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</first-menu>
|
</first-menu>
|
||||||
|
|
||||||
|
<form method="get" class="ui form small" :action="path" autocomplete="off">
|
||||||
|
<input type="hidden" name="serverId" :value="serverId"/>
|
||||||
|
<http-access-log-search-box :v-ip="ip" :v-domain="domain" :v-keyword="keyword"></http-access-log-search-box>
|
||||||
|
</form>
|
||||||
|
|
||||||
<p class="comment" v-if="accessLogs.length == 0">今天暂时还没有访问日志。</p>
|
<p class="comment" v-if="accessLogs.length == 0">今天暂时还没有访问日志。</p>
|
||||||
|
|
||||||
<table class="ui table selectable" v-if="accessLogs.length > 0">
|
<table class="ui table selectable" v-if="accessLogs.length > 0">
|
||||||
@@ -31,10 +22,10 @@
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div v-if="accessLogs.length > 0">
|
<div v-if="accessLogs.length > 0">
|
||||||
<a :href="path + '?serverId=' + serverId + '&requestId=' + lastRequestId + '&hasError=' + hasError + '&keyword=' + keyword" v-if="hasPrev">上一页</a>
|
<a :href="path + '?serverId=' + serverId + '&requestId=' + lastRequestId + '&hasError=' + hasError + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain" 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 + '&keyword=' + keyword" v-if="hasMore">下一页</a>
|
<a :href="path + '?serverId=' + serverId + '&requestId=' + nextRequestId + '&hasError=' + hasError + '&keyword=' + keyword + '&ip=' + ip + '&domain=' + domain" v-if="hasMore">下一页</a>
|
||||||
<span v-else class="disabled">下一页</span>
|
<span v-else class="disabled">下一页</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
Reference in New Issue
Block a user