142 lines
4.0 KiB
Go
142 lines
4.0 KiB
Go
package sys
|
|
|
|
import (
|
|
"context"
|
|
"hotgo/internal/library/imtenant"
|
|
"hotgo/internal/model/input/sysin"
|
|
"hotgo/internal/service"
|
|
"strings"
|
|
|
|
"github.com/gogf/gf/v2/errors/gerror"
|
|
)
|
|
|
|
type sSysImKafkaAudit struct{}
|
|
|
|
func NewSysImKafkaAudit() *sSysImKafkaAudit {
|
|
return &sSysImKafkaAudit{}
|
|
}
|
|
|
|
func init() {
|
|
service.RegisterSysImKafkaAudit(NewSysImKafkaAudit())
|
|
}
|
|
|
|
func (s *sSysImKafkaAudit) List(ctx context.Context, in *sysin.ImKafkaAuditListInp) (list []*sysin.ImKafkaAuditListModel, totalCount int, err error) {
|
|
if err = in.Filter(ctx); err != nil {
|
|
return
|
|
}
|
|
where, args := buildImKafkaAuditWhere(in)
|
|
db := imtenant.RegistryDB()
|
|
totalValue, err := db.GetValue(ctx, "SELECT COUNT(*) FROM im_audit_events "+where, args...)
|
|
if err != nil {
|
|
err = gerror.Wrap(err, "获取IM Kafka审计事件总数失败,请稍后重试!")
|
|
return
|
|
}
|
|
totalCount = totalValue.Int()
|
|
|
|
page := in.Page
|
|
if page <= 0 {
|
|
page = 1
|
|
}
|
|
perPage := in.PerPage
|
|
if perPage <= 0 {
|
|
perPage = 20
|
|
}
|
|
offset := (page - 1) * perPage
|
|
query := `SELECT id,event_id,tenant_code,event_type,biz_type,biz_id,actor_type,actor_id,
|
|
action,resource,resource_id,result,reason,occurred_at,received_at
|
|
FROM im_audit_events ` + where + ` ORDER BY id DESC LIMIT ? OFFSET ?`
|
|
queryArgs := append(append([]any{}, args...), perPage, offset)
|
|
rows, err := db.GetAll(ctx, query, queryArgs...)
|
|
if err != nil {
|
|
err = gerror.Wrap(err, "获取IM Kafka审计事件列表失败,请稍后重试!")
|
|
return
|
|
}
|
|
if err = rows.Structs(&list); err != nil {
|
|
err = gerror.Wrap(err, "解析IM Kafka审计事件列表失败,请稍后重试!")
|
|
}
|
|
return
|
|
}
|
|
|
|
func buildImKafkaAuditWhere(in *sysin.ImKafkaAuditListInp) (string, []any) {
|
|
parts := []string{"1=1"}
|
|
args := []any{}
|
|
if in.TenantCode != "" {
|
|
parts = append(parts, "tenant_code=?")
|
|
args = append(args, in.TenantCode)
|
|
}
|
|
if in.EventId != "" {
|
|
parts = append(parts, "event_id LIKE ?")
|
|
args = append(args, "%"+in.EventId+"%")
|
|
}
|
|
if in.EventType != "" {
|
|
parts = append(parts, "event_type LIKE ?")
|
|
args = append(args, "%"+in.EventType+"%")
|
|
}
|
|
if in.BizType != "" {
|
|
parts = append(parts, "biz_type=?")
|
|
args = append(args, in.BizType)
|
|
}
|
|
if in.BizId != "" {
|
|
parts = append(parts, "biz_id LIKE ?")
|
|
args = append(args, "%"+in.BizId+"%")
|
|
}
|
|
if in.ActorType != "" {
|
|
parts = append(parts, "actor_type=?")
|
|
args = append(args, in.ActorType)
|
|
}
|
|
if in.ActorId != "" {
|
|
parts = append(parts, "actor_id LIKE ?")
|
|
args = append(args, "%"+in.ActorId+"%")
|
|
}
|
|
if in.Action != "" {
|
|
parts = append(parts, "action LIKE ?")
|
|
args = append(args, "%"+in.Action+"%")
|
|
}
|
|
if in.Resource != "" {
|
|
parts = append(parts, "resource=?")
|
|
args = append(args, in.Resource)
|
|
}
|
|
if in.ResourceId != "" {
|
|
parts = append(parts, "resource_id LIKE ?")
|
|
args = append(args, "%"+in.ResourceId+"%")
|
|
}
|
|
if in.Result != "" {
|
|
parts = append(parts, "result=?")
|
|
args = append(args, in.Result)
|
|
}
|
|
if len(in.CreatedAt) == 2 {
|
|
parts = append(parts, "received_at BETWEEN ? AND ?")
|
|
args = append(args, in.CreatedAt[0], in.CreatedAt[1])
|
|
}
|
|
return "WHERE " + strings.Join(parts, " AND "), args
|
|
}
|
|
|
|
func (s *sSysImKafkaAudit) View(ctx context.Context, in *sysin.ImKafkaAuditViewInp) (res *sysin.ImKafkaAuditViewModel, err error) {
|
|
if err = in.Filter(ctx); err != nil {
|
|
return nil, err
|
|
}
|
|
query := `SELECT id,event_id,tenant_code,event_type,biz_type,biz_id,actor_type,actor_id,
|
|
action,resource,resource_id,result,reason,CAST(payload AS CHAR) payload,
|
|
CAST(envelope AS CHAR) envelope,occurred_at,received_at FROM im_audit_events WHERE `
|
|
args := []any{}
|
|
if in.Id > 0 {
|
|
query += "id=?"
|
|
args = append(args, in.Id)
|
|
} else {
|
|
query += "event_id=?"
|
|
args = append(args, in.EventId)
|
|
}
|
|
query += " LIMIT 1"
|
|
row, err := imtenant.RegistryDB().GetOne(ctx, query, args...)
|
|
if err != nil {
|
|
return nil, gerror.Wrap(err, "获取IM Kafka审计事件详情失败,请稍后重试!")
|
|
}
|
|
if row.IsEmpty() {
|
|
return nil, nil
|
|
}
|
|
if err = row.Struct(&res); err != nil {
|
|
return nil, gerror.Wrap(err, "解析IM Kafka审计事件详情失败,请稍后重试!")
|
|
}
|
|
return
|
|
}
|