实现列表查询活跃告警和历史告警
This commit is contained in:
@@ -23,6 +23,18 @@ type ActiveAlarmListOptions struct {
|
||||
OrderBy string // 排序字段,例如 "trigger_time DESC"
|
||||
}
|
||||
|
||||
// HistoricalAlarmListOptions 定义了查询历史告警列表时的可选参数
|
||||
type HistoricalAlarmListOptions struct {
|
||||
SourceType *models.AlarmSourceType // 按告警来源类型过滤
|
||||
SourceID *uint // 按告警来源ID过滤
|
||||
Level *models.SeverityLevel // 按告警严重性等级过滤
|
||||
TriggerTimeStart *time.Time // 告警触发时间范围 - 开始时间
|
||||
TriggerTimeEnd *time.Time // 告警触发时间范围 - 结束时间
|
||||
ResolveTimeStart *time.Time // 告警解决时间范围 - 开始时间 (对应 models.HistoricalAlarm.ResolveTime)
|
||||
ResolveTimeEnd *time.Time // 告警解决时间范围 - 结束时间 (对应 models.HistoricalAlarm.ResolveTime)
|
||||
OrderBy string // 排序字段,例如 "trigger_time DESC"
|
||||
}
|
||||
|
||||
// AlarmRepository 定义了对告警模型的数据库操作接口
|
||||
type AlarmRepository interface {
|
||||
// CreateActiveAlarm 创建一条新的活跃告警记录
|
||||
@@ -47,6 +59,10 @@ type AlarmRepository interface {
|
||||
// 返回活跃告警列表、总记录数和错误。
|
||||
ListActiveAlarms(ctx context.Context, opts ActiveAlarmListOptions, page, pageSize int) ([]models.ActiveAlarm, int64, error)
|
||||
|
||||
// ListHistoricalAlarms 支持分页和过滤的历史告警列表查询。
|
||||
// 返回历史告警列表、总记录数和错误。
|
||||
ListHistoricalAlarms(ctx context.Context, opts HistoricalAlarmListOptions, page, pageSize int) ([]models.HistoricalAlarm, int64, error)
|
||||
|
||||
// UpdateAlarmNotificationStatus 显式更新告警的通知相关状态字段。
|
||||
// lastNotifiedAt: 传入具体的发送时间。
|
||||
// isIgnored: 告警新的忽略状态。
|
||||
@@ -148,7 +164,7 @@ func (r *gormAlarmRepository) ListActiveAlarms(ctx context.Context, opts ActiveA
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "ListActiveAlarms")
|
||||
// --- 校验分页参数 ---
|
||||
if page <= 0 || pageSize <= 0 {
|
||||
return nil, 0, ErrInvalidPagination // 复用已定义的错误
|
||||
return nil, 0, ErrInvalidPagination
|
||||
}
|
||||
|
||||
var results []models.ActiveAlarm
|
||||
@@ -195,6 +211,61 @@ func (r *gormAlarmRepository) ListActiveAlarms(ctx context.Context, opts ActiveA
|
||||
return results, total, err
|
||||
}
|
||||
|
||||
// ListHistoricalAlarms 实现了分页和过滤查询历史告警记录的功能
|
||||
func (r *gormAlarmRepository) ListHistoricalAlarms(ctx context.Context, opts HistoricalAlarmListOptions, page, pageSize int) ([]models.HistoricalAlarm, int64, error) {
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "ListHistoricalAlarms")
|
||||
// --- 校验分页参数 ---
|
||||
if page <= 0 || pageSize <= 0 {
|
||||
return nil, 0, ErrInvalidPagination
|
||||
}
|
||||
|
||||
var results []models.HistoricalAlarm
|
||||
var total int64
|
||||
|
||||
query := r.db.WithContext(repoCtx).Model(&models.HistoricalAlarm{})
|
||||
|
||||
// --- 应用过滤条件 ---
|
||||
if opts.SourceType != nil {
|
||||
query = query.Where("source_type = ?", *opts.SourceType)
|
||||
}
|
||||
if opts.SourceID != nil {
|
||||
query = query.Where("source_id = ?", *opts.SourceID)
|
||||
}
|
||||
if opts.Level != nil {
|
||||
query = query.Where("level = ?", *opts.Level)
|
||||
}
|
||||
if opts.TriggerTimeStart != nil {
|
||||
query = query.Where("trigger_time >= ?", *opts.TriggerTimeStart)
|
||||
}
|
||||
if opts.TriggerTimeEnd != nil {
|
||||
query = query.Where("trigger_time <= ?", *opts.TriggerTimeEnd)
|
||||
}
|
||||
if opts.ResolveTimeStart != nil { // 修改字段名
|
||||
query = query.Where("resolve_time >= ?", *opts.ResolveTimeStart) // 修改查询字段名
|
||||
}
|
||||
if opts.ResolveTimeEnd != nil { // 修改字段名
|
||||
query = query.Where("resolve_time <= ?", *opts.ResolveTimeEnd) // 修改查询字段名
|
||||
}
|
||||
|
||||
// --- 计算总数 ---
|
||||
if err := query.Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// --- 应用排序条件 ---
|
||||
orderBy := "trigger_time DESC" // 默认按触发时间倒序
|
||||
if opts.OrderBy != "" {
|
||||
orderBy = opts.OrderBy
|
||||
}
|
||||
query = query.Order(orderBy)
|
||||
|
||||
// --- 分页 ---
|
||||
offset := (page - 1) * pageSize
|
||||
err := query.Limit(pageSize).Offset(offset).Find(&results).Error
|
||||
|
||||
return results, total, err
|
||||
}
|
||||
|
||||
func (r *gormAlarmRepository) UpdateAlarmNotificationStatus(ctx context.Context, alarmID uint, lastNotifiedAt time.Time, isIgnored bool, ignoredUntil *time.Time) error {
|
||||
repoCtx := logs.AddFuncName(ctx, r.ctx, "UpdateAlarmNotificationStatus")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user