diff --git a/internal/web/actions/default/log/exportExcel.go b/internal/web/actions/default/log/exportExcel.go index b635d6f8..8c1446b7 100644 --- a/internal/web/actions/default/log/exportExcel.go +++ b/internal/web/actions/default/log/exportExcel.go @@ -68,21 +68,21 @@ func (this *ExportExcelAction) RunGet(params struct { this.ErrorPage(err) return } - if regionResp.Region != nil { + if regionResp.IpRegion != nil { pieces := []string{} - if len(regionResp.Region.Country) > 0 { - pieces = append(pieces, regionResp.Region.Country) + if len(regionResp.IpRegion.Country) > 0 { + pieces = append(pieces, regionResp.IpRegion.Country) } - if len(regionResp.Region.Province) > 0 && !lists.ContainsString(pieces, regionResp.Region.Province) { - pieces = append(pieces, regionResp.Region.Province) + if len(regionResp.IpRegion.Province) > 0 && !lists.ContainsString(pieces, regionResp.IpRegion.Province) { + pieces = append(pieces, regionResp.IpRegion.Province) } - if len(regionResp.Region.City) > 0 && !lists.ContainsString(pieces, regionResp.Region.City) && !lists.ContainsString(pieces, strings.TrimSuffix(regionResp.Region.Province, "市")) { - pieces = append(pieces, regionResp.Region.City) + if len(regionResp.IpRegion.City) > 0 && !lists.ContainsString(pieces, regionResp.IpRegion.City) && !lists.ContainsString(pieces, strings.TrimSuffix(regionResp.IpRegion.Province, "市")) { + pieces = append(pieces, regionResp.IpRegion.City) } regionName = strings.Join(pieces, " ") - if len(regionResp.Region.Isp) > 0 { - ispName = regionResp.Region.Isp + if len(regionResp.IpRegion.Isp) > 0 { + ispName = regionResp.IpRegion.Isp } } diff --git a/internal/web/actions/default/log/index.go b/internal/web/actions/default/log/index.go index a90595cb..3d2f2704 100644 --- a/internal/web/actions/default/log/index.go +++ b/internal/web/actions/default/log/index.go @@ -71,19 +71,10 @@ func (this *IndexAction) RunGet(params struct { this.ErrorPage(err) return } - if regionResp.Region != nil { - pieces := []string{} - if len(regionResp.Region.Country) > 0 { - pieces = append(pieces, regionResp.Region.Country) - } - if len(regionResp.Region.Province) > 0 && !lists.ContainsString(pieces, regionResp.Region.Province) { - pieces = append(pieces, regionResp.Region.Province) - } - if len(regionResp.Region.City) > 0 && !lists.ContainsString(pieces, regionResp.Region.City) && !lists.ContainsString(pieces, strings.TrimSuffix(regionResp.Region.Province, "市")) { - pieces = append(pieces, regionResp.Region.City) - } - if len(regionResp.Region.Isp) > 0 && !lists.ContainsString(pieces, regionResp.Region.Isp) { - pieces = append(pieces, "| "+regionResp.Region.Isp) + if regionResp.IpRegion != nil { + pieces := []string{regionResp.IpRegion.Summary} + if len(regionResp.IpRegion.Isp) > 0 && !lists.ContainsString(pieces, regionResp.IpRegion.Isp) { + pieces = append(pieces, "| "+regionResp.IpRegion.Isp) } regionName = strings.Join(pieces, " ") } diff --git a/internal/web/actions/default/servers/server/log/history.go b/internal/web/actions/default/servers/server/log/history.go index 00f4f70b..da4480bc 100644 --- a/internal/web/actions/default/servers/server/log/history.go +++ b/internal/web/actions/default/servers/server/log/history.go @@ -3,6 +3,7 @@ package log import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/lists" timeutil "github.com/iwind/TeaGo/utils/time" "regexp" "strings" @@ -34,6 +35,8 @@ func (this *HistoryAction) RunGet(params struct { this.Data["hasError"] = params.HasError day := params.Day + ipList := []string{} + if len(day) > 0 && regexp.MustCompile(`\d{4}-\d{2}-\d{2}`).MatchString(day) { day = strings.ReplaceAll(day, "-", "") size := int64(10) @@ -56,6 +59,13 @@ func (this *HistoryAction) RunGet(params struct { this.Data["accessLogs"] = []interface{}{} } else { this.Data["accessLogs"] = resp.AccessLogs + for _, accessLog := range resp.AccessLogs { + if len(accessLog.RemoteAddr) > 0 { + if !lists.ContainsString(ipList, accessLog.RemoteAddr) { + ipList = append(ipList, accessLog.RemoteAddr) + } + } + } } this.Data["hasMore"] = resp.HasMore this.Data["nextRequestId"] = resp.RequestId @@ -83,5 +93,21 @@ func (this *HistoryAction) RunGet(params struct { } } + // 根据IP查询区域 + regionMap := map[string]string{} // ip => region + if len(ipList) > 0 { + resp, err := this.RPC().IPLibraryRPC().LookupIPRegions(this.AdminContext(), &pb.LookupIPRegionsRequest{IpList: ipList}) + if err != nil { + this.ErrorPage(err) + return + } + if resp.IpRegionMap != nil { + for ip, region := range resp.IpRegionMap { + regionMap[ip] = region.Summary + } + } + } + this.Data["regions"] = regionMap + this.Show() } diff --git a/internal/web/actions/default/servers/server/log/index.go b/internal/web/actions/default/servers/server/log/index.go index 2819c0f9..0f30f868 100644 --- a/internal/web/actions/default/servers/server/log/index.go +++ b/internal/web/actions/default/servers/server/log/index.go @@ -4,6 +4,7 @@ import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/lists" timeutil "github.com/iwind/TeaGo/utils/time" ) @@ -45,9 +46,18 @@ func (this *IndexAction) RunPost(params struct { return } + ipList := []string{} accessLogs := accessLogsResp.AccessLogs if len(accessLogs) == 0 { accessLogs = []*pb.HTTPAccessLog{} + } else { + for _, accessLog := range accessLogs { + if len(accessLog.RemoteAddr) > 0 { + if !lists.ContainsString(ipList, accessLog.RemoteAddr) { + ipList = append(ipList, accessLog.RemoteAddr) + } + } + } } this.Data["accessLogs"] = accessLogs if len(accessLogs) > 0 { @@ -57,5 +67,21 @@ func (this *IndexAction) RunPost(params struct { } this.Data["hasMore"] = accessLogsResp.HasMore + // 根据IP查询区域 + regionMap := map[string]string{} // ip => region + if len(ipList) > 0 { + resp, err := this.RPC().IPLibraryRPC().LookupIPRegions(this.AdminContext(), &pb.LookupIPRegionsRequest{IpList: ipList}) + if err != nil { + this.ErrorPage(err) + return + } + if resp.IpRegionMap != nil { + for ip, region := range resp.IpRegionMap { + regionMap[ip] = region.Summary + } + } + } + this.Data["regions"] = regionMap + this.Success() } diff --git a/internal/web/actions/default/servers/server/log/today.go b/internal/web/actions/default/servers/server/log/today.go index 0db19911..8baabce3 100644 --- a/internal/web/actions/default/servers/server/log/today.go +++ b/internal/web/actions/default/servers/server/log/today.go @@ -3,6 +3,7 @@ package log import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/lists" timeutil "github.com/iwind/TeaGo/utils/time" ) @@ -37,10 +38,18 @@ func (this *TodayAction) RunGet(params struct { return } + ipList := []string{} if len(resp.AccessLogs) == 0 { this.Data["accessLogs"] = []interface{}{} } else { this.Data["accessLogs"] = resp.AccessLogs + for _, accessLog := range resp.AccessLogs { + if len(accessLog.RemoteAddr) > 0 { + if !lists.ContainsString(ipList, accessLog.RemoteAddr) { + ipList = append(ipList, accessLog.RemoteAddr) + } + } + } } this.Data["hasMore"] = resp.HasMore this.Data["nextRequestId"] = resp.RequestId @@ -67,5 +76,21 @@ func (this *TodayAction) RunGet(params struct { } } + // 根据IP查询区域 + regionMap := map[string]string{} // ip => region + if len(ipList) > 0 { + resp, err := this.RPC().IPLibraryRPC().LookupIPRegions(this.AdminContext(), &pb.LookupIPRegionsRequest{IpList: ipList}) + if err != nil { + this.ErrorPage(err) + return + } + if resp.IpRegionMap != nil { + for ip, region := range resp.IpRegionMap { + regionMap[ip] = region.Summary + } + } + } + this.Data["regions"] = regionMap + this.Show() } diff --git a/internal/web/actions/default/servers/server/log/viewPopup.go b/internal/web/actions/default/servers/server/log/viewPopup.go index 714b22dc..8560fae6 100644 --- a/internal/web/actions/default/servers/server/log/viewPopup.go +++ b/internal/web/actions/default/servers/server/log/viewPopup.go @@ -5,7 +5,6 @@ import ( "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/maps" "net/http" - "strings" ) type ViewPopupAction struct { @@ -90,23 +89,10 @@ func (this *ViewPopupAction) RunGet(params struct { this.ErrorPage(err) return } - region := regionResp.Region + region := regionResp.IpRegion if region != nil { - pieces := []string{} - if len(region.Country) > 0 { - pieces = append(pieces, region.Country) - } - if len(region.Region) > 0 { - pieces = append(pieces, region.Region) - } - if len(region.Province) > 0 { - pieces = append(pieces, region.Province) - } - if len(region.City) > 0 { - pieces = append(pieces, region.City) - } regionMap = maps.Map{ - "full": strings.Join(pieces, " "), + "full": region.Summary, "isp": region.Isp, } } diff --git a/internal/web/helpers/utils.go b/internal/web/helpers/utils.go index bf5c01eb..42faf67f 100644 --- a/internal/web/helpers/utils.go +++ b/internal/web/helpers/utils.go @@ -78,13 +78,13 @@ func checkIPWithoutCache(config *systemconfigs.SecurityConfig, ipAddr string) bo logs.Println("[USER_MUST_AUTH][ERROR]" + err.Error()) return false } - if resp.Region == nil { + if resp.IpRegion == nil { return true } - if len(config.AllowCountryIds) > 0 && !lists.ContainsInt64(config.AllowCountryIds, resp.Region.CountryId) { + if len(config.AllowCountryIds) > 0 && !lists.ContainsInt64(config.AllowCountryIds, resp.IpRegion.CountryId) { return false } - if len(config.AllowProvinceIds) > 0 && !lists.ContainsInt64(config.AllowProvinceIds, resp.Region.ProvinceId) { + if len(config.AllowProvinceIds) > 0 && !lists.ContainsInt64(config.AllowProvinceIds, resp.IpRegion.ProvinceId) { return false } } diff --git a/web/public/js/components/server/http-access-log-box.js b/web/public/js/components/server/http-access-log-box.js index b87486b7..751df2b4 100644 --- a/web/public/js/components/server/http-access-log-box.js +++ b/web/public/js/components/server/http-access-log-box.js @@ -40,7 +40,7 @@ Vue.component("http-access-log-box", { } }, template: `