mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
Merge remote-tracking branch 'origin/release/2.6.0' into bugfix/yousong-update-diffs-270
This commit is contained in:
Generated
+4
-4
@@ -1695,7 +1695,7 @@
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:204f1b178847f36dd976b909c0cf720c60b5f144c8390601928cd75abd4a894f"
|
||||
digest = "1:04fac3de327ed7bf4490436dd3eb5fb10c7e80b919a109935d053f584fdb6566"
|
||||
name = "yunion.io/x/pkg"
|
||||
packages = [
|
||||
"gotypes",
|
||||
@@ -1729,15 +1729,15 @@
|
||||
"utils",
|
||||
]
|
||||
pruneopts = "UT"
|
||||
revision = "857664cbfc1ceb07fcdbacbd8dfe5563ad2a96df"
|
||||
revision = "5d28ae811a2aaaed19efdc468573ef236b8327f9"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:cb0b3f303fb24e8a173183b30480ccb690996b6e28e1c52e58e8fc6d2cf51eb8"
|
||||
digest = "1:4137f40ed548a5dc02719ad2e6b6bdfd76a9d881fcd1a72eb5970956a7219d03"
|
||||
name = "yunion.io/x/sqlchemy"
|
||||
packages = ["."]
|
||||
pruneopts = "UT"
|
||||
revision = "dfa73ef1a72202e8cbc68dbb7bd155cec4894928"
|
||||
revision = "4d8d8e9b16804336f16570787421b9be24a6da1f"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
|
||||
@@ -137,9 +137,7 @@ func (model *SAdminSharableVirtualResourceBase) setInfo(ctx context.Context,
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if diff != nil {
|
||||
OpsLog.LogEvent(model, ACT_UPDATE, diff, userCred)
|
||||
logclient.AddActionLogWithContext(ctx, model, logclient.ACT_UPDATE, diff, userCred, true)
|
||||
}
|
||||
OpsLog.LogEvent(model, ACT_UPDATE, diff, userCred)
|
||||
logclient.AddActionLogWithContext(ctx, model, logclient.ACT_UPDATE, diff, userCred, true)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -1259,16 +1259,8 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre
|
||||
log.Errorf("save update error: %s", err)
|
||||
return nil, httperrors.NewGeneralError(err)
|
||||
}
|
||||
if diff != nil {
|
||||
diffStr := sqlchemy.UpdateDiffString(diff)
|
||||
if len(diffStr) > 0 {
|
||||
item.PostUpdate(ctx, userCred, query, dataDict)
|
||||
OpsLog.LogEvent(item, ACT_UPDATE, diffStr, userCred)
|
||||
logclient.AddActionLogWithContext(ctx, item, logclient.ACT_UPDATE, diffStr, userCred, true)
|
||||
}
|
||||
} else {
|
||||
logclient.AddActionLogWithContext(ctx, item, logclient.ACT_UPDATE, "", userCred, true)
|
||||
}
|
||||
OpsLog.LogEvent(item, ACT_UPDATE, diff, userCred)
|
||||
logclient.AddActionLogWithContext(ctx, item, logclient.ACT_UPDATE, diff, userCred, true)
|
||||
|
||||
item.PostUpdate(ctx, userCred, query, data)
|
||||
|
||||
|
||||
@@ -237,6 +237,15 @@ func (manager *SOpsLogManager) LogEvent(model IModel, action string, notes inter
|
||||
if len(model.GetId()) == 0 || len(model.GetName()) == 0 {
|
||||
return
|
||||
}
|
||||
if action == ACT_UPDATE {
|
||||
// skip empty diff
|
||||
if notes == nil {
|
||||
return
|
||||
}
|
||||
if uds, ok := notes.(sqlchemy.UpdateDiffs); ok && len(uds) == 0 {
|
||||
return
|
||||
}
|
||||
}
|
||||
opslog := SOpsLog{}
|
||||
opslog.ObjType = model.Keyword()
|
||||
opslog.ObjId = model.GetId()
|
||||
@@ -348,10 +357,9 @@ func (manager *SOpsLogManager) SyncOwner(m IModel, former *STenant, userCred mcc
|
||||
manager.LogEvent(m, ACT_CHANGE_OWNER, notes, userCred)
|
||||
}
|
||||
|
||||
func (manager *SOpsLogManager) LogSyncUpdate(m IModel, diff map[string]sqlchemy.SUpdateDiff, userCred mcclient.TokenCredential) {
|
||||
diffStr := sqlchemy.UpdateDiffString(diff)
|
||||
if len(diffStr) > 0 {
|
||||
manager.LogEvent(m, ACT_SYNC_UPDATE, diffStr, userCred)
|
||||
func (manager *SOpsLogManager) LogSyncUpdate(m IModel, uds sqlchemy.UpdateDiffs, userCred mcclient.TokenCredential) {
|
||||
if len(uds) > 0 {
|
||||
manager.LogEvent(m, ACT_SYNC_UPDATE, uds, userCred)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ func (manager *SCachedimageManager) cacheGlanceImageInfo(ctx context.Context, us
|
||||
return nil, err
|
||||
}
|
||||
|
||||
db.OpsLog.LogEvent(&imageCache, db.ACT_UPDATE, sqlchemy.UpdateDiffString(diff), userCred)
|
||||
db.OpsLog.LogEvent(&imageCache, db.ACT_UPDATE, diff, userCred)
|
||||
|
||||
return &imageCache, nil
|
||||
}
|
||||
|
||||
@@ -911,7 +911,7 @@ func (self *SCloudaccount) enableAutoSync(ctx context.Context, userCred mcclient
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
db.OpsLog.LogEvent(self, db.ACT_UPDATE, sqlchemy.UpdateDiffString(diff), userCred)
|
||||
db.OpsLog.LogEvent(self, db.ACT_UPDATE, diff, userCred)
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -938,7 +938,7 @@ func (self *SCloudaccount) disableAutoSync(ctx context.Context, userCred mcclien
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
db.OpsLog.LogEvent(self, db.ACT_UPDATE, sqlchemy.UpdateDiffString(diff), userCred)
|
||||
db.OpsLog.LogEvent(self, db.ACT_UPDATE, diff, userCred)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -889,7 +889,7 @@ func (self *SServerSku) setPrepaidPostpaidStatus(userCred mcclient.TokenCredenti
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
db.OpsLog.LogEvent(self, db.ACT_UPDATE, sqlchemy.UpdateDiffString(diff), userCred)
|
||||
db.OpsLog.LogEvent(self, db.ACT_UPDATE, diff, userCred)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@ import (
|
||||
"yunion.io/x/log"
|
||||
"yunion.io/x/pkg/util/stringutils"
|
||||
"yunion.io/x/pkg/util/timeutils"
|
||||
"yunion.io/x/pkg/utils"
|
||||
"yunion.io/x/sqlchemy"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/appctx"
|
||||
"yunion.io/x/onecloud/pkg/appsrv"
|
||||
@@ -129,18 +131,22 @@ func addLog(model IObject, action string, iNotes interface{}, userCred mcclient.
|
||||
if !consts.OpsLogEnabled() {
|
||||
return
|
||||
}
|
||||
|
||||
token := userCred
|
||||
notes := stringutils.Interface2String(iNotes)
|
||||
|
||||
// 忽略不黑名单里的资源类型
|
||||
for _, v := range BLACK_LIST_OBJ_TYPE {
|
||||
if v == model.Keyword() {
|
||||
log.Errorf("不支持的 actionlog 类型")
|
||||
if ok, _ := utils.InStringArray(model.Keyword(), BLACK_LIST_OBJ_TYPE); ok {
|
||||
log.Errorf("不支持的 actionlog 类型")
|
||||
return
|
||||
}
|
||||
if action == ACT_UPDATE {
|
||||
if iNotes == nil {
|
||||
return
|
||||
}
|
||||
if uds, ok := iNotes.(sqlchemy.UpdateDiffs); ok && len(uds) == 0 {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
token := userCred
|
||||
notes := stringutils.Interface2String(iNotes)
|
||||
|
||||
objId := model.GetId()
|
||||
if len(objId) == 0 {
|
||||
objId = "-"
|
||||
|
||||
+3
@@ -53,6 +53,9 @@ func Interface2String(val interface{}) string {
|
||||
tm := val.(time.Time)
|
||||
return timeutils.FullIsoTime(tm)
|
||||
default:
|
||||
if s, ok := val.(fmt.Stringer); ok {
|
||||
return s.String()
|
||||
}
|
||||
json := jsonutils.Marshal(val)
|
||||
return json.String()
|
||||
}
|
||||
|
||||
+35
@@ -2,6 +2,8 @@ package sqlchemy
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type SFunctionField struct {
|
||||
@@ -68,3 +70,36 @@ func GROUP_CONCAT(name string, field IQueryField) IQueryField {
|
||||
ff := NewFunctionField(name, "GROUP_CONCAT(%s)", field)
|
||||
return &ff
|
||||
}
|
||||
|
||||
type SStringField struct {
|
||||
strConst string
|
||||
}
|
||||
|
||||
func (s *SStringField) Expression() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (s *SStringField) Name() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (s *SStringField) Reference() string {
|
||||
return strconv.Quote(s.strConst)
|
||||
}
|
||||
|
||||
func (s *SStringField) Label(label string) IQueryField {
|
||||
return s
|
||||
}
|
||||
|
||||
func NewStringField(name string) *SStringField {
|
||||
return &SStringField{strConst: name}
|
||||
}
|
||||
|
||||
func CONCAT(name string, fields ...IQueryField) IQueryField {
|
||||
params := []string{}
|
||||
for i := 0; i < len(fields); i++ {
|
||||
params = append(params, "%s")
|
||||
}
|
||||
ff := NewFunctionField(name, `CONCAT(`+strings.Join(params, ",")+`)`, fields...)
|
||||
return &ff
|
||||
}
|
||||
|
||||
+11
-9
@@ -52,9 +52,11 @@ type SUpdateDiff struct {
|
||||
col IColumnSpec
|
||||
}
|
||||
|
||||
func UpdateDiffString(diff map[string]SUpdateDiff) string {
|
||||
items := make([]string, 0)
|
||||
for k, v := range diff {
|
||||
type UpdateDiffs map[string]SUpdateDiff
|
||||
|
||||
func (uds UpdateDiffs) String() string {
|
||||
items := make([]string, 0, len(uds))
|
||||
for k, v := range uds {
|
||||
items = append(items, fmt.Sprintf("%s: %s -> %s", k,
|
||||
utils.TruncateString(v.old, 32),
|
||||
utils.TruncateString(v.new, 32)))
|
||||
@@ -62,7 +64,7 @@ func UpdateDiffString(diff map[string]SUpdateDiff) string {
|
||||
return strings.Join(items, "; ")
|
||||
}
|
||||
|
||||
func (us *SUpdateSession) saveUpdate(dt interface{}) (map[string]SUpdateDiff, error) {
|
||||
func (us *SUpdateSession) saveUpdate(dt interface{}) (UpdateDiffs, error) {
|
||||
beforeUpdateFunc := reflect.ValueOf(dt).MethodByName("BeforeUpdate")
|
||||
if beforeUpdateFunc.IsValid() && !beforeUpdateFunc.IsNil() {
|
||||
beforeUpdateFunc.Call([]reflect.Value{})
|
||||
@@ -76,7 +78,7 @@ func (us *SUpdateSession) saveUpdate(dt interface{}) (map[string]SUpdateDiff, er
|
||||
versionFields := make([]string, 0)
|
||||
updatedFields := make([]string, 0)
|
||||
primaries := make(map[string]interface{})
|
||||
setters := make(map[string]SUpdateDiff)
|
||||
setters := UpdateDiffs{}
|
||||
for _, c := range us.tableSpec.columns {
|
||||
k := c.Name()
|
||||
of, _ := ofields.GetInterface(k)
|
||||
@@ -165,7 +167,7 @@ func (us *SUpdateSession) saveUpdate(dt interface{}) (map[string]SUpdateDiff, er
|
||||
return setters, nil
|
||||
}
|
||||
|
||||
func (ts *STableSpec) Update(dt interface{}, doUpdate func() error) (map[string]SUpdateDiff, error) {
|
||||
func (ts *STableSpec) Update(dt interface{}, doUpdate func() error) (UpdateDiffs, error) {
|
||||
session, err := ts.prepareUpdate(dt)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -174,13 +176,13 @@ func (ts *STableSpec) Update(dt interface{}, doUpdate func() error) (map[string]
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
diff, err := session.saveUpdate(dt)
|
||||
uds, err := session.saveUpdate(dt)
|
||||
if err == ErrNoDataToUpdate {
|
||||
return nil, nil
|
||||
} else if err == nil {
|
||||
if DEBUG_SQLCHEMY {
|
||||
log.Debugf("Update diff: %s", UpdateDiffString(diff))
|
||||
log.Debugf("Update diff: %s", uds)
|
||||
}
|
||||
}
|
||||
return diff, err
|
||||
return uds, err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user