feat(cloudcommon): add ExtraHook steps to joint model (#23741)

This commit is contained in:
Zexi Li
2025-11-14 10:50:58 +08:00
committed by GitHub
parent 3ae144e233
commit 453d47c99b
7 changed files with 23 additions and 3 deletions
+4
View File
@@ -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)
}
@@ -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
}
+1
View File
@@ -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
}
+4
View File
@@ -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
}
+2 -2
View File
@@ -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,
+4 -1
View File
@@ -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
}
+1
View File
@@ -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"