diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index c41f9e2803..d12f1fa552 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -1852,6 +1852,10 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre item.PostUpdate(ctx, userCred, query, data) + if err := manager.GetExtraHook().AfterPostUpdate(ctx, userCred, item, query, data); err != nil { + logclient.AddActionLogWithContext(ctx, item, logclient.ACT_POST_UPDATE_HOOK, err, userCred, false) + } + return getItemDetails(manager, item, ctx, userCred, query) } diff --git a/pkg/cloudcommon/db/db_joint_dispatcher.go b/pkg/cloudcommon/db/db_joint_dispatcher.go index 9f27db490a..1f07f84f81 100644 --- a/pkg/cloudcommon/db/db_joint_dispatcher.go +++ b/pkg/cloudcommon/db/db_joint_dispatcher.go @@ -28,6 +28,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/policy" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/onecloud/pkg/util/logclient" ) type DBJointModelDispatcher struct { @@ -210,6 +211,9 @@ func attachItems( return nil, httperrors.NewGeneralError(err) } item.PostCreate(ctx, userCred, nil, query, data) + if err := dispatcher.JointModelManager().GetExtraHook().AfterPostCreate(ctx, userCred, item.GetOwnerId(), item, query, data); err != nil { + logclient.AddActionLogWithContext(ctx, item, logclient.ACT_POST_CREATE_HOOK, err, userCred, false) + } OpsLog.LogAttachEvent(ctx, master, slave, userCred, jsonutils.Marshal(item)) dispatcher.manager.OnCreateComplete(ctx, []IModel{item}, userCred, nil, query, []jsonutils.JSONObject{data}) @@ -322,5 +326,8 @@ func DetachJoint(ctx context.Context, userCred mcclient.TokenCredential, item IJ if err == nil { OpsLog.LogDetachEvent(ctx, JointMaster(item), JointSlave(item), userCred, item.GetShortDesc(ctx)) } + if err := item.GetModelManager().GetExtraHook().AfterPostDelete(ctx, userCred, item, nil); err != nil { + logclient.AddActionLogWithContext(ctx, item, logclient.ACT_POST_DELETE_HOOK, err, userCred, false) + } return err } diff --git a/pkg/cloudcommon/db/interface.go b/pkg/cloudcommon/db/interface.go index e7643f3ee6..56b4c77a7c 100644 --- a/pkg/cloudcommon/db/interface.go +++ b/pkg/cloudcommon/db/interface.go @@ -152,6 +152,7 @@ type IModelManager interface { type IModelManagerExtraHook interface { AfterPostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, model IModel, query jsonutils.JSONObject, data jsonutils.JSONObject) error + AfterPostUpdate(ctx context.Context, userCred mcclient.TokenCredential, model IModel, query jsonutils.JSONObject, data jsonutils.JSONObject) error AfterPostDelete(ctx context.Context, userCred mcclient.TokenCredential, model IModel, query jsonutils.JSONObject) error } diff --git a/pkg/cloudcommon/db/modelbase.go b/pkg/cloudcommon/db/modelbase.go index 925fe3dc48..849732bb27 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -880,3 +880,7 @@ func (e SEmptyExtraHook) AfterPostCreate(ctx context.Context, userCred mcclient. func (e SEmptyExtraHook) AfterPostDelete(ctx context.Context, userCred mcclient.TokenCredential, model IModel, query jsonutils.JSONObject) error { return nil } + +func (e SEmptyExtraHook) AfterPostUpdate(ctx context.Context, userCred mcclient.TokenCredential, model IModel, query jsonutils.JSONObject, data jsonutils.JSONObject) error { + return nil +} diff --git a/pkg/monitor/models/monitor_resource.go b/pkg/monitor/models/monitor_resource.go index bf06faec6d..a038ccbf42 100644 --- a/pkg/monitor/models/monitor_resource.go +++ b/pkg/monitor/models/monitor_resource.go @@ -493,14 +493,14 @@ func (self *SMonitorResource) UpdateAttachJoint(ctx context.Context, userCred mc log.Errorf("attach alert error: %s", err) } log.Infof("Attach Alert joint: %#v, match: %s", newJoint, jsonutils.Marshal(match)) - if err := newJoint.UpdateAlertRecordData(input, &match); err != nil { + if err := newJoint.UpdateAlertRecordData(ctx, userCred, input, &match); err != nil { errs = append(errs, errors.Wrapf(err, "new joint %s:%s %s:%s UpdateAlertRecordData err", MonitorResourceAlertManager.GetMasterFieldName(), self.ResId, MonitorResourceAlertManager.GetSlaveFieldName(), input.AlertId)) } } else { for _, joint := range updateJoints { - err := joint.UpdateAlertRecordData(input, &match) + err := joint.UpdateAlertRecordData(ctx, userCred, input, &match) if err != nil { errs = append(errs, errors.Wrapf(err, "joint %s:%s %s:%s UpdateAlertRecordData err", MonitorResourceAlertManager.GetMasterFieldName(), self.ResId, diff --git a/pkg/monitor/models/monitor_resource_alert.go b/pkg/monitor/models/monitor_resource_alert.go index ff38150a69..5efb919976 100644 --- a/pkg/monitor/models/monitor_resource_alert.go +++ b/pkg/monitor/models/monitor_resource_alert.go @@ -141,7 +141,7 @@ func (manager *SMonitorResourceAlertManager) GetJoinsByListInput(input monitor.M return joints, nil } -func (obj *SMonitorResourceAlert) UpdateAlertRecordData(input *UpdateMonitorResourceAlertInput, match *monitor.EvalMatch) error { +func (obj *SMonitorResourceAlert) UpdateAlertRecordData(ctx context.Context, userCred mcclient.TokenCredential, input *UpdateMonitorResourceAlertInput, match *monitor.EvalMatch) error { sendState := input.SendState if _, ok := match.Tags[monitor.ALERT_RESOURCE_RECORD_SHIELD_KEY]; ok { sendState = monitor.SEND_STATE_SHIELD @@ -160,6 +160,9 @@ func (obj *SMonitorResourceAlert) UpdateAlertRecordData(input *UpdateMonitorReso }); err != nil { return errors.Wrap(err, "db.Update") } + if err := obj.GetModelManager().GetExtraHook().AfterPostUpdate(ctx, userCred, obj, jsonutils.NewDict(), jsonutils.NewDict()); err != nil { + log.Warningf("UpdateAlertRecordData after post update hook error: %v", err) + } return nil } diff --git a/pkg/util/logclient/consts.go b/pkg/util/logclient/consts.go index 0ec4dbd949..691e3ab312 100644 --- a/pkg/util/logclient/consts.go +++ b/pkg/util/logclient/consts.go @@ -30,6 +30,7 @@ const ( ACT_CREATE = "create" ACT_POST_CREATE_HOOK = "post_create_hook" ACT_POST_DELETE_HOOK = "post_delete_hook" + ACT_POST_UPDATE_HOOK = "post_update_hook" ACT_DELETE = "delete" ACT_PENDING_DELETE = "pending_delete" ACT_DISABLE = "disable"