diff --git a/internal/db/models/node_log_dao.go b/internal/db/models/node_log_dao.go index 640351eb..a8bb7b8f 100644 --- a/internal/db/models/node_log_dao.go +++ b/internal/db/models/node_log_dao.go @@ -412,3 +412,81 @@ func (this *NodeLogDAO) DeleteNodeLogsWithCluster(tx *dbs.Tx, role nodeconfigs.N _, err = query.Delete() return err } + +// DeleteMatchedNodeLogs 删除匹配的日志 +func (this *NodeLogDAO) DeleteMatchedNodeLogs(tx *dbs.Tx, + role string, + nodeClusterId int64, + nodeId int64, + serverId int64, + originId int64, + allServers bool, + dayFrom string, + dayTo string, + keyword string, + level string, + fixedState configutils.BoolState, + isUnread bool, + tag string) error { + var query = this.Query(tx) + if len(role) > 0 { + query.Attr("role", role) + } + if nodeId > 0 { + query.Attr("nodeId", nodeId) + } else { + if nodeClusterId > 0 { + query.Where("nodeId IN (SELECT id FROM " + SharedNodeDAO.Table + " WHERE clusterId=:nodeClusterId AND state=1)") + query.Param("nodeClusterId", nodeClusterId) + } else { + switch role { + case nodeconfigs.NodeRoleNode: + query.Where("nodeId IN (SELECT id FROM " + SharedNodeDAO.Table + " WHERE state=1 AND clusterId>0)") + case nodeconfigs.NodeRoleDNS: + query.Where("nodeId IN (SELECT id FROM edgeNSNodes WHERE state=1 AND clusterId>0)") // 没有用 SharedNSNodeDAO() 因为有包循环引用的问题 + } + } + } + if serverId > 0 { + query.Attr("serverId", serverId) + } else if allServers { + query.Where("serverId>0") + } + if originId > 0 { + query.Attr("originId", originId) + } + if fixedState == configutils.BoolStateYes { + query.Attr("isFixed", 1) + query.Where("level IN ('error', 'success', 'warning')") + } else if fixedState == configutils.BoolStateNo { + query.Attr("isFixed", 0) + query.Where("level IN ('error', 'success', 'warning')") + } + if len(dayFrom) > 0 { + dayFrom = strings.ReplaceAll(dayFrom, "-", "") + query.Gte("day", dayFrom) + } + if len(dayTo) > 0 { + dayTo = strings.ReplaceAll(dayTo, "-", "") + query.Lte("day", dayTo) + } + if len(keyword) > 0 { + query.Where("(tag LIKE :keyword OR description LIKE :keyword)"). + Param("keyword", dbutils.QuoteLike(keyword)) + } + if len(level) > 0 { + var pieces = strings.Split(level, ",") + if len(pieces) == 1 { + query.Attr("level", pieces[0]) + } else { + query.Attr("level", pieces) + } + } + if isUnread { + query.Attr("isRead", 0) + } + if len(tag) > 0 { + query.Like("tag", dbutils.QuoteLikeKeyword(tag)) + } + return query.DeleteQuickly() +} diff --git a/internal/rpc/services/service_node_log.go b/internal/rpc/services/service_node_log.go index 485d5b72..d73e0e96 100644 --- a/internal/rpc/services/service_node_log.go +++ b/internal/rpc/services/service_node_log.go @@ -179,3 +179,20 @@ func (this *NodeLogService) UpdateAllNodeLogsRead(ctx context.Context, req *pb.U } return this.Success() } + +// DeleteNodeLogs 删除日志 +func (this *NodeLogService) DeleteNodeLogs(ctx context.Context, req *pb.DeleteNodeLogsRequest) (*pb.RPCSuccess, error) { + _, err := this.ValidateAdmin(ctx) + if err != nil { + return nil, err + } + + var tx = this.NullTx() + + err = models.SharedNodeLogDAO.DeleteMatchedNodeLogs(tx, req.Role, req.NodeClusterId, req.NodeId, req.ServerId, req.OriginId, req.AllServers, req.DayFrom, req.DayTo, req.Keyword, req.Level, types.Int8(req.FixedState), req.IsUnread, req.Tag) + if err != nil { + return nil, err + } + + return this.Success() +}