网站列表增加QPS和攻击QPS信息

This commit is contained in:
GoEdgeLab
2023-07-07 18:51:36 +08:00
parent 9d5fe7d3a1
commit 8c5f74da8f
5 changed files with 98 additions and 9 deletions

View File

@@ -903,6 +903,22 @@ func (this *ServerDAO) ListEnabledServersMatch(tx *dbs.Tx, offset int64, size in
query.Desc("IF(FIND_IN_SET(bandwidthTime, :times), bandwidthBytes, 0)")
query.Param("times", strings.Join(times, ","))
query.DescPk()
case "requestsAsc":
query.Asc("IF(FIND_IN_SET(bandwidthTime, :times), countRequests, 0)")
query.Param("times", strings.Join(times, ","))
query.DescPk()
case "requestsDesc":
query.Desc("IF(FIND_IN_SET(bandwidthTime, :times), countRequests, 0)")
query.Param("times", strings.Join(times, ","))
query.DescPk()
case "attackRequestsAsc":
query.Asc("IF(FIND_IN_SET(bandwidthTime, :times), countAttackRequests, 0)")
query.Param("times", strings.Join(times, ","))
query.DescPk()
case "attackRequestsDesc":
query.Desc("IF(FIND_IN_SET(bandwidthTime, :times), countAttackRequests, 0)")
query.Param("times", strings.Join(times, ","))
query.DescPk()
default:
query.DescPk()
}
@@ -913,6 +929,8 @@ func (this *ServerDAO) ListEnabledServersMatch(tx *dbs.Tx, offset int64, size in
for _, server := range result {
if len(server.BandwidthTime) > 0 && !lists.ContainsString(times, server.BandwidthTime) {
server.BandwidthBytes = 0
server.CountRequests = 0
server.CountAttackRequests = 0
}
}
@@ -2737,7 +2755,7 @@ func (this *ServerDAO) FindUserServerClusterIds(tx *dbs.Tx, userId int64) ([]int
// UpdateServerBandwidth 更新服务带宽
// fullTime YYYYMMDDHHII
func (this *ServerDAO) UpdateServerBandwidth(tx *dbs.Tx, serverId int64, fullTime string, bandwidthBytes int64) error {
func (this *ServerDAO) UpdateServerBandwidth(tx *dbs.Tx, serverId int64, fullTime string, bandwidthBytes int64, countRequests int64, countAttackRequests int64) error {
if serverId <= 0 {
return nil
}
@@ -2758,13 +2776,19 @@ func (this *ServerDAO) UpdateServerBandwidth(tx *dbs.Tx, serverId int64, fullTim
Pk(serverId).
Set("bandwidthTime", fullTime).
Set("bandwidthBytes", bandwidthBytes).
Set("countRequests", countRequests).
Set("countAttackRequests", countAttackRequests).
UpdateQuickly()
} else {
return this.Query(tx).
Pk(serverId).
Set("bandwidthTime", fullTime).
Set("bandwidthBytes", dbs.SQL("bandwidthBytes+:bytes")).
Set("countRequests", dbs.SQL("countRequests+:countRequests")).
Set("countAttackRequests", dbs.SQL("countAttackRequests+:countAttackRequests")).
Param("bytes", bandwidthBytes).
Param("countRequests", countRequests).
Param("countAttackRequests", countAttackRequests).
UpdateQuickly()
}
}

View File

@@ -326,7 +326,7 @@ func TestServerDAO_FindBool(t *testing.T) {
func TestServerDAO_UpdateServerBandwidth(t *testing.T) {
var dao = models.NewServerDAO()
var tx *dbs.Tx
err := dao.UpdateServerBandwidth(tx, 1, timeutil.FormatTime("YmdHi", time.Now().Unix()/300*300), 1024)
err := dao.UpdateServerBandwidth(tx, 1, timeutil.FormatTime("YmdHi", time.Now().Unix()/300*300), 1024, 1, 0)
if err != nil {
t.Fatal(err)
}

View File

@@ -2,6 +2,57 @@ package models
import "github.com/iwind/TeaGo/dbs"
const (
ServerField_Id dbs.FieldName = "id" // ID
ServerField_IsOn dbs.FieldName = "isOn" // 是否启用
ServerField_UserId dbs.FieldName = "userId" // 用户ID
ServerField_AdminId dbs.FieldName = "adminId" // 管理员ID
ServerField_Type dbs.FieldName = "type" // 服务类型
ServerField_Name dbs.FieldName = "name" // 名称
ServerField_Description dbs.FieldName = "description" // 描述
ServerField_PlainServerNames dbs.FieldName = "plainServerNames" // 扁平化域名列表
ServerField_ServerNames dbs.FieldName = "serverNames" // 域名列表
ServerField_AuditingAt dbs.FieldName = "auditingAt" // 审核提交时间
ServerField_AuditingServerNames dbs.FieldName = "auditingServerNames" // 审核中的域名
ServerField_IsAuditing dbs.FieldName = "isAuditing" // 是否正在审核
ServerField_AuditingResult dbs.FieldName = "auditingResult" // 审核结果
ServerField_Http dbs.FieldName = "http" // HTTP配置
ServerField_Https dbs.FieldName = "https" // HTTPS配置
ServerField_Tcp dbs.FieldName = "tcp" // TCP配置
ServerField_Tls dbs.FieldName = "tls" // TLS配置
ServerField_Unix dbs.FieldName = "unix" // Unix配置
ServerField_Udp dbs.FieldName = "udp" // UDP配置
ServerField_WebId dbs.FieldName = "webId" // WEB配置
ServerField_ReverseProxy dbs.FieldName = "reverseProxy" // 反向代理配置
ServerField_GroupIds dbs.FieldName = "groupIds" // 分组ID列表
ServerField_Config dbs.FieldName = "config" // 服务配置,自动生成
ServerField_ConfigMd5 dbs.FieldName = "configMd5" // Md5
ServerField_ClusterId dbs.FieldName = "clusterId" // 集群ID
ServerField_IncludeNodes dbs.FieldName = "includeNodes" // 部署条件
ServerField_ExcludeNodes dbs.FieldName = "excludeNodes" // 节点排除条件
ServerField_Version dbs.FieldName = "version" // 版本号
ServerField_CreatedAt dbs.FieldName = "createdAt" // 创建时间
ServerField_State dbs.FieldName = "state" // 状态
ServerField_DnsName dbs.FieldName = "dnsName" // DNS名称
ServerField_TcpPorts dbs.FieldName = "tcpPorts" // 所包含TCP端口
ServerField_UdpPorts dbs.FieldName = "udpPorts" // 所包含UDP端口
ServerField_SupportCNAME dbs.FieldName = "supportCNAME" // 允许CNAME不在域名名单
ServerField_TrafficLimit dbs.FieldName = "trafficLimit" // 流量限制
ServerField_TrafficDay dbs.FieldName = "trafficDay" // YYYYMMDD
ServerField_TrafficMonth dbs.FieldName = "trafficMonth" // YYYYMM
ServerField_TotalDailyTraffic dbs.FieldName = "totalDailyTraffic" // 日流量
ServerField_TotalMonthlyTraffic dbs.FieldName = "totalMonthlyTraffic" // 月流量
ServerField_TrafficLimitStatus dbs.FieldName = "trafficLimitStatus" // 流量限制状态
ServerField_TotalTraffic dbs.FieldName = "totalTraffic" // 总流量
ServerField_UserPlanId dbs.FieldName = "userPlanId" // 所属套餐ID
ServerField_LastUserPlanId dbs.FieldName = "lastUserPlanId" // 上一次使用的套餐
ServerField_Uam dbs.FieldName = "uam" // UAM设置
ServerField_BandwidthTime dbs.FieldName = "bandwidthTime" // 带宽更新时间YYYYMMDDHHII
ServerField_BandwidthBytes dbs.FieldName = "bandwidthBytes" // 最近带宽峰值
ServerField_CountAttackRequests dbs.FieldName = "countAttackRequests" // 最近攻击请求数
ServerField_CountRequests dbs.FieldName = "countRequests" // 最近总请求数
)
// Server 服务
type Server struct {
Id uint32 `field:"id"` // ID
@@ -50,6 +101,8 @@ type Server struct {
Uam dbs.JSON `field:"uam"` // UAM设置
BandwidthTime string `field:"bandwidthTime"` // 带宽更新时间YYYYMMDDHHII
BandwidthBytes uint64 `field:"bandwidthBytes"` // 最近带宽峰值
CountAttackRequests uint64 `field:"countAttackRequests"` // 最近攻击请求数
CountRequests uint64 `field:"countRequests"` // 最近总请求数
}
type ServerOperator struct {
@@ -99,6 +152,8 @@ type ServerOperator struct {
Uam any // UAM设置
BandwidthTime any // 带宽更新时间YYYYMMDDHHII
BandwidthBytes any // 最近带宽峰值
CountAttackRequests any // 最近攻击请求数
CountRequests any // 最近总请求数
}
func NewServerOperator() *ServerOperator {

View File

@@ -1301,6 +1301,14 @@ func (this *ServerService) ListEnabledServersMatch(ctx context.Context, req *pb.
order = "trafficOutAsc"
} else if req.TrafficOutDesc {
order = "trafficOutDesc"
} else if req.RequestsAsc {
order = "requestsAsc"
} else if req.RequestsDesc {
order = "requestsDesc"
} else if req.AttackRequestsAsc {
order = "attackRequestsAsc"
} else if req.AttackRequestsDesc {
order = "attackRequestsDesc"
}
servers, err := models.SharedServerDAO.ListEnabledServersMatch(tx, req.Offset, req.Size, req.ServerGroupId, req.Keyword, req.UserId, req.NodeClusterId, req.AuditingFlag, utils.SplitStrings(req.ProtocolFamily, ","), order)
@@ -1418,11 +1426,13 @@ func (this *ServerService) ListEnabledServersMatch(ctx context.Context, req *pb.
Id: int64(server.ClusterId),
Name: clusterName,
},
ServerGroups: pbGroups,
UserId: int64(server.UserId),
User: pbUser,
BandwidthTime: server.BandwidthTime,
BandwidthBytes: int64(server.BandwidthBytes),
ServerGroups: pbGroups,
UserId: int64(server.UserId),
User: pbUser,
BandwidthTime: server.BandwidthTime,
BandwidthBytes: int64(server.BandwidthBytes),
CountRequests: int64(server.CountRequests),
CountAttackRequests: int64(server.CountAttackRequests),
})
}

View File

@@ -65,12 +65,12 @@ func init() {
for _, stat := range m {
// 更新服务的带宽峰值
if stat.ServerId > 0 {
err := models.SharedServerBandwidthStatDAO.UpdateServerBandwidth(tx, stat.UserId, stat.ServerId, stat.NodeRegionId, stat.Day, stat.TimeAt, stat.Bytes, stat.TotalBytes, stat.CachedBytes, stat.AttackBytes, stat.CountRequests, stat.CountCachedRequests, stat.CountAttackRequests)
err = models.SharedServerBandwidthStatDAO.UpdateServerBandwidth(tx, stat.UserId, stat.ServerId, stat.NodeRegionId, stat.Day, stat.TimeAt, stat.Bytes, stat.TotalBytes, stat.CachedBytes, stat.AttackBytes, stat.CountRequests, stat.CountCachedRequests, stat.CountAttackRequests)
if err != nil {
remotelogs.Error("ServerBandwidthStatService", "dump bandwidth stats failed: "+err.Error())
}
err = models.SharedServerDAO.UpdateServerBandwidth(tx, stat.ServerId, stat.Day+stat.TimeAt, stat.Bytes)
err = models.SharedServerDAO.UpdateServerBandwidth(tx, stat.ServerId, stat.Day+stat.TimeAt, stat.Bytes, stat.CountRequests, stat.CountAttackRequests)
if err != nil {
remotelogs.Error("ServerBandwidthStatService", "update server bandwidth failed: "+err.Error())
}