diff --git a/pkg/apis/monitor/meteralert.go b/pkg/apis/monitor/meteralert.go index c19381152b..acb8b4b5f8 100644 --- a/pkg/apis/monitor/meteralert.go +++ b/pkg/apis/monitor/meteralert.go @@ -70,4 +70,5 @@ type MeterAlertUpdateInput struct { ProjectId *string `json:"project_id"` // 通知方式, 比如: email, mobile Channel *string `json:"channel"` + Status *string `json:"status"` } diff --git a/pkg/apis/monitor/nodealert.go b/pkg/apis/monitor/nodealert.go index 82e4975361..47125ad1e4 100644 --- a/pkg/apis/monitor/nodealert.go +++ b/pkg/apis/monitor/nodealert.go @@ -171,6 +171,7 @@ type AlertV1Details struct { Measurement string `json:"measurement"` Field string `json:"field"` NotifierId string `json:"notifier_id"` + Status string `json:"status"` } type NodeAlertDetails struct { diff --git a/pkg/monitor/models/meteralert.go b/pkg/monitor/models/meteralert.go index b5a163369f..1f393832fd 100644 --- a/pkg/monitor/models/meteralert.go +++ b/pkg/monitor/models/meteralert.go @@ -570,6 +570,12 @@ func (alert *SMeterAlert) getUpdateSetting(details monitor.MeterAlertDetails, ds return out.Settings } +func (alert *SMeterAlert) PostUpdate( + ctx context.Context, userCred mcclient.TokenCredential, + query jsonutils.JSONObject, data jsonutils.JSONObject) { + alert.SV1Alert.PostUpdate(ctx, userCred, query, data) +} + func (alert *SMeterAlert) CustomizeDelete( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) error { diff --git a/pkg/monitor/models/nodealert.go b/pkg/monitor/models/nodealert.go index 51dff052e4..aa5cf446bb 100644 --- a/pkg/monitor/models/nodealert.go +++ b/pkg/monitor/models/nodealert.go @@ -292,6 +292,15 @@ func (alert *SV1Alert) CustomizeCreate( return err } +func (alert *SV1Alert) PostUpdate( + ctx context.Context, userCred mcclient.TokenCredential, + query jsonutils.JSONObject, data jsonutils.JSONObject) { + if data.(*jsonutils.JSONDict).Contains("status") { + status, _ := data.(*jsonutils.JSONDict).GetString("status") + alert.UpdateIsEnabledStatus(ctx, userCred, &status) + } +} + func (alert *SNodeAlert) CustomizeCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) error { if err := alert.SVirtualResourceBase.CustomizeCreate(ctx, userCred, ownerId, query, data); err != nil { return err @@ -353,6 +362,18 @@ func (alert *SNodeAlert) PostCreate(ctx context.Context, } } +const ( + V1AlertDisabledStatus = "Disabled" + V1AlertEnabledStatus = "Enabled" +) + +func (alert *SV1Alert) GetStatus() string { + if alert.IsEnable() { + return V1AlertEnabledStatus + } + return V1AlertDisabledStatus +} + func (alert *SV1Alert) GetExtraDetails( ctx context.Context, userCred mcclient.TokenCredential, @@ -414,6 +435,7 @@ func (alert *SV1Alert) GetExtraDetails( out.Measurement = measurement out.Field = field out.DB = db + out.Status = alert.GetStatus() return out, nil } @@ -483,6 +505,33 @@ func (alert *SV1Alert) UpdateNotification(usedBy string, channel, recipients *st return err } +func (alert *SV1Alert) UpdateIsEnabledStatus(ctx context.Context, userCred mcclient.TokenCredential, status *string) error { + if status == nil { + return nil + } + if status != nil { + s := *status + if s == V1AlertDisabledStatus { + if _, err := alert.PerformDisable(ctx, userCred, nil, nil); err != nil { + return err + } + db.Update(&alert.SAlert, func() error { + alert.SetStatus(userCred, V1AlertDisabledStatus, "") + return nil + }) + } else { + if _, err := alert.PerformEnable(ctx, userCred, nil, nil); err != nil { + return err + } + db.Update(&alert.SAlert, func() error { + alert.SetStatus(userCred, V1AlertEnabledStatus, "") + return nil + }) + } + } + return nil +} + func (alert *SV1Alert) CustomizeDelete( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) error { @@ -628,6 +677,12 @@ func (alert *SNodeAlert) getUpdateSetting( return out.Settings } +func (alert *SNodeAlert) PostUpdate( + ctx context.Context, userCred mcclient.TokenCredential, + query jsonutils.JSONObject, data jsonutils.JSONObject) { + alert.SV1Alert.PostUpdate(ctx, userCred, query, data) +} + func (alert *SNodeAlert) CustomizeDelete( ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) error {