// 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() }