173 lines
4.3 KiB
Go
173 lines
4.3 KiB
Go
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
|
|
package logs
|
|
|
|
import (
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/dnsconfigs"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/iplibrary"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
"github.com/TeaOSLab/EdgeUser/internal/web/actions/actionutils"
|
|
"github.com/iwind/TeaGo/lists"
|
|
"github.com/iwind/TeaGo/maps"
|
|
timeutil "github.com/iwind/TeaGo/utils/time"
|
|
"net"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
type IndexAction struct {
|
|
actionutils.ParentAction
|
|
}
|
|
|
|
func (this *IndexAction) Init() {
|
|
this.Nav("", "", "")
|
|
}
|
|
|
|
func (this *IndexAction) RunGet(params struct {
|
|
RequestId string
|
|
Keyword string
|
|
Day string
|
|
ClusterId int64
|
|
NodeId int64
|
|
RecordType string
|
|
}) {
|
|
day := strings.ReplaceAll(params.Day, "-", "")
|
|
if !regexp.MustCompile(`^\d{8}$`).MatchString(day) {
|
|
day = timeutil.Format("Ymd")
|
|
}
|
|
|
|
this.Data["keyword"] = params.Keyword
|
|
this.Data["day"] = day[:4] + "-" + day[4:6] + "-" + day[6:]
|
|
this.Data["path"] = this.Request.URL.Path
|
|
this.Data["clusterId"] = params.ClusterId
|
|
this.Data["nodeId"] = params.NodeId
|
|
this.Data["recordType"] = params.RecordType
|
|
|
|
var size = int64(10)
|
|
|
|
resp, err := this.RPC().NSAccessLogRPC().ListNSAccessLogs(this.UserContext(), &pb.ListNSAccessLogsRequest{
|
|
RequestId: params.RequestId,
|
|
NsClusterId: params.ClusterId,
|
|
NsNodeId: params.NodeId,
|
|
NsDomainId: 0,
|
|
NsRecordId: 0,
|
|
RecordType: params.RecordType,
|
|
Size: size,
|
|
Day: day,
|
|
Keyword: params.Keyword,
|
|
Reverse: false,
|
|
})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
|
|
var ipList = []string{}
|
|
var nodeIds = []int64{}
|
|
var domainIds = []int64{}
|
|
if len(resp.NsAccessLogs) == 0 {
|
|
this.Data["accessLogs"] = []interface{}{}
|
|
} else {
|
|
this.Data["accessLogs"] = resp.NsAccessLogs
|
|
for _, accessLog := range resp.NsAccessLogs {
|
|
// IP
|
|
if len(accessLog.RemoteAddr) > 0 {
|
|
// 去掉端口
|
|
ip, _, err := net.SplitHostPort(accessLog.RemoteAddr)
|
|
if err == nil {
|
|
accessLog.RemoteAddr = ip
|
|
if !lists.ContainsString(ipList, ip) {
|
|
ipList = append(ipList, ip)
|
|
}
|
|
}
|
|
}
|
|
|
|
// 节点
|
|
if !lists.ContainsInt64(nodeIds, accessLog.NsNodeId) {
|
|
nodeIds = append(nodeIds, accessLog.NsNodeId)
|
|
}
|
|
|
|
// 域名
|
|
if !lists.ContainsInt64(domainIds, accessLog.NsDomainId) {
|
|
domainIds = append(domainIds, accessLog.NsDomainId)
|
|
}
|
|
}
|
|
}
|
|
this.Data["hasMore"] = resp.HasMore
|
|
this.Data["nextRequestId"] = resp.RequestId
|
|
|
|
// 上一个requestId
|
|
this.Data["hasPrev"] = false
|
|
this.Data["lastRequestId"] = ""
|
|
if len(params.RequestId) > 0 {
|
|
this.Data["hasPrev"] = true
|
|
prevResp, err := this.RPC().NSAccessLogRPC().ListNSAccessLogs(this.UserContext(), &pb.ListNSAccessLogsRequest{
|
|
RequestId: params.RequestId,
|
|
NsClusterId: params.ClusterId,
|
|
NsNodeId: params.NodeId,
|
|
NsDomainId: 0,
|
|
NsRecordId: 0,
|
|
RecordType: params.RecordType,
|
|
Day: day,
|
|
Keyword: params.Keyword,
|
|
Size: size,
|
|
Reverse: true,
|
|
})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
if int64(len(prevResp.NsAccessLogs)) == size {
|
|
this.Data["lastRequestId"] = prevResp.RequestId
|
|
}
|
|
}
|
|
|
|
// 根据IP查询区域
|
|
this.Data["regions"] = iplibrary.LookupIPSummaries(ipList)
|
|
|
|
// 节点信息
|
|
var nodeMap = map[int64]interface{}{} // node id => { ... }
|
|
for _, nodeId := range nodeIds {
|
|
nodeResp, err := this.RPC().NSNodeRPC().FindNSNode(this.UserContext(), &pb.FindNSNodeRequest{NsNodeId: nodeId})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
var node = nodeResp.NsNode
|
|
if node != nil {
|
|
nodeMap[node.Id] = maps.Map{
|
|
"id": node.Id,
|
|
"name": node.Name,
|
|
"cluster": maps.Map{
|
|
"id": node.NsCluster.Id,
|
|
"name": node.NsCluster.Name,
|
|
},
|
|
}
|
|
}
|
|
}
|
|
this.Data["nodes"] = nodeMap
|
|
|
|
// 域名信息
|
|
var domainMap = map[int64]interface{}{} // domain id => { ... }
|
|
for _, domainId := range domainIds {
|
|
domainResp, err := this.RPC().NSDomainRPC().FindNSDomain(this.UserContext(), &pb.FindNSDomainRequest{NsDomainId: domainId})
|
|
if err != nil {
|
|
this.ErrorPage(err)
|
|
return
|
|
}
|
|
domain := domainResp.NsDomain
|
|
if domain != nil {
|
|
domainMap[domain.Id] = maps.Map{
|
|
"id": domain.Id,
|
|
"name": domain.Name,
|
|
}
|
|
}
|
|
}
|
|
this.Data["domains"] = domainMap
|
|
|
|
// 所有记录类型
|
|
this.Data["recordTypes"] = dnsconfigs.FindAllRecordTypeDefinitions()
|
|
|
|
this.Show()
|
|
}
|