From bb9b2c0d2cd8892e15d309d28c6954c343268141 Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Wed, 22 Aug 2018 14:24:59 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0logclient?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/util/logclient/doc.go | 1 + pkg/util/logclient/logclient.go | 64 +++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 pkg/util/logclient/doc.go create mode 100644 pkg/util/logclient/logclient.go diff --git a/pkg/util/logclient/doc.go b/pkg/util/logclient/doc.go new file mode 100644 index 0000000000..7466f9702f --- /dev/null +++ b/pkg/util/logclient/doc.go @@ -0,0 +1 @@ +package logclient // import "yunion.io/x/onecloud/pkg/util/logclient" diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go new file mode 100644 index 0000000000..3f5ea151c2 --- /dev/null +++ b/pkg/util/logclient/logclient.go @@ -0,0 +1,64 @@ +package logclient + +import ( + "fmt" + "net/http" + "context" + "yunion.io/x/onecloud/pkg/mcclient/modules" + "yunion.io/x/jsonutils" + "yunion.io/x/onecloud/pkg/mcclient/auth" + "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/log" +) + +func fetchRegion(req *http.Request) string { + r, e := req.Cookie("region") + if e != nil { + return "" + } + return r.Value +} + +func AddActionLog(ctx context.Context, userCred mcclient.TokenCredential, action, notes string, e error) { + // 记录企业信息变更操作日志 + +// token := auth.FetchUserCredential(ctx) + log.Errorf("\n.\n.\n.\n.\n.") + log.Errorf("[AddActionLog]ctx: %s", ctx) +// log.Errorf("[AddActionLog] token: %s", token) + log.Errorf("[AddActionLog] token.userid: %s", userCred.GetUserId()) + log.Errorf("\n.\n.\n.\n.\n.") + // userid := userCred.GetUserId() + // username := userCred.GetUserName() + // tenantid := userCred.GetTenantId() + token := userCred + // s := auth.GetAdminSession(fetchRegion(req), "") + s := auth.GetSession(userCred, "", "") + log.Errorf("session id: Fzu3qiEYUS9P %s", s) + + log := jsonutils.NewDict() + log.Add(jsonutils.NewString("infos"), "obj_type") + log.Add(jsonutils.NewString("-"), "obj_id") + log.Add(jsonutils.NewString("-"), "obj_name") + log.Add(jsonutils.NewString("更新"), "action") + log.Add(jsonutils.NewString(token.GetUserId()), "user_id") + log.Add(jsonutils.NewString(token.GetUserName()), "user") + log.Add(jsonutils.NewString(token.GetTenantId()), "tenant_id") + log.Add(jsonutils.NewString(token.GetTenantName()), "tenant") + log.Add(jsonutils.NewString(notes), "notes") + + if e != nil { + // 失败日志 + log.Add(jsonutils.JSONFalse, "success") + } else { + // 成功日志 + log.Add(jsonutils.JSONTrue, "success") + } + + _, e = modules.Actions.Create(s, log) + if e != nil { + fmt.Printf("create action log failed %s", e) + } else { + fmt.Println("create action log sucess") + } +} From 6e5b509f3ecf1997e08a4d075571a775562c2477 Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Fri, 24 Aug 2018 15:34:02 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0logclient;=20aliyun=20s?= =?UTF-8?q?erver=20crud=20=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/db/db_dispatcher.go | 20 ++- pkg/compute/tasks/guest_rebuild_root_task.go | 11 +- pkg/compute/tasks/guest_start_task.go | 4 +- pkg/compute/tasks/guest_stop_task.go | 4 +- pkg/compute/tasks/guest_syncstatus_task.go | 7 + pkg/util/logclient/logclient.go | 142 ++++++++++++------- 6 files changed, 128 insertions(+), 60 deletions(-) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 8b4179f50d..89d6cd54dd 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -21,6 +21,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient/auth" "yunion.io/x/onecloud/pkg/mcclient/modules" "yunion.io/x/onecloud/pkg/util/httputils" + "yunion.io/x/onecloud/pkg/util/logclient" ) type DBModelDispatcher struct { @@ -740,6 +741,7 @@ func (dispatcher *DBModelDispatcher) Create(ctx context.Context, query jsonutils return nil, httperrors.NewGeneralError(err) } OpsLog.LogEvent(model, ACT_CREATE, model.GetShortDesc(), userCred) + logclient.AddActionLog(ctx, userCred, logclient.ACT_CREATE, "", model, "") dispatcher.modelManager.OnCreateComplete(ctx, []IModel{model}, userCred, query, data) return getItemDetails(dispatcher.modelManager, model, ctx, userCred, query) } @@ -958,11 +960,13 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if err != nil { log.Errorf("validate update condition error: %s", err) + logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, err.Error()) return nil, httperrors.NewGeneralError(err) } dataDict, ok := data.(*jsonutils.JSONDict) if !ok { + logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, "Invalid data JSONObject") return nil, httperrors.NewInternalServerError("Invalid data JSONObject") } @@ -970,13 +974,16 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if len(name) > 0 { err = alterNameValidator(item, name) if err != nil { + logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, err.Error()) return nil, err } } dataDict, err = item.ValidateUpdateData(ctx, userCred, query, dataDict) if err != nil { - log.Errorf("validate update data error: %s", err) + errMsg := fmt.Sprintf("validate update data error: %s", err) + log.Errorf(errMsg) + logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, errMsg) return nil, httperrors.NewGeneralError(err) } item.PreUpdate(ctx, userCred, query, dataDict) @@ -985,7 +992,9 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre filterData := dataDict.CopyIncludes(updateFields(manager, userCred)...) err = filterData.Unmarshal(item) if err != nil { - log.Errorf("unmarshal fail: %s", err) + errMsg := fmt.Sprintf("unmarshal fail: %s", err) + logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, errMsg) + log.Errorf(errMsg) return httperrors.NewGeneralError(err) } return nil @@ -999,8 +1008,10 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre diffStr := sqlchemy.UpdateDiffString(diff) if len(diffStr) > 0 { OpsLog.LogEvent(item, ACT_UPDATE, diffStr, userCred) + logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, diffStr) } } + logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, dataDict.String(), item, "") return getItemDetails(manager, item, ctx, userCred, query) } @@ -1027,10 +1038,13 @@ func DeleteModel(ctx context.Context, userCred mcclient.TokenCredential, item IM return item.MarkDelete() }) if err != nil { - log.Errorf("save update error %s", err) + msg := fmt.Sprintf("save update error %s", err) + log.Errorf(msg) + logclient.AddActionLog(ctx, userCred, logclient.ACT_DELETE, "", item, msg) return httperrors.NewGeneralError(err) } OpsLog.LogEvent(item, ACT_DELETE, item.GetShortDesc(), userCred) + logclient.AddActionLog(ctx, userCred, logclient.ACT_DELETE, "", item, "") return nil } diff --git a/pkg/compute/tasks/guest_rebuild_root_task.go b/pkg/compute/tasks/guest_rebuild_root_task.go index 03345b85ac..165b8ff213 100644 --- a/pkg/compute/tasks/guest_rebuild_root_task.go +++ b/pkg/compute/tasks/guest_rebuild_root_task.go @@ -11,6 +11,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" ) func init() { @@ -48,6 +49,7 @@ func (self *GuestRebuildRootTask) StartRebuildRootDisk(ctx context.Context, gues }) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } else { db.OpsLog.LogEvent(gds.Root, db.ACT_UPDATE_STATUS, @@ -64,16 +66,19 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, imginfo, err := models.CachedimageManager.GetImageById(ctx, self.UserCred, imgId, false) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } osprof, err := osprofile.GetOSProfileFromImageProperties(imginfo.Properties, guest.Hypervisor) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } err = guest.SetMetadata(ctx, "__os_profile__", osprof, self.UserCred) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } if guest.OsType != osprof.OSType { @@ -83,11 +88,11 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, }) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } } db.OpsLog.LogEvent(guest, db.ACT_REBUILD_ROOT, "", self.UserCred) - // TODO: logclient guest.NotifyServerEvent(notifyclient.SERVER_REBUILD_ROOT, notifyclient.PRIORITY_IMPORTANT, true) self.SetStage("OnSyncStatusComplete", nil) guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) @@ -96,7 +101,7 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, func (self *GuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { db.OpsLog.LogEvent(guest, db.ACT_REBUILD_ROOT_FAIL, data.String(), self.UserCred) guest.SetStatus(self.UserCred, models.VM_REBUILD_ROOT_FAIL, "") - // TODO: logclient + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, data.String()) } func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -106,6 +111,7 @@ func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, gues } else { self.SetStageComplete(ctx, nil) } + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, "") } func (self *GuestRebuildRootTask) OnGuestStartComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -137,6 +143,7 @@ func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Conte func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { self.SetStageFailed(ctx, data.String()) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, data.String()) } func (self *KVMGuestRebuildRootTask) OnGuestDeployComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_start_task.go b/pkg/compute/tasks/guest_start_task.go index 7bbb2ca2dc..3965a51d05 100644 --- a/pkg/compute/tasks/guest_start_task.go +++ b/pkg/compute/tasks/guest_start_task.go @@ -4,10 +4,10 @@ import ( "context" "yunion.io/x/jsonutils" - "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" ) type GuestStartTask struct { @@ -59,6 +59,7 @@ func (self *GuestStartTask) OnStartComplete(ctx context.Context, obj db.IStandal db.OpsLog.LogEvent(guest, db.ACT_START, guest.GetShortDesc(), self.UserCred) self.SetStage("on_guest_syncstatus_after_start", nil) guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_START, "", guest, "") // self.taskComplete(ctx, guest) } @@ -75,6 +76,7 @@ func (self *GuestStartTask) OnStartCompleteFailed(ctx context.Context, obj db.IS func (self *GuestStartTask) onStartGuestFailed(ctx context.Context, guest *models.SGuest, err error) { self.SetStageFailed(ctx, err.Error()) self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_START, "", guest, err.Error()) } func (self *GuestStartTask) taskComplete(ctx context.Context, guest *models.SGuest) { diff --git a/pkg/compute/tasks/guest_stop_task.go b/pkg/compute/tasks/guest_stop_task.go index 2ed0f4aa6c..aa0119d549 100644 --- a/pkg/compute/tasks/guest_stop_task.go +++ b/pkg/compute/tasks/guest_stop_task.go @@ -6,10 +6,10 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" - "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" ) type GuestStopTask struct { @@ -58,10 +58,12 @@ func (self *GuestStopTask) OnGuestStopTaskComplete(ctx context.Context, obj db.I if guest.Status == models.VM_READY && guest.DisableDelete.IsFalse() && guest.ShutdownBehavior == models.SHUTDOWN_TERMINATE { guest.StartAutoDeleteGuestTask(ctx, self.UserCred, "") } + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_STOP, "", guest, "") } func (self *GuestStopTask) OnStopGuestFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_STOP_FAILED, err.Error()) db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, err.Error(), self.UserCred) self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_STOP, "", guest, err.Error()) } diff --git a/pkg/compute/tasks/guest_syncstatus_task.go b/pkg/compute/tasks/guest_syncstatus_task.go index 478f4afe6d..7b161e9f27 100644 --- a/pkg/compute/tasks/guest_syncstatus_task.go +++ b/pkg/compute/tasks/guest_syncstatus_task.go @@ -2,6 +2,7 @@ package tasks import ( "context" + "fmt" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -9,6 +10,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" ) type GuestSyncstatusTask struct { @@ -53,9 +55,14 @@ func (self *GuestSyncstatusTask) OnGetStatusSucc(ctx context.Context, guest *mod statusData.Add(jsonutils.NewString(statusStr), "status") guest.PerformStatus(ctx, self.UserCred, nil, statusData) self.SetStageComplete(ctx, nil) + fmt.Println(" \n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\\n*n* * * * * * * * * * * * * ") + fmt.Println("* * * * * * * * * * * * * server obj:", guest) + fmt.Println(" \n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\\n*n* * * * * * * * * * * * * ") + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_SYNC_STATUS, "", guest, "") } func (self *GuestSyncstatusTask) OnGetStatusFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_UNKNOWN, err.Error()) self.SetStageComplete(ctx, nil) + logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_SYNC_STATUS, "", guest, err.Error()) } diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go index 3f5ea151c2..b7b52ec23f 100644 --- a/pkg/util/logclient/logclient.go +++ b/pkg/util/logclient/logclient.go @@ -1,64 +1,100 @@ package logclient import ( - "fmt" - "net/http" "context" - "yunion.io/x/onecloud/pkg/mcclient/modules" + "fmt" + "log" + "net/http" + "yunion.io/x/jsonutils" - "yunion.io/x/onecloud/pkg/mcclient/auth" + "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/mcclient" - "yunion.io/x/log" + "yunion.io/x/onecloud/pkg/mcclient/auth" + "yunion.io/x/onecloud/pkg/util/httputils" ) -func fetchRegion(req *http.Request) string { - r, e := req.Cookie("region") - if e != nil { - return "" +const ( + ACT_VM_RESET_PSWD = "重置密码" + ACT_VM_REBUILD = "重装系统" + ACT_VM_START = "开机" + ACT_VM_STOP = "关机" + ACT_VM_PURGE = "清除" + ACT_VM_CHANGE_FLAVOR = "调整配置" + ACT_VM_SYNC_CONF = "同步配置" + ACT_GUEST_ATTACH_ISOLATED_DEVICE = "挂载透传设备" + ACT_GUEST_DETACH_ISOLATED_DEVICE = "卸载透传设备" + ACT_VM_SYNC_STATUS = "同步状态" + ACT_CREATE = "创建" + ACT_DELETE = "删除" + ACT_UPDATE = "更新" + ACT_RESERVE_IP = "预留IP" + ACT_RELEASE_IP = "释放IP" + ACT_CANCEL_DELETE = "恢复" + ACT_UNCACHED_IMAGE = "清除缓存" + ACT_ENABLE = "启用" + ACT_DISABLE = "禁用" + ACT_ONLINE = "上线" + ACT_OFFLINE = "下线" + ACT_PUBLIC = "设为共享" + ACT_PRIVATE = "设为私有" + ACT_MERGE = "合并" + ACT_SPLIT = "分割" + ACT_ALLOCATE = "分配" + ACT_BM_MAINTENANCE = "进入离线状态" + ACT_BM_UNMAINTENANCE = "退出离线状态" + ACT_BM_CONVERT_HYPER = "转换为宿主机" + ACT_BM_UNCONVERT_HYPER = "转换为受管物理机" + ACT_ADDTAG = "添加标签" + ACT_RMTAG = "删除标签" + ACT_RESIZE = "扩容" + ACT_VM_ATTACH_DISK = "挂载磁盘" + ACT_VM_DETACH_DISK = "卸载磁盘" +) + +type IObject interface { + GetId() string + GetName() string + Keyword() string +} + +func AddActionLog(ctx context.Context, userCred mcclient.TokenCredential, action, notes string, obj IObject, e string) { + + token := userCred + logentry := jsonutils.NewDict() + logentry.Add(jsonutils.NewString(obj.GetName()), "obj_name") + logentry.Add(jsonutils.NewString(obj.Keyword()), "obj_type") + logentry.Add(jsonutils.NewString(obj.GetId()), "obj_id") + logentry.Add(jsonutils.NewString(action), "action") + logentry.Add(jsonutils.NewString(token.GetUserId()), "user_id") + logentry.Add(jsonutils.NewString(token.GetUserName()), "user") + logentry.Add(jsonutils.NewString(token.GetTenantId()), "tenant_id") + logentry.Add(jsonutils.NewString(token.GetTenantName()), "tenant") + // todo: 正式版去掉下面这行。 + notes = "[region2]" + notes + + if len(e) > 0 { + // 失败日志 + logentry.Add(jsonutils.JSONFalse, "success") + notes = fmt.Sprintf("%s%s", notes, e) + logentry.Add(jsonutils.NewString(notes), "notes") + } else { + // 成功日志 + logentry.Add(jsonutils.JSONTrue, "success") + logentry.Add(jsonutils.NewString(notes), "notes") } - return r.Value -} -func AddActionLog(ctx context.Context, userCred mcclient.TokenCredential, action, notes string, e error) { - // 记录企业信息变更操作日志 - -// token := auth.FetchUserCredential(ctx) - log.Errorf("\n.\n.\n.\n.\n.") - log.Errorf("[AddActionLog]ctx: %s", ctx) -// log.Errorf("[AddActionLog] token: %s", token) - log.Errorf("[AddActionLog] token.userid: %s", userCred.GetUserId()) - log.Errorf("\n.\n.\n.\n.\n.") - // userid := userCred.GetUserId() - // username := userCred.GetUserName() - // tenantid := userCred.GetTenantId() - token := userCred - // s := auth.GetAdminSession(fetchRegion(req), "") - s := auth.GetSession(userCred, "", "") - log.Errorf("session id: Fzu3qiEYUS9P %s", s) - - log := jsonutils.NewDict() - log.Add(jsonutils.NewString("infos"), "obj_type") - log.Add(jsonutils.NewString("-"), "obj_id") - log.Add(jsonutils.NewString("-"), "obj_name") - log.Add(jsonutils.NewString("更新"), "action") - log.Add(jsonutils.NewString(token.GetUserId()), "user_id") - log.Add(jsonutils.NewString(token.GetUserName()), "user") - log.Add(jsonutils.NewString(token.GetTenantId()), "tenant_id") - log.Add(jsonutils.NewString(token.GetTenantName()), "tenant") - log.Add(jsonutils.NewString(notes), "notes") - - if e != nil { - // 失败日志 - log.Add(jsonutils.JSONFalse, "success") - } else { - // 成功日志 - log.Add(jsonutils.JSONTrue, "success") - } - - _, e = modules.Actions.Create(s, log) - if e != nil { - fmt.Printf("create action log failed %s", e) - } else { - fmt.Println("create action log sucess") - } + uri, err := auth.GetServiceURL("log", options.Options.Region, "", "") + if err != nil { + log.Println("log service not ready", err) + return + } + + uri = fmt.Sprintf("%s/actions", uri) + header := http.Header{} + header.Add("X-Auth-Token", userCred.GetTokenString()) + _, _, err = httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", uri, header, logentry, false) + if err != nil { + log.Println("post log error", err) + return + } } From 58edf9daf4afca6e7c0376f34e95bc58316ebd3d Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Sat, 25 Aug 2018 07:50:31 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E8=99=9A=E6=9C=BA=E5=A4=B1=E8=B4=A5=E6=97=B6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=20actionlog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/db/db_dispatcher.go | 20 ++++++++++---------- pkg/cloudcommon/db/statusstandalone.go | 5 +++++ pkg/compute/tasks/guest_create_task.go | 4 ++++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 89d6cd54dd..fa4ae37536 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -741,7 +741,7 @@ func (dispatcher *DBModelDispatcher) Create(ctx context.Context, query jsonutils return nil, httperrors.NewGeneralError(err) } OpsLog.LogEvent(model, ACT_CREATE, model.GetShortDesc(), userCred) - logclient.AddActionLog(ctx, userCred, logclient.ACT_CREATE, "", model, "") + logclient.AddActionLog(userCred, logclient.ACT_CREATE, "", model, "") dispatcher.modelManager.OnCreateComplete(ctx, []IModel{model}, userCred, query, data) return getItemDetails(dispatcher.modelManager, model, ctx, userCred, query) } @@ -960,13 +960,13 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if err != nil { log.Errorf("validate update condition error: %s", err) - logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, err.Error()) + logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, err.Error()) return nil, httperrors.NewGeneralError(err) } dataDict, ok := data.(*jsonutils.JSONDict) if !ok { - logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, "Invalid data JSONObject") + logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, "Invalid data JSONObject") return nil, httperrors.NewInternalServerError("Invalid data JSONObject") } @@ -974,7 +974,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if len(name) > 0 { err = alterNameValidator(item, name) if err != nil { - logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, err.Error()) + logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, err.Error()) return nil, err } } @@ -983,7 +983,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if err != nil { errMsg := fmt.Sprintf("validate update data error: %s", err) log.Errorf(errMsg) - logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, errMsg) + logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, errMsg) return nil, httperrors.NewGeneralError(err) } item.PreUpdate(ctx, userCred, query, dataDict) @@ -993,7 +993,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre err = filterData.Unmarshal(item) if err != nil { errMsg := fmt.Sprintf("unmarshal fail: %s", err) - logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, errMsg) + logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, errMsg) log.Errorf(errMsg) return httperrors.NewGeneralError(err) } @@ -1008,10 +1008,10 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre diffStr := sqlchemy.UpdateDiffString(diff) if len(diffStr) > 0 { OpsLog.LogEvent(item, ACT_UPDATE, diffStr, userCred) - logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, "", item, diffStr) + logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, diffStr) } } - logclient.AddActionLog(ctx, userCred, logclient.ACT_UPDATE, dataDict.String(), item, "") + logclient.AddActionLog(userCred, logclient.ACT_UPDATE, dataDict.String(), item, "") return getItemDetails(manager, item, ctx, userCred, query) } @@ -1040,11 +1040,11 @@ func DeleteModel(ctx context.Context, userCred mcclient.TokenCredential, item IM if err != nil { msg := fmt.Sprintf("save update error %s", err) log.Errorf(msg) - logclient.AddActionLog(ctx, userCred, logclient.ACT_DELETE, "", item, msg) + logclient.AddActionLog(userCred, logclient.ACT_DELETE, "", item, msg) return httperrors.NewGeneralError(err) } OpsLog.LogEvent(item, ACT_DELETE, item.GetShortDesc(), userCred) - logclient.AddActionLog(ctx, userCred, logclient.ACT_DELETE, "", item, "") + logclient.AddActionLog(userCred, logclient.ACT_DELETE, "", item, "") return nil } diff --git a/pkg/cloudcommon/db/statusstandalone.go b/pkg/cloudcommon/db/statusstandalone.go index cc7ea853a3..588bd88999 100644 --- a/pkg/cloudcommon/db/statusstandalone.go +++ b/pkg/cloudcommon/db/statusstandalone.go @@ -3,9 +3,11 @@ package db import ( "context" "fmt" + "strings" "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/onecloud/pkg/util/logclient" ) type SStatusStandaloneResourceBase struct { @@ -40,6 +42,9 @@ func (model *SStatusStandaloneResourceBase) SetStatus(userCred mcclient.TokenCre notes = fmt.Sprintf("%s: %s", notes, reason) } OpsLog.LogEvent(model, ACT_UPDATE_STATUS, notes, userCred) + if strings.Contains(notes, "fail") { + logclient.AddActionLog(userCred, logclient.ACT_VM_SYNC_STATUS, "", model, notes) + } } return nil } diff --git a/pkg/compute/tasks/guest_create_task.go b/pkg/compute/tasks/guest_create_task.go index a57f49afca..9f104a12ef 100644 --- a/pkg/compute/tasks/guest_create_task.go +++ b/pkg/compute/tasks/guest_create_task.go @@ -11,6 +11,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" ) type GuestCreateTask struct { @@ -49,6 +50,7 @@ func (self *GuestCreateTask) OnDiskPreparedFailed(ctx context.Context, obj db.IS guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DISK_FAILED, "allocation failed") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) + logclient.AddActionLog(self.UserCred, logclient.ACT_ALLOCATE, "", guest, data.String()) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DISK_FAILED, data.String()) } @@ -76,6 +78,7 @@ func (self *GuestCreateTask) OnCdromPreparedFailed(ctx context.Context, obj db.I guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DISK_FAILED, "") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) + logclient.AddActionLog(self.UserCred, logclient.ACT_ALLOCATE, "", guest, data.String()) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DISK_FAILED, fmt.Sprintf("cdrom_failed %s", data)) } @@ -102,6 +105,7 @@ func (self *GuestCreateTask) OnDeployGuestDescCompleteFailed(ctx context.Context guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DEPLOY_FAILED, "deploy_failed") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) + logclient.AddActionLog(self.UserCred, logclient.ACT_ALLOCATE, "", guest, data.String()) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DEPLOY_FAILED, data.String()) } From a77e8f3b67f0f3e21b25663e2883970300c302b9 Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Sat, 25 Aug 2018 07:54:50 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E8=99=9A?= =?UTF-8?q?=E6=9C=BA=E5=88=A0=E9=99=A4=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/tasks/guest_delete_task.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index b86a63d2ec..1e502edce2 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -9,6 +9,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/notifyclient" "yunion.io/x/onecloud/pkg/compute/models" "yunion.io/x/onecloud/pkg/compute/options" + "yunion.io/x/onecloud/pkg/util/logclient" "yunion.io/x/pkg/utils" ) @@ -88,6 +89,7 @@ func (self *GuestDeleteTask) OnGuestDeleteCompleteFailed(ctx context.Context, ob guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DELETE_FAIL, err.String()) db.OpsLog.LogEvent(guest, db.ACT_DELOCATE_FAIL, err, self.UserCred) + logclient.AddActionLog(self.UserCred, logclient.ACT_DELETE, "", guest, err.String()) } func (self *GuestDeleteTask) OnGuestDeleteComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -103,6 +105,7 @@ func (self *GuestDeleteTask) DeleteGuest(ctx context.Context, guest *models.SGue guest.RealDelete(ctx, self.UserCred) guest.RemoveAllMetadata(ctx, self.UserCred) db.OpsLog.LogEvent(guest, db.ACT_DELOCATE, nil, self.UserCred) + logclient.AddActionLog(self.UserCred, logclient.ACT_DELETE, "", guest, "") if !guest.IsSystem && !guest.PendingDeleted { self.NotifyServerDeleted(ctx, guest) } From 0d1a33b495cce61fc79d0ddb248ce6455de3179c Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Sat, 25 Aug 2018 07:59:46 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E9=87=8D?= =?UTF-8?q?=E8=A3=85=E7=B3=BB=E7=BB=9F=E3=80=81=E5=BC=80=E6=9C=BA=E5=85=B3?= =?UTF-8?q?=E6=9C=BA=E3=80=81=E5=90=8C=E6=AD=A5=E7=8A=B6=E6=80=81=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/tasks/guest_rebuild_root_task.go | 16 +++++----- pkg/compute/tasks/guest_start_task.go | 4 +-- pkg/compute/tasks/guest_stop_task.go | 4 +-- pkg/compute/tasks/guest_syncstatus_task.go | 4 +-- pkg/util/logclient/logclient.go | 31 +++++++------------- 5 files changed, 25 insertions(+), 34 deletions(-) diff --git a/pkg/compute/tasks/guest_rebuild_root_task.go b/pkg/compute/tasks/guest_rebuild_root_task.go index 165b8ff213..1bd7c81249 100644 --- a/pkg/compute/tasks/guest_rebuild_root_task.go +++ b/pkg/compute/tasks/guest_rebuild_root_task.go @@ -49,7 +49,7 @@ func (self *GuestRebuildRootTask) StartRebuildRootDisk(ctx context.Context, gues }) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } else { db.OpsLog.LogEvent(gds.Root, db.ACT_UPDATE_STATUS, @@ -66,19 +66,19 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, imginfo, err := models.CachedimageManager.GetImageById(ctx, self.UserCred, imgId, false) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } osprof, err := osprofile.GetOSProfileFromImageProperties(imginfo.Properties, guest.Hypervisor) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } err = guest.SetMetadata(ctx, "__os_profile__", osprof, self.UserCred) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } if guest.OsType != osprof.OSType { @@ -88,7 +88,7 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, }) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) return } } @@ -101,7 +101,7 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, func (self *GuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { db.OpsLog.LogEvent(guest, db.ACT_REBUILD_ROOT_FAIL, data.String(), self.UserCred) guest.SetStatus(self.UserCred, models.VM_REBUILD_ROOT_FAIL, "") - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, data.String()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, data.String()) } func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -111,7 +111,7 @@ func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, gues } else { self.SetStageComplete(ctx, nil) } - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, "") + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, "") } func (self *GuestRebuildRootTask) OnGuestStartComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -143,7 +143,7 @@ func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Conte func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { self.SetStageFailed(ctx, data.String()) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_REBUILD, "", guest, data.String()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, data.String()) } func (self *KVMGuestRebuildRootTask) OnGuestDeployComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_start_task.go b/pkg/compute/tasks/guest_start_task.go index 3965a51d05..d5af7cadb3 100644 --- a/pkg/compute/tasks/guest_start_task.go +++ b/pkg/compute/tasks/guest_start_task.go @@ -59,7 +59,7 @@ func (self *GuestStartTask) OnStartComplete(ctx context.Context, obj db.IStandal db.OpsLog.LogEvent(guest, db.ACT_START, guest.GetShortDesc(), self.UserCred) self.SetStage("on_guest_syncstatus_after_start", nil) guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_START, "", guest, "") + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_START, "", guest, "") // self.taskComplete(ctx, guest) } @@ -76,7 +76,7 @@ func (self *GuestStartTask) OnStartCompleteFailed(ctx context.Context, obj db.IS func (self *GuestStartTask) onStartGuestFailed(ctx context.Context, guest *models.SGuest, err error) { self.SetStageFailed(ctx, err.Error()) self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_START, "", guest, err.Error()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_START, "", guest, err.Error()) } func (self *GuestStartTask) taskComplete(ctx context.Context, guest *models.SGuest) { diff --git a/pkg/compute/tasks/guest_stop_task.go b/pkg/compute/tasks/guest_stop_task.go index aa0119d549..303c48b2e0 100644 --- a/pkg/compute/tasks/guest_stop_task.go +++ b/pkg/compute/tasks/guest_stop_task.go @@ -58,12 +58,12 @@ func (self *GuestStopTask) OnGuestStopTaskComplete(ctx context.Context, obj db.I if guest.Status == models.VM_READY && guest.DisableDelete.IsFalse() && guest.ShutdownBehavior == models.SHUTDOWN_TERMINATE { guest.StartAutoDeleteGuestTask(ctx, self.UserCred, "") } - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_STOP, "", guest, "") + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_STOP, "", guest, "") } func (self *GuestStopTask) OnStopGuestFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_STOP_FAILED, err.Error()) db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, err.Error(), self.UserCred) self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_STOP, "", guest, err.Error()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_STOP, "", guest, err.Error()) } diff --git a/pkg/compute/tasks/guest_syncstatus_task.go b/pkg/compute/tasks/guest_syncstatus_task.go index 7b161e9f27..c315525baf 100644 --- a/pkg/compute/tasks/guest_syncstatus_task.go +++ b/pkg/compute/tasks/guest_syncstatus_task.go @@ -58,11 +58,11 @@ func (self *GuestSyncstatusTask) OnGetStatusSucc(ctx context.Context, guest *mod fmt.Println(" \n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\\n*n* * * * * * * * * * * * * ") fmt.Println("* * * * * * * * * * * * * server obj:", guest) fmt.Println(" \n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\\n*n* * * * * * * * * * * * * ") - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_SYNC_STATUS, "", guest, "") + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_SYNC_STATUS, "", guest, "") } func (self *GuestSyncstatusTask) OnGetStatusFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_UNKNOWN, err.Error()) self.SetStageComplete(ctx, nil) - logclient.AddActionLog(ctx, self.UserCred, logclient.ACT_VM_SYNC_STATUS, "", guest, err.Error()) + logclient.AddActionLog(self.UserCred, logclient.ACT_VM_SYNC_STATUS, "", guest, err.Error()) } diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go index b7b52ec23f..658bc2887f 100644 --- a/pkg/util/logclient/logclient.go +++ b/pkg/util/logclient/logclient.go @@ -1,16 +1,12 @@ package logclient import ( - "context" "fmt" - "log" - "net/http" "yunion.io/x/jsonutils" - "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/auth" - "yunion.io/x/onecloud/pkg/util/httputils" + "yunion.io/x/onecloud/pkg/mcclient/modules" ) const ( @@ -57,7 +53,7 @@ type IObject interface { Keyword() string } -func AddActionLog(ctx context.Context, userCred mcclient.TokenCredential, action, notes string, obj IObject, e string) { +func AddActionLog(userCred mcclient.TokenCredential, action, notes string, obj IObject, e string) { token := userCred logentry := jsonutils.NewDict() @@ -69,8 +65,11 @@ func AddActionLog(ctx context.Context, userCred mcclient.TokenCredential, action logentry.Add(jsonutils.NewString(token.GetUserName()), "user") logentry.Add(jsonutils.NewString(token.GetTenantId()), "tenant_id") logentry.Add(jsonutils.NewString(token.GetTenantName()), "tenant") - // todo: 正式版去掉下面这行。 - notes = "[region2]" + notes + + // TODO delete following line later + notes = "[a2]" + notes + + s := auth.GetSession(userCred, "", "") if len(e) > 0 { // 失败日志 @@ -83,18 +82,10 @@ func AddActionLog(ctx context.Context, userCred mcclient.TokenCredential, action logentry.Add(jsonutils.NewString(notes), "notes") } - uri, err := auth.GetServiceURL("log", options.Options.Region, "", "") + _, err := modules.Actions.Create(s, logentry) if err != nil { - log.Println("log service not ready", err) - return - } - - uri = fmt.Sprintf("%s/actions", uri) - header := http.Header{} - header.Add("X-Auth-Token", userCred.GetTokenString()) - _, _, err = httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", uri, header, logentry, false) - if err != nil { - log.Println("post log error", err) - return + fmt.Printf("create action log failed %s", err) + } else { + fmt.Println("create action log success") } } From eb135f71dc29d31bcdd4d6bbba76e7e9e71e0c64 Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Mon, 27 Aug 2018 18:00:13 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E9=87=8D=E6=9E=84?= =?UTF-8?q?=EF=BC=8C=E4=B8=8EOpsLog.LogEvent=20=E4=BF=9D=E6=8C=81=E4=B8=80?= =?UTF-8?q?=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/db/db_dispatcher.go | 20 +++++++------- pkg/cloudcommon/db/statusstandalone.go | 2 +- pkg/compute/tasks/guest_create_task.go | 6 ++--- pkg/compute/tasks/guest_delete_task.go | 4 +-- pkg/compute/tasks/guest_rebuild_root_task.go | 18 ++++++------- pkg/compute/tasks/guest_start_task.go | 4 +-- pkg/compute/tasks/guest_stop_task.go | 4 +-- pkg/compute/tasks/guest_syncstatus_task.go | 8 ++---- pkg/util/logclient/logclient.go | 28 +++++++++++--------- 9 files changed, 46 insertions(+), 48 deletions(-) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index fa4ae37536..bc1db0d727 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -741,7 +741,7 @@ func (dispatcher *DBModelDispatcher) Create(ctx context.Context, query jsonutils return nil, httperrors.NewGeneralError(err) } OpsLog.LogEvent(model, ACT_CREATE, model.GetShortDesc(), userCred) - logclient.AddActionLog(userCred, logclient.ACT_CREATE, "", model, "") + logclient.AddActionLog(model, logclient.ACT_CREATE, "", userCred) dispatcher.modelManager.OnCreateComplete(ctx, []IModel{model}, userCred, query, data) return getItemDetails(dispatcher.modelManager, model, ctx, userCred, query) } @@ -960,13 +960,13 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if err != nil { log.Errorf("validate update condition error: %s", err) - logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, err.Error()) + logclient.AddActionLog(item, logclient.ACT_UPDATE, err.Error(), userCred) return nil, httperrors.NewGeneralError(err) } dataDict, ok := data.(*jsonutils.JSONDict) if !ok { - logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, "Invalid data JSONObject") + logclient.AddActionLog(item, logclient.ACT_UPDATE, "Invalid data JSONObject", userCred) return nil, httperrors.NewInternalServerError("Invalid data JSONObject") } @@ -974,7 +974,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if len(name) > 0 { err = alterNameValidator(item, name) if err != nil { - logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, err.Error()) + logclient.AddActionLog(item, logclient.ACT_UPDATE, err.Error(), userCred) return nil, err } } @@ -983,7 +983,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if err != nil { errMsg := fmt.Sprintf("validate update data error: %s", err) log.Errorf(errMsg) - logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, errMsg) + logclient.AddActionLog(item, logclient.ACT_UPDATE, errMsg, userCred) return nil, httperrors.NewGeneralError(err) } item.PreUpdate(ctx, userCred, query, dataDict) @@ -993,7 +993,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre err = filterData.Unmarshal(item) if err != nil { errMsg := fmt.Sprintf("unmarshal fail: %s", err) - logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, errMsg) + logclient.AddActionLog(item, logclient.ACT_UPDATE, errMsg, userCred) log.Errorf(errMsg) return httperrors.NewGeneralError(err) } @@ -1008,10 +1008,10 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre diffStr := sqlchemy.UpdateDiffString(diff) if len(diffStr) > 0 { OpsLog.LogEvent(item, ACT_UPDATE, diffStr, userCred) - logclient.AddActionLog(userCred, logclient.ACT_UPDATE, "", item, diffStr) + logclient.AddActionLog(item, logclient.ACT_UPDATE, diffStr, userCred) } } - logclient.AddActionLog(userCred, logclient.ACT_UPDATE, dataDict.String(), item, "") + logclient.AddActionLog(item, logclient.ACT_UPDATE, "", userCred) return getItemDetails(manager, item, ctx, userCred, query) } @@ -1040,11 +1040,11 @@ func DeleteModel(ctx context.Context, userCred mcclient.TokenCredential, item IM if err != nil { msg := fmt.Sprintf("save update error %s", err) log.Errorf(msg) - logclient.AddActionLog(userCred, logclient.ACT_DELETE, "", item, msg) + logclient.AddActionLog(item, logclient.ACT_DELETE, msg, userCred) return httperrors.NewGeneralError(err) } OpsLog.LogEvent(item, ACT_DELETE, item.GetShortDesc(), userCred) - logclient.AddActionLog(userCred, logclient.ACT_DELETE, "", item, "") + logclient.AddActionLog(item, logclient.ACT_DELETE, "", userCred) return nil } diff --git a/pkg/cloudcommon/db/statusstandalone.go b/pkg/cloudcommon/db/statusstandalone.go index 588bd88999..7c683e36f7 100644 --- a/pkg/cloudcommon/db/statusstandalone.go +++ b/pkg/cloudcommon/db/statusstandalone.go @@ -43,7 +43,7 @@ func (model *SStatusStandaloneResourceBase) SetStatus(userCred mcclient.TokenCre } OpsLog.LogEvent(model, ACT_UPDATE_STATUS, notes, userCred) if strings.Contains(notes, "fail") { - logclient.AddActionLog(userCred, logclient.ACT_VM_SYNC_STATUS, "", model, notes) + logclient.AddActionLog(model, logclient.ACT_VM_SYNC_STATUS, notes, userCred) } } return nil diff --git a/pkg/compute/tasks/guest_create_task.go b/pkg/compute/tasks/guest_create_task.go index 9f104a12ef..2f1bc713e0 100644 --- a/pkg/compute/tasks/guest_create_task.go +++ b/pkg/compute/tasks/guest_create_task.go @@ -50,7 +50,7 @@ func (self *GuestCreateTask) OnDiskPreparedFailed(ctx context.Context, obj db.IS guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DISK_FAILED, "allocation failed") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) - logclient.AddActionLog(self.UserCred, logclient.ACT_ALLOCATE, "", guest, data.String()) + logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DISK_FAILED, data.String()) } @@ -78,7 +78,7 @@ func (self *GuestCreateTask) OnCdromPreparedFailed(ctx context.Context, obj db.I guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DISK_FAILED, "") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) - logclient.AddActionLog(self.UserCred, logclient.ACT_ALLOCATE, "", guest, data.String()) + logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DISK_FAILED, fmt.Sprintf("cdrom_failed %s", data)) } @@ -105,7 +105,7 @@ func (self *GuestCreateTask) OnDeployGuestDescCompleteFailed(ctx context.Context guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DEPLOY_FAILED, "deploy_failed") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) - logclient.AddActionLog(self.UserCred, logclient.ACT_ALLOCATE, "", guest, data.String()) + logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DEPLOY_FAILED, data.String()) } diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index 1e502edce2..e663bf990d 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -89,7 +89,7 @@ func (self *GuestDeleteTask) OnGuestDeleteCompleteFailed(ctx context.Context, ob guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DELETE_FAIL, err.String()) db.OpsLog.LogEvent(guest, db.ACT_DELOCATE_FAIL, err, self.UserCred) - logclient.AddActionLog(self.UserCred, logclient.ACT_DELETE, "", guest, err.String()) + logclient.AddActionLog(guest, logclient.ACT_DELETE, err, self.UserCred) } func (self *GuestDeleteTask) OnGuestDeleteComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -105,7 +105,7 @@ func (self *GuestDeleteTask) DeleteGuest(ctx context.Context, guest *models.SGue guest.RealDelete(ctx, self.UserCred) guest.RemoveAllMetadata(ctx, self.UserCred) db.OpsLog.LogEvent(guest, db.ACT_DELOCATE, nil, self.UserCred) - logclient.AddActionLog(self.UserCred, logclient.ACT_DELETE, "", guest, "") + logclient.AddActionLog(guest, logclient.ACT_DELETE, "", self.UserCred) if !guest.IsSystem && !guest.PendingDeleted { self.NotifyServerDeleted(ctx, guest) } diff --git a/pkg/compute/tasks/guest_rebuild_root_task.go b/pkg/compute/tasks/guest_rebuild_root_task.go index 1bd7c81249..8f61dcaf4f 100644 --- a/pkg/compute/tasks/guest_rebuild_root_task.go +++ b/pkg/compute/tasks/guest_rebuild_root_task.go @@ -49,7 +49,7 @@ func (self *GuestRebuildRootTask) StartRebuildRootDisk(ctx context.Context, gues }) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) return } else { db.OpsLog.LogEvent(gds.Root, db.ACT_UPDATE_STATUS, @@ -66,19 +66,19 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, imginfo, err := models.CachedimageManager.GetImageById(ctx, self.UserCred, imgId, false) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) return } osprof, err := osprofile.GetOSProfileFromImageProperties(imginfo.Properties, guest.Hypervisor) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) return } err = guest.SetMetadata(ctx, "__os_profile__", osprof, self.UserCred) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) return } if guest.OsType != osprof.OSType { @@ -88,7 +88,7 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, }) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) return } } @@ -99,9 +99,9 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, } func (self *GuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { - db.OpsLog.LogEvent(guest, db.ACT_REBUILD_ROOT_FAIL, data.String(), self.UserCred) + db.OpsLog.LogEvent(guest, db.ACT_REBUILD_ROOT_FAIL, data, self.UserCred) guest.SetStatus(self.UserCred, models.VM_REBUILD_ROOT_FAIL, "") - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, data.String()) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, data, self.UserCred) } func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -111,7 +111,7 @@ func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, gues } else { self.SetStageComplete(ctx, nil) } - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, "") + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, "", self.UserCred) } func (self *GuestRebuildRootTask) OnGuestStartComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -143,7 +143,7 @@ func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Conte func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { self.SetStageFailed(ctx, data.String()) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_REBUILD, "", guest, data.String()) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, data, self.UserCred) } func (self *KVMGuestRebuildRootTask) OnGuestDeployComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_start_task.go b/pkg/compute/tasks/guest_start_task.go index d5af7cadb3..71147afdac 100644 --- a/pkg/compute/tasks/guest_start_task.go +++ b/pkg/compute/tasks/guest_start_task.go @@ -59,7 +59,7 @@ func (self *GuestStartTask) OnStartComplete(ctx context.Context, obj db.IStandal db.OpsLog.LogEvent(guest, db.ACT_START, guest.GetShortDesc(), self.UserCred) self.SetStage("on_guest_syncstatus_after_start", nil) guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_START, "", guest, "") + logclient.AddActionLog(guest, logclient.ACT_VM_START, "", self.UserCred) // self.taskComplete(ctx, guest) } @@ -76,7 +76,7 @@ func (self *GuestStartTask) OnStartCompleteFailed(ctx context.Context, obj db.IS func (self *GuestStartTask) onStartGuestFailed(ctx context.Context, guest *models.SGuest, err error) { self.SetStageFailed(ctx, err.Error()) self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_START, "", guest, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_START, err, self.UserCred) } func (self *GuestStartTask) taskComplete(ctx context.Context, guest *models.SGuest) { diff --git a/pkg/compute/tasks/guest_stop_task.go b/pkg/compute/tasks/guest_stop_task.go index 303c48b2e0..f50838d64c 100644 --- a/pkg/compute/tasks/guest_stop_task.go +++ b/pkg/compute/tasks/guest_stop_task.go @@ -58,12 +58,12 @@ func (self *GuestStopTask) OnGuestStopTaskComplete(ctx context.Context, obj db.I if guest.Status == models.VM_READY && guest.DisableDelete.IsFalse() && guest.ShutdownBehavior == models.SHUTDOWN_TERMINATE { guest.StartAutoDeleteGuestTask(ctx, self.UserCred, "") } - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_STOP, "", guest, "") + logclient.AddActionLog(guest, logclient.ACT_VM_STOP, "", self.UserCred) } func (self *GuestStopTask) OnStopGuestFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_STOP_FAILED, err.Error()) db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, err.Error(), self.UserCred) self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_STOP, "", guest, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_STOP, err, self.UserCred) } diff --git a/pkg/compute/tasks/guest_syncstatus_task.go b/pkg/compute/tasks/guest_syncstatus_task.go index c315525baf..78dfd85a51 100644 --- a/pkg/compute/tasks/guest_syncstatus_task.go +++ b/pkg/compute/tasks/guest_syncstatus_task.go @@ -2,7 +2,6 @@ package tasks import ( "context" - "fmt" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -55,14 +54,11 @@ func (self *GuestSyncstatusTask) OnGetStatusSucc(ctx context.Context, guest *mod statusData.Add(jsonutils.NewString(statusStr), "status") guest.PerformStatus(ctx, self.UserCred, nil, statusData) self.SetStageComplete(ctx, nil) - fmt.Println(" \n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\\n*n* * * * * * * * * * * * * ") - fmt.Println("* * * * * * * * * * * * * server obj:", guest) - fmt.Println(" \n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\n*\\n*n* * * * * * * * * * * * * ") - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_SYNC_STATUS, "", guest, "") + logclient.AddActionLog(guest, logclient.ACT_VM_SYNC_STATUS, "", self.UserCred) } func (self *GuestSyncstatusTask) OnGetStatusFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_UNKNOWN, err.Error()) self.SetStageComplete(ctx, nil) - logclient.AddActionLog(self.UserCred, logclient.ACT_VM_SYNC_STATUS, "", guest, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_SYNC_STATUS, err, self.UserCred) } diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go index 658bc2887f..aaf551b831 100644 --- a/pkg/util/logclient/logclient.go +++ b/pkg/util/logclient/logclient.go @@ -7,6 +7,7 @@ import ( "yunion.io/x/onecloud/pkg/mcclient" "yunion.io/x/onecloud/pkg/mcclient/auth" "yunion.io/x/onecloud/pkg/mcclient/modules" + "yunion.io/x/pkg/util/stringutils" ) const ( @@ -53,34 +54,35 @@ type IObject interface { Keyword() string } -func AddActionLog(userCred mcclient.TokenCredential, action, notes string, obj IObject, e string) { +func AddActionLog(model IObject, action string, iErr interface{}, userCred mcclient.TokenCredential) { + // (model IModel, action string, notes interface{}, userCred mcclient.TokenCredential + //func AddActionLog(userCred mcclient.TokenCredential, action, notes string, obj IObject, e string) { // originalk token := userCred + notes := stringutils.Interface2String(iErr) + + s := auth.GetSession(userCred, "", "") + logentry := jsonutils.NewDict() - logentry.Add(jsonutils.NewString(obj.GetName()), "obj_name") - logentry.Add(jsonutils.NewString(obj.Keyword()), "obj_type") - logentry.Add(jsonutils.NewString(obj.GetId()), "obj_id") + logentry.Add(jsonutils.NewString(model.GetName()), "obj_name") + logentry.Add(jsonutils.NewString(model.Keyword()), "obj_type") + logentry.Add(jsonutils.NewString(model.GetId()), "obj_id") logentry.Add(jsonutils.NewString(action), "action") logentry.Add(jsonutils.NewString(token.GetUserId()), "user_id") logentry.Add(jsonutils.NewString(token.GetUserName()), "user") logentry.Add(jsonutils.NewString(token.GetTenantId()), "tenant_id") logentry.Add(jsonutils.NewString(token.GetTenantName()), "tenant") - // TODO delete following line later - notes = "[a2]" + notes - - s := auth.GetSession(userCred, "", "") - - if len(e) > 0 { + if len(notes) > 0 { // 失败日志 logentry.Add(jsonutils.JSONFalse, "success") - notes = fmt.Sprintf("%s%s", notes, e) - logentry.Add(jsonutils.NewString(notes), "notes") } else { // 成功日志 logentry.Add(jsonutils.JSONTrue, "success") - logentry.Add(jsonutils.NewString(notes), "notes") } + // TODO delete tag when done. + notes = fmt.Sprintf("[a2]%s", notes) + logentry.Add(jsonutils.NewString(notes), "notes") _, err := modules.Actions.Create(s, logentry) if err != nil { From 3b8562a22c4f5caf06608115602c1daabff8c4f9 Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Wed, 29 Aug 2018 15:43:59 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/db/opslog.go | 2 + pkg/compute/tasks/guest_deploy_task.go | 2 + pkg/util/logclient/logclient.go | 60 +++++++++++++------------- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/pkg/cloudcommon/db/opslog.go b/pkg/cloudcommon/db/opslog.go index 11ad4edf6e..d1fe6d5da9 100644 --- a/pkg/cloudcommon/db/opslog.go +++ b/pkg/cloudcommon/db/opslog.go @@ -10,6 +10,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" "yunion.io/x/onecloud/pkg/mcclient" + "yunion.io/x/onecloud/pkg/util/logclient" "yunion.io/x/pkg/util/stringutils" "yunion.io/x/sqlchemy" ) @@ -302,6 +303,7 @@ func (manager *SOpsLogManager) SyncOwner(m IModel, former *STenant, userCred mcc notes.Add(jsonutils.NewString(former.GetId()), "former_project_id") notes.Add(jsonutils.NewString(former.GetName()), "form_project") manager.LogEvent(m, ACT_CHANGE_OWNER, notes, userCred) + logclient.AddActionLog(m, logclient.ACT_CHANGE_OWNER, nil, userCred) } func (manager *SOpsLogManager) AllowListItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { diff --git a/pkg/compute/tasks/guest_deploy_task.go b/pkg/compute/tasks/guest_deploy_task.go index 47fd39b7c7..5f5dab563d 100644 --- a/pkg/compute/tasks/guest_deploy_task.go +++ b/pkg/compute/tasks/guest_deploy_task.go @@ -9,6 +9,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" ) type GuestDeployTask struct { @@ -56,6 +57,7 @@ func (self *GuestDeployTask) StartDeployGuestOnHost(ctx context.Context, guest * } else { self.OnDeployGuestSucc(guest) } + logclient.AddActionLog(guest, logclient.ACT_VM_DEPLOY, err, self.UserCred) } func (self *GuestDeployTask) OnDeployGuestSucc(guest *models.SGuest) { diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go index aaf551b831..391408305a 100644 --- a/pkg/util/logclient/logclient.go +++ b/pkg/util/logclient/logclient.go @@ -11,41 +11,43 @@ import ( ) const ( - ACT_VM_RESET_PSWD = "重置密码" - ACT_VM_REBUILD = "重装系统" - ACT_VM_START = "开机" - ACT_VM_STOP = "关机" - ACT_VM_PURGE = "清除" - ACT_VM_CHANGE_FLAVOR = "调整配置" - ACT_VM_SYNC_CONF = "同步配置" - ACT_GUEST_ATTACH_ISOLATED_DEVICE = "挂载透传设备" - ACT_GUEST_DETACH_ISOLATED_DEVICE = "卸载透传设备" - ACT_VM_SYNC_STATUS = "同步状态" + ACT_ADDTAG = "添加标签" + ACT_ALLOCATE = "分配" + ACT_BM_CONVERT_HYPER = "转换为宿主机" + ACT_BM_MAINTENANCE = "进入离线状态" + ACT_BM_UNCONVERT_HYPER = "转换为受管物理机" + ACT_BM_UNMAINTENANCE = "退出离线状态" + ACT_CANCEL_DELETE = "恢复" + ACT_CHANGE_OWNER = "更改项目" ACT_CREATE = "创建" ACT_DELETE = "删除" - ACT_UPDATE = "更新" - ACT_RESERVE_IP = "预留IP" - ACT_RELEASE_IP = "释放IP" - ACT_CANCEL_DELETE = "恢复" - ACT_UNCACHED_IMAGE = "清除缓存" - ACT_ENABLE = "启用" ACT_DISABLE = "禁用" - ACT_ONLINE = "上线" - ACT_OFFLINE = "下线" - ACT_PUBLIC = "设为共享" - ACT_PRIVATE = "设为私有" + ACT_ENABLE = "启用" + ACT_GUEST_ATTACH_ISOLATED_DEVICE = "挂载透传设备" + ACT_GUEST_DETACH_ISOLATED_DEVICE = "卸载透传设备" ACT_MERGE = "合并" - ACT_SPLIT = "分割" - ACT_ALLOCATE = "分配" - ACT_BM_MAINTENANCE = "进入离线状态" - ACT_BM_UNMAINTENANCE = "退出离线状态" - ACT_BM_CONVERT_HYPER = "转换为宿主机" - ACT_BM_UNCONVERT_HYPER = "转换为受管物理机" - ACT_ADDTAG = "添加标签" - ACT_RMTAG = "删除标签" + ACT_OFFLINE = "下线" + ACT_ONLINE = "上线" + ACT_PRIVATE = "设为私有" + ACT_PUBLIC = "设为共享" + ACT_RELEASE_IP = "释放IP" + ACT_RESERVE_IP = "预留IP" ACT_RESIZE = "扩容" + ACT_RMTAG = "删除标签" + ACT_SPLIT = "分割" + ACT_UNCACHED_IMAGE = "清除缓存" + ACT_UPDATE = "更新" ACT_VM_ATTACH_DISK = "挂载磁盘" + ACT_VM_CHANGE_FLAVOR = "调整配置" + ACT_VM_DEPLOY = "启用" ACT_VM_DETACH_DISK = "卸载磁盘" + ACT_VM_PURGE = "清除" + ACT_VM_REBUILD = "重装系统" + ACT_VM_RESET_PSWD = "重置密码" + ACT_VM_START = "开机" + ACT_VM_STOP = "关机" + ACT_VM_SYNC_CONF = "同步配置" + ACT_VM_SYNC_STATUS = "同步状态" ) type IObject interface { @@ -55,8 +57,6 @@ type IObject interface { } func AddActionLog(model IObject, action string, iErr interface{}, userCred mcclient.TokenCredential) { - // (model IModel, action string, notes interface{}, userCred mcclient.TokenCredential - //func AddActionLog(userCred mcclient.TokenCredential, action, notes string, obj IObject, e string) { // originalk token := userCred notes := stringutils.Interface2String(iErr) From c81aafb9bce31d1e77d567d0563240ab5e292d23 Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Fri, 31 Aug 2018 09:32:46 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E5=8F=98?= =?UTF-8?q?=E6=9B=B4=E9=85=8D=E7=BD=AE=E5=A2=9E=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/tasks/guest_change_config_task.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/pkg/compute/tasks/guest_change_config_task.go b/pkg/compute/tasks/guest_change_config_task.go index 44ba532ae1..78963011d8 100644 --- a/pkg/compute/tasks/guest_change_config_task.go +++ b/pkg/compute/tasks/guest_change_config_task.go @@ -9,6 +9,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" ) type GuestChangeConfigTask struct { @@ -41,37 +42,44 @@ func (self *GuestChangeConfigTask) OnDisksResizeComplete(ctx context.Context, ob iResizeSet, err := resizeDisks.GetAt(i) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } resizeSet := iResizeSet.(*jsonutils.JSONArray) diskId, err := resizeSet.GetAt(0) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } idStr, err := diskId.GetString() if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } jSize, err := resizeSet.GetAt(1) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } size, err := jSize.Int() if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } iDisk, err := models.DiskManager.FetchById(idStr) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(obj, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } disk := iDisk.(*models.SDisk) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(disk, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } if disk.DiskSize < int(size) { @@ -79,6 +87,7 @@ func (self *GuestChangeConfigTask) OnDisksResizeComplete(ctx context.Context, ob err = self.GetPendingUsage(&pendingUsage) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(disk, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } disk.StartDiskResizeTask(ctx, self.UserCred, size, self.GetTaskId(), &pendingUsage) @@ -112,6 +121,7 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob vcpuCount, err = iVcpuCount.Int() if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } } @@ -119,12 +129,14 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob vmemSize, err = iVmemSize.Int() if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } } err = guest.GetDriver().RequestChangeVmConfig(ctx, guest, self, vcpuCount, vmemSize) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } var addCpu, addMem = 0, 0 @@ -151,12 +163,14 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob }) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } var pendingUsage models.SQuota err = self.GetPendingUsage(&pendingUsage) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } // ownerCred := guest.GetOwnerUserCred() @@ -172,11 +186,13 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob err = models.QuotaManager.CancelPendingUsage(ctx, self.UserCred, guest.ProjectId, &pendingUsage, &cancelUsage) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } err = self.SetPendingUsage(&pendingUsage) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } } @@ -184,6 +200,7 @@ func (self *GuestChangeConfigTask) OnCreateDisksComplete(ctx context.Context, ob err = guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) if err != nil { self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, err, self.UserCred, false) return } } @@ -193,10 +210,12 @@ func (self *GuestChangeConfigTask) OnSyncStatusComplete(ctx context.Context, obj if guest.Status == models.VM_READY && jsonutils.QueryBoolean(self.Params, "auto_start", false) { self.SetStage("on_guest_start_complete", nil) guest.StartGueststartTask(ctx, self.UserCred, nil, self.GetTaskId()) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, "", self.UserCred, true) } else { dt := jsonutils.NewDict() dt.Add(jsonutils.NewString(guest.Id), "id") self.SetStageComplete(ctx, dt) + logclient.AddActionLog(guest, logclient.ACT_VM_CHANGE_FLAVOR, "", self.UserCred, true) } } From adfb5ae36457f327b53738656185f1687c20f460 Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Fri, 31 Aug 2018 09:39:11 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E9=87=8D=E6=9E=84=EF=BC=9B=E9=98=BF=E9=87=8C=E4=BA=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=AF=86=E7=A0=81=E3=80=81=E5=8F=98=E6=9B=B4=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=8A=A0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/cloudcommon/db/db_dispatcher.go | 21 ++++++++++---------- pkg/cloudcommon/db/opslog.go | 2 +- pkg/cloudcommon/db/statusstandalone.go | 2 +- pkg/compute/guestdrivers/aliyun.go | 4 +--- pkg/compute/tasks/guest_create_task.go | 6 +++--- pkg/compute/tasks/guest_delete_task.go | 5 ++--- pkg/compute/tasks/guest_deploy_task.go | 18 ++++++++++++++++- pkg/compute/tasks/guest_rebuild_root_task.go | 17 ++++++++-------- pkg/compute/tasks/guest_start_task.go | 4 ++-- pkg/compute/tasks/guest_stop_task.go | 4 ++-- pkg/compute/tasks/guest_syncstatus_task.go | 4 ++-- pkg/util/logclient/logclient.go | 9 +++++---- 12 files changed, 56 insertions(+), 40 deletions(-) diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 6b990ef325..90b4999a51 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -769,7 +769,7 @@ func (dispatcher *DBModelDispatcher) Create(ctx context.Context, query jsonutils return nil, httperrors.NewGeneralError(err) } OpsLog.LogEvent(model, ACT_CREATE, model.GetShortDesc(), userCred) - logclient.AddActionLog(model, logclient.ACT_CREATE, "", userCred) + logclient.AddActionLog(model, logclient.ACT_CREATE, "", userCred, true) dispatcher.modelManager.OnCreateComplete(ctx, []IModel{model}, userCred, query, data) return getItemDetails(dispatcher.modelManager, model, ctx, userCred, query) } @@ -988,13 +988,13 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if err != nil { log.Errorf("validate update condition error: %s", err) - logclient.AddActionLog(item, logclient.ACT_UPDATE, err.Error(), userCred) + logclient.AddActionLog(item, logclient.ACT_UPDATE, err.Error(), userCred, false) return nil, httperrors.NewGeneralError(err) } dataDict, ok := data.(*jsonutils.JSONDict) if !ok { - logclient.AddActionLog(item, logclient.ACT_UPDATE, "Invalid data JSONObject", userCred) + logclient.AddActionLog(item, logclient.ACT_UPDATE, "Invalid data JSONObject", userCred, false) return nil, httperrors.NewInternalServerError("Invalid data JSONObject") } @@ -1002,7 +1002,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if len(name) > 0 { err = alterNameValidator(item, name) if err != nil { - logclient.AddActionLog(item, logclient.ACT_UPDATE, err.Error(), userCred) + logclient.AddActionLog(item, logclient.ACT_UPDATE, err.Error(), userCred, false) return nil, err } } @@ -1011,7 +1011,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre if err != nil { errMsg := fmt.Sprintf("validate update data error: %s", err) log.Errorf(errMsg) - logclient.AddActionLog(item, logclient.ACT_UPDATE, errMsg, userCred) + logclient.AddActionLog(item, logclient.ACT_UPDATE, errMsg, userCred, false) return nil, httperrors.NewGeneralError(err) } item.PreUpdate(ctx, userCred, query, dataDict) @@ -1020,7 +1020,7 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre err = filterData.Unmarshal(item) if err != nil { errMsg := fmt.Sprintf("unmarshal fail: %s", err) - logclient.AddActionLog(item, logclient.ACT_UPDATE, errMsg, userCred) + logclient.AddActionLog(item, logclient.ACT_UPDATE, errMsg, userCred, false) log.Errorf(errMsg) return httperrors.NewGeneralError(err) } @@ -1035,10 +1035,11 @@ func updateItem(manager IModelManager, item IModel, ctx context.Context, userCre diffStr := sqlchemy.UpdateDiffString(diff) if len(diffStr) > 0 { OpsLog.LogEvent(item, ACT_UPDATE, diffStr, userCred) - logclient.AddActionLog(item, logclient.ACT_UPDATE, diffStr, userCred) + logclient.AddActionLog(item, logclient.ACT_UPDATE, diffStr, userCred, true) } + } else { + logclient.AddActionLog(item, logclient.ACT_UPDATE, "", userCred, true) } - logclient.AddActionLog(item, logclient.ACT_UPDATE, "", userCred) return getItemDetails(manager, item, ctx, userCred, query) } @@ -1067,11 +1068,11 @@ func DeleteModel(ctx context.Context, userCred mcclient.TokenCredential, item IM if err != nil { msg := fmt.Sprintf("save update error %s", err) log.Errorf(msg) - logclient.AddActionLog(item, logclient.ACT_DELETE, msg, userCred) + logclient.AddActionLog(item, logclient.ACT_DELETE, msg, userCred, false) return httperrors.NewGeneralError(err) } OpsLog.LogEvent(item, ACT_DELETE, item.GetShortDesc(), userCred) - logclient.AddActionLog(item, logclient.ACT_DELETE, "", userCred) + logclient.AddActionLog(item, logclient.ACT_DELETE, item.GetShortDesc(), userCred, true) return nil } diff --git a/pkg/cloudcommon/db/opslog.go b/pkg/cloudcommon/db/opslog.go index d1fe6d5da9..1a9d76986c 100644 --- a/pkg/cloudcommon/db/opslog.go +++ b/pkg/cloudcommon/db/opslog.go @@ -303,7 +303,7 @@ func (manager *SOpsLogManager) SyncOwner(m IModel, former *STenant, userCred mcc notes.Add(jsonutils.NewString(former.GetId()), "former_project_id") notes.Add(jsonutils.NewString(former.GetName()), "form_project") manager.LogEvent(m, ACT_CHANGE_OWNER, notes, userCred) - logclient.AddActionLog(m, logclient.ACT_CHANGE_OWNER, nil, userCred) + logclient.AddActionLog(m, logclient.ACT_CHANGE_OWNER, nil, userCred, true) } func (manager *SOpsLogManager) AllowListItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { diff --git a/pkg/cloudcommon/db/statusstandalone.go b/pkg/cloudcommon/db/statusstandalone.go index 7c683e36f7..2fe6b2256b 100644 --- a/pkg/cloudcommon/db/statusstandalone.go +++ b/pkg/cloudcommon/db/statusstandalone.go @@ -43,7 +43,7 @@ func (model *SStatusStandaloneResourceBase) SetStatus(userCred mcclient.TokenCre } OpsLog.LogEvent(model, ACT_UPDATE_STATUS, notes, userCred) if strings.Contains(notes, "fail") { - logclient.AddActionLog(model, logclient.ACT_VM_SYNC_STATUS, notes, userCred) + logclient.AddActionLog(model, logclient.ACT_VM_SYNC_STATUS, notes, userCred, false) } } return nil diff --git a/pkg/compute/guestdrivers/aliyun.go b/pkg/compute/guestdrivers/aliyun.go index f149f322ec..bedd718860 100644 --- a/pkg/compute/guestdrivers/aliyun.go +++ b/pkg/compute/guestdrivers/aliyun.go @@ -112,7 +112,6 @@ func (self *SAliyunGuestDriver) GetJsonDescAtHost(ctx context.Context, guest *mo config.DataDisks[i-1] = disk.DiskSize / 1024 // MB => GB } } - return jsonutils.Marshal(&config) } @@ -250,10 +249,9 @@ func (self *SAliyunGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gu } publicKey := "" - if k, e := config.GetString("public_key"); e != nil { + if k, e := config.GetString("public_key"); e == nil { publicKey = k } - taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { encpasswd, err := utils.EncryptAESBase64(guest.Id, password) if err != nil { diff --git a/pkg/compute/tasks/guest_create_task.go b/pkg/compute/tasks/guest_create_task.go index 2f1bc713e0..0906f65072 100644 --- a/pkg/compute/tasks/guest_create_task.go +++ b/pkg/compute/tasks/guest_create_task.go @@ -50,7 +50,7 @@ func (self *GuestCreateTask) OnDiskPreparedFailed(ctx context.Context, obj db.IS guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DISK_FAILED, "allocation failed") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) - logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred, false) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DISK_FAILED, data.String()) } @@ -78,7 +78,7 @@ func (self *GuestCreateTask) OnCdromPreparedFailed(ctx context.Context, obj db.I guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DISK_FAILED, "") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) - logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred, false) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DISK_FAILED, fmt.Sprintf("cdrom_failed %s", data)) } @@ -105,7 +105,7 @@ func (self *GuestCreateTask) OnDeployGuestDescCompleteFailed(ctx context.Context guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DEPLOY_FAILED, "deploy_failed") db.OpsLog.LogEvent(guest, db.ACT_ALLOCATE_FAIL, data, self.UserCred) - logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_ALLOCATE, data, self.UserCred, false) notifyclient.NotifySystemError(guest.Id, guest.Name, models.VM_DEPLOY_FAILED, data.String()) } diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index 548388eaac..8d9a2ce11a 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -5,7 +5,6 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" - "yunion.io/x/pkg/utils" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" @@ -95,7 +94,7 @@ func (self *GuestDeleteTask) OnGuestDeleteCompleteFailed(ctx context.Context, ob guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, models.VM_DELETE_FAIL, err.String()) db.OpsLog.LogEvent(guest, db.ACT_DELOCATE_FAIL, err, self.UserCred) - logclient.AddActionLog(guest, logclient.ACT_DELETE, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_DELETE, err, self.UserCred, false) } func (self *GuestDeleteTask) OnGuestDeleteComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -111,7 +110,7 @@ func (self *GuestDeleteTask) DeleteGuest(ctx context.Context, guest *models.SGue guest.RealDelete(ctx, self.UserCred) guest.RemoveAllMetadata(ctx, self.UserCred) db.OpsLog.LogEvent(guest, db.ACT_DELOCATE, nil, self.UserCred) - logclient.AddActionLog(guest, logclient.ACT_DELETE, "", self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_DELETE, nil, self.UserCred, true) if !guest.IsSystem && !guest.PendingDeleted { self.NotifyServerDeleted(ctx, guest) } diff --git a/pkg/compute/tasks/guest_deploy_task.go b/pkg/compute/tasks/guest_deploy_task.go index 2b9c98f190..bd40cf4c3e 100644 --- a/pkg/compute/tasks/guest_deploy_task.go +++ b/pkg/compute/tasks/guest_deploy_task.go @@ -57,12 +57,12 @@ func (self *GuestDeployTask) StartDeployGuestOnHost(ctx context.Context, guest * } else { guest.SetStatus(self.UserCred, models.VM_DEPLOYING, "") } - logclient.AddActionLog(guest, logclient.ACT_VM_DEPLOY, err, self.UserCred) } func (self *GuestDeployTask) OnDeployGuestFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_DEPLOY_FAILED, err.Error()) self.SetStageFailed(ctx, err.Error()) + logclient.AddActionLog(guest, logclient.ACT_VM_DEPLOY, err, self.UserCred, false) } func (self *GuestDeployTask) OnDeployGuestComplete(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { @@ -70,6 +70,22 @@ func (self *GuestDeployTask) OnDeployGuestComplete(ctx context.Context, obj db.I guest := obj.(*models.SGuest) guest.GetDriver().OnGuestDeployTaskDataReceived(ctx, guest, self, data) guest.GetDriver().OnGuestDeployTaskComplete(ctx, guest, self) + action, _ := self.Params.GetString("deploy_action") + keypair, _ := self.Params.GetString("keypair") + log.Debugf("KeyPair:", keypair, "lenof key", len(keypair)) + reset_password := jsonutils.QueryBoolean(self.Params, "reset_password", false) + + if action == "deploy" && reset_password { + keypair, _ := self.Params.GetString("keypair") + if len(keypair) > 0 { + logclient.AddActionLog(guest, logclient.ACT_VM_BIND_KEYPAIR, self.Params, self.UserCred, true) + } else { + logclient.AddActionLog(guest, logclient.ACT_VM_RESET_PSWD, self.Params, self.UserCred, true) + } + } else { + logclient.AddActionLog(guest, "misc部署", self.Params, self.UserCred, true) + } + } func (self *GuestDeployTask) OnDeployGuestCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/compute/tasks/guest_rebuild_root_task.go b/pkg/compute/tasks/guest_rebuild_root_task.go index 8f61dcaf4f..a2a7e5c6fd 100644 --- a/pkg/compute/tasks/guest_rebuild_root_task.go +++ b/pkg/compute/tasks/guest_rebuild_root_task.go @@ -49,7 +49,7 @@ func (self *GuestRebuildRootTask) StartRebuildRootDisk(ctx context.Context, gues }) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred, false) return } else { db.OpsLog.LogEvent(gds.Root, db.ACT_UPDATE_STATUS, @@ -66,19 +66,19 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, imginfo, err := models.CachedimageManager.GetImageById(ctx, self.UserCred, imgId, false) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred, false) return } osprof, err := osprofile.GetOSProfileFromImageProperties(imginfo.Properties, guest.Hypervisor) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred, false) return } err = guest.SetMetadata(ctx, "__os_profile__", osprof, self.UserCred) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred, false) return } if guest.OsType != osprof.OSType { @@ -88,7 +88,7 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, }) if err != nil { self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, err, self.UserCred, false) return } } @@ -101,7 +101,7 @@ func (self *GuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Context, func (self *GuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { db.OpsLog.LogEvent(guest, db.ACT_REBUILD_ROOT_FAIL, data, self.UserCred) guest.SetStatus(self.UserCred, models.VM_REBUILD_ROOT_FAIL, "") - logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, data, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, data, self.UserCred, false) } func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -111,7 +111,7 @@ func (self *GuestRebuildRootTask) OnSyncStatusComplete(ctx context.Context, gues } else { self.SetStageComplete(ctx, nil) } - logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, "", self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, "", self.UserCred, true) } func (self *GuestRebuildRootTask) OnGuestStartComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { @@ -143,9 +143,10 @@ func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskComplete(ctx context.Conte func (self *KVMGuestRebuildRootTask) OnRebuildRootDiskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { self.SetStageFailed(ctx, data.String()) - logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, data, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, data, self.UserCred, false) } func (self *KVMGuestRebuildRootTask) OnGuestDeployComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { self.SetStageComplete(ctx, nil) + logclient.AddActionLog(guest, logclient.ACT_VM_REBUILD, nil, self.UserCred, true) } diff --git a/pkg/compute/tasks/guest_start_task.go b/pkg/compute/tasks/guest_start_task.go index 980af93c9b..99dae67cf3 100644 --- a/pkg/compute/tasks/guest_start_task.go +++ b/pkg/compute/tasks/guest_start_task.go @@ -59,7 +59,7 @@ func (self *GuestStartTask) OnStartComplete(ctx context.Context, obj db.IStandal db.OpsLog.LogEvent(guest, db.ACT_START, guest.GetShortDesc(), self.UserCred) self.SetStage("on_guest_syncstatus_after_start", nil) guest.StartSyncstatus(ctx, self.UserCred, self.GetTaskId()) - logclient.AddActionLog(guest, logclient.ACT_VM_START, "", self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_START, "", self.UserCred, true) // self.taskComplete(ctx, guest) } @@ -77,7 +77,7 @@ func (self *GuestStartTask) onStartGuestFailed(ctx context.Context, guest *model guest.SetStatus(self.UserCred, models.VM_START_FAILED, err.Error()) self.SetStageFailed(ctx, err.Error()) self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString(err.Error())) - logclient.AddActionLog(guest, logclient.ACT_VM_START, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_START, err, self.UserCred, false) } func (self *GuestStartTask) taskComplete(ctx context.Context, guest *models.SGuest) { diff --git a/pkg/compute/tasks/guest_stop_task.go b/pkg/compute/tasks/guest_stop_task.go index ebdf37d936..1368f24082 100644 --- a/pkg/compute/tasks/guest_stop_task.go +++ b/pkg/compute/tasks/guest_stop_task.go @@ -58,12 +58,12 @@ func (self *GuestStopTask) OnGuestStopTaskComplete(ctx context.Context, obj db.I if guest.Status == models.VM_READY && guest.DisableDelete.IsFalse() && guest.ShutdownBehavior == models.SHUTDOWN_TERMINATE { guest.StartAutoDeleteGuestTask(ctx, self.UserCred, "") } - logclient.AddActionLog(guest, logclient.ACT_VM_STOP, "", self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_STOP, "", self.UserCred, true) } func (self *GuestStopTask) OnStopGuestFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_STOP_FAILED, err.Error()) db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, err.Error(), self.UserCred) self.SetStageFailed(ctx, err.Error()) - logclient.AddActionLog(guest, logclient.ACT_VM_STOP, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_STOP, err, self.UserCred, false) } diff --git a/pkg/compute/tasks/guest_syncstatus_task.go b/pkg/compute/tasks/guest_syncstatus_task.go index 78dfd85a51..18849cc4e0 100644 --- a/pkg/compute/tasks/guest_syncstatus_task.go +++ b/pkg/compute/tasks/guest_syncstatus_task.go @@ -54,11 +54,11 @@ func (self *GuestSyncstatusTask) OnGetStatusSucc(ctx context.Context, guest *mod statusData.Add(jsonutils.NewString(statusStr), "status") guest.PerformStatus(ctx, self.UserCred, nil, statusData) self.SetStageComplete(ctx, nil) - logclient.AddActionLog(guest, logclient.ACT_VM_SYNC_STATUS, "", self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_SYNC_STATUS, "", self.UserCred, true) } func (self *GuestSyncstatusTask) OnGetStatusFail(ctx context.Context, guest *models.SGuest, err error) { guest.SetStatus(self.UserCred, models.VM_UNKNOWN, err.Error()) self.SetStageComplete(ctx, nil) - logclient.AddActionLog(guest, logclient.ACT_VM_SYNC_STATUS, err, self.UserCred) + logclient.AddActionLog(guest, logclient.ACT_VM_SYNC_STATUS, err, self.UserCred, false) } diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go index 391408305a..6c873896ce 100644 --- a/pkg/util/logclient/logclient.go +++ b/pkg/util/logclient/logclient.go @@ -39,11 +39,12 @@ const ( ACT_UPDATE = "更新" ACT_VM_ATTACH_DISK = "挂载磁盘" ACT_VM_CHANGE_FLAVOR = "调整配置" - ACT_VM_DEPLOY = "启用" + ACT_VM_DEPLOY = "部署" ACT_VM_DETACH_DISK = "卸载磁盘" ACT_VM_PURGE = "清除" ACT_VM_REBUILD = "重装系统" ACT_VM_RESET_PSWD = "重置密码" + ACT_VM_BIND_KEYPAIR = "绑定密钥" ACT_VM_START = "开机" ACT_VM_STOP = "关机" ACT_VM_SYNC_CONF = "同步配置" @@ -56,10 +57,10 @@ type IObject interface { Keyword() string } -func AddActionLog(model IObject, action string, iErr interface{}, userCred mcclient.TokenCredential) { +func AddActionLog(model IObject, action string, iNotes interface{}, userCred mcclient.TokenCredential, success bool) { token := userCred - notes := stringutils.Interface2String(iErr) + notes := stringutils.Interface2String(iNotes) s := auth.GetSession(userCred, "", "") @@ -73,7 +74,7 @@ func AddActionLog(model IObject, action string, iErr interface{}, userCred mccli logentry.Add(jsonutils.NewString(token.GetTenantId()), "tenant_id") logentry.Add(jsonutils.NewString(token.GetTenantName()), "tenant") - if len(notes) > 0 { + if !success { // 失败日志 logentry.Add(jsonutils.JSONFalse, "success") } else { From 4e070f5c9124a952d722d1207d38729be2c93b6e Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Fri, 31 Aug 2018 09:40:51 +0800 Subject: [PATCH 10/12] rm log --- pkg/compute/tasks/guest_deploy_task.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/compute/tasks/guest_deploy_task.go b/pkg/compute/tasks/guest_deploy_task.go index bd40cf4c3e..bea1290b3b 100644 --- a/pkg/compute/tasks/guest_deploy_task.go +++ b/pkg/compute/tasks/guest_deploy_task.go @@ -72,7 +72,6 @@ func (self *GuestDeployTask) OnDeployGuestComplete(ctx context.Context, obj db.I guest.GetDriver().OnGuestDeployTaskComplete(ctx, guest, self) action, _ := self.Params.GetString("deploy_action") keypair, _ := self.Params.GetString("keypair") - log.Debugf("KeyPair:", keypair, "lenof key", len(keypair)) reset_password := jsonutils.QueryBoolean(self.Params, "reset_password", false) if action == "deploy" && reset_password { From 2653a0645a3489e37cceb2c0c5749d28955182ad Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Fri, 31 Aug 2018 10:02:56 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E8=A7=A3?= =?UTF-8?q?=E7=BB=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/tasks/guest_deploy_task.go | 25 +++++++++++++++++-------- pkg/util/logclient/logclient.go | 1 + 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/pkg/compute/tasks/guest_deploy_task.go b/pkg/compute/tasks/guest_deploy_task.go index bea1290b3b..b2156a763a 100644 --- a/pkg/compute/tasks/guest_deploy_task.go +++ b/pkg/compute/tasks/guest_deploy_task.go @@ -73,18 +73,27 @@ func (self *GuestDeployTask) OnDeployGuestComplete(ctx context.Context, obj db.I action, _ := self.Params.GetString("deploy_action") keypair, _ := self.Params.GetString("keypair") reset_password := jsonutils.QueryBoolean(self.Params, "reset_password", false) + unbind_kp := jsonutils.QueryBoolean(self.Params, "__delete_keypair__", false) + _log := false + if action == "deploy" { + if len(keypair) >= 32 { + if unbind_kp { + logclient.AddActionLog(guest, logclient.ACT_VM_UNBIND_KEYPAIR, nil, self.UserCred, true) + _log = true + } else { + logclient.AddActionLog(guest, logclient.ACT_VM_BIND_KEYPAIR, nil, self.UserCred, true) + _log = true + } - if action == "deploy" && reset_password { - keypair, _ := self.Params.GetString("keypair") - if len(keypair) > 0 { - logclient.AddActionLog(guest, logclient.ACT_VM_BIND_KEYPAIR, self.Params, self.UserCred, true) - } else { - logclient.AddActionLog(guest, logclient.ACT_VM_RESET_PSWD, self.Params, self.UserCred, true) + } else if reset_password { + logclient.AddActionLog(guest, logclient.ACT_VM_RESET_PSWD, "", self.UserCred, true) + _log = true } - } else { + } + if !_log { + // 如果 deploy 有其他事件,统一记在这里。 logclient.AddActionLog(guest, "misc部署", self.Params, self.UserCred, true) } - } func (self *GuestDeployTask) OnDeployGuestCompleteFailed(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go index 6c873896ce..6113cecf86 100644 --- a/pkg/util/logclient/logclient.go +++ b/pkg/util/logclient/logclient.go @@ -45,6 +45,7 @@ const ( ACT_VM_REBUILD = "重装系统" ACT_VM_RESET_PSWD = "重置密码" ACT_VM_BIND_KEYPAIR = "绑定密钥" + ACT_VM_UNBIND_KEYPAIR = "解绑密钥" ACT_VM_START = "开机" ACT_VM_STOP = "关机" ACT_VM_SYNC_CONF = "同步配置" From 4249e2486a04bd080218b59fc12ffe1f416ad6fa Mon Sep 17 00:00:00 2001 From: Zhang Dongliang Date: Fri, 31 Aug 2018 18:00:07 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8=E5=90=8C=E6=AD=A5=E3=80=81=E5=85=A8=E9=87=8F?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tasks/cloud_provider_sync_info_task.go | 84 ++++++++++++++----- pkg/util/logclient/logclient.go | 6 +- 2 files changed, 69 insertions(+), 21 deletions(-) diff --git a/pkg/compute/tasks/cloud_provider_sync_info_task.go b/pkg/compute/tasks/cloud_provider_sync_info_task.go index 997f0792f3..51700d543f 100644 --- a/pkg/compute/tasks/cloud_provider_sync_info_task.go +++ b/pkg/compute/tasks/cloud_provider_sync_info_task.go @@ -10,6 +10,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/util/logclient" "yunion.io/x/pkg/utils" ) @@ -21,6 +22,25 @@ func init() { taskman.RegisterTask(CloudProviderSyncInfoTask{}) } +func getAction(params *jsonutils.JSONDict) string { + fullSync := jsonutils.QueryBoolean(params, "full_sync", false) + if !fullSync { + syncRangeJson, _ := params.Get("sync_range") + if syncRangeJson != nil { + fullSync = jsonutils.QueryBoolean(syncRangeJson, "full_sync", false) + } + } + + action := "" + + if fullSync { + action = logclient.ACT_CLOUD_FULLSYNC + } else { + action = logclient.ACT_CLOUD_SYNC + } + return action +} + func taskFail(ctx context.Context, task *CloudProviderSyncInfoTask, provider *models.SCloudprovider, reason string) { provider.SetStatus(task.UserCred, models.CLOUD_PROVIDER_DISCONNECTED, reason) task.SetStageFailed(ctx, reason) @@ -31,7 +51,8 @@ func (self *CloudProviderSyncInfoTask) OnInit(ctx context.Context, obj db.IStand provider.MarkStartSync(self.UserCred) // do sync - log.Infof("Start sync cloud provider status ...") + notes := fmt.Sprintf("Start sync cloud provider status ...") + log.Infof(notes) driver, err := provider.GetDriver() if err != nil { reason := fmt.Sprintf("Invalid cloud provider %s", err) @@ -60,16 +81,18 @@ func (self *CloudProviderSyncInfoTask) OnInit(ctx context.Context, obj db.IStand provider.SetStatus(self.UserCred, models.CLOUD_PROVIDER_CONNECTED, "") self.SetStageComplete(ctx, nil) + logclient.AddActionLog(provider, getAction(self.Params), body, self.UserCred, true) } func logSyncFailed(provider *models.SCloudprovider, task taskman.ITask, reason string) { db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, reason, task.GetUserCred()) + logclient.AddActionLog(provider, getAction(task.GetParams()), reason, task.GetUserCred(), false) } func syncCloudProviderInfo(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, driver cloudprovider.ICloudProvider, syncRange *models.SSyncRange) { - log.Infof("Start sync host info ...") + notes := fmt.Sprintf("Start sync host info ...") + log.Infof(notes) db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_START, "", task.UserCred) - regions := driver.GetIRegions() localRegions, remoteRegions, result := models.CloudregionManager.SyncRegions(ctx, task.UserCred, provider.Provider, regions) msg := result.Result() @@ -80,6 +103,7 @@ func syncCloudProviderInfo(ctx context.Context, provider *models.SCloudprovider, } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) + logclient.AddActionLog(provider, getAction(task.Params), "", task.UserCred, true) for i := 0; i < len(localRegions); i += 1 { if len(syncRange.Region) > 0 && !utils.IsInStringArray(localRegions[i].Id, syncRange.Region) { continue @@ -112,12 +136,14 @@ func syncRegionZones(ctx context.Context, provider *models.SCloudprovider, task } localZones, remoteZones, result := models.ZoneManager.SyncZones(ctx, task.UserCred, localRegion, zones) msg := result.Result() - log.Infof("SyncZones for region %s result: %s", localRegion.Name, msg) + notes := fmt.Sprintf("SyncZones for region %s result: %s", localRegion.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return nil, nil } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) + logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true) return localZones, remoteZones } @@ -132,13 +158,14 @@ func syncRegionVPCs(ctx context.Context, provider *models.SCloudprovider, task * localVpcs, remoteVpcs, result := models.VpcManager.SyncVPCs(ctx, task.UserCred, provider, localRegion, vpcs) msg := result.Result() - log.Infof("SyncVPCs for region %s result: %s", localRegion.Name, msg) + notes := fmt.Sprintf("SyncVPCs for region %s result: %s", localRegion.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) - + logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true) for j := 0; j < len(localVpcs); j += 1 { syncVpcWires(ctx, provider, task, &localVpcs[j], remoteVpcs[j]) syncVpcSecGroup(ctx, provider, task, &localVpcs[j], remoteVpcs[j]) @@ -154,7 +181,8 @@ func syncVpcSecGroup(ctx context.Context, provider *models.SCloudprovider, task } else { _, _, result := models.SecurityGroupManager.SyncSecgroups(ctx, task.UserCred, secgroups) msg := result.Result() - log.Infof("SyncSecurityGroup for VPC %s result: %s", localVpc.Name, msg) + notes := fmt.Sprintf("SyncSecurityGroup for VPC %s result: %s", localVpc.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return @@ -172,12 +200,14 @@ func syncVpcWires(ctx context.Context, provider *models.SCloudprovider, task tas } localWires, remoteWires, result := models.WireManager.SyncWires(ctx, task.GetUserCred(), localVpc, wires) msg := result.Result() - log.Infof("SyncWires for VPC %s result: %s", localVpc.Name, msg) + notes := fmt.Sprintf("SyncWires for VPC %s result: %s", localVpc.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.GetUserCred()) + logclient.AddActionLog(provider, getAction(task.GetParams()), notes, task.GetUserCred(), true) for i := 0; i < len(localWires); i += 1 { syncWireNetworks(ctx, provider, task, &localWires[i], remoteWires[i]) } @@ -193,12 +223,14 @@ func syncWireNetworks(ctx context.Context, provider *models.SCloudprovider, task } _, _, result := models.NetworkManager.SyncNetworks(ctx, task.GetUserCred(), localWire, nets) msg := result.Result() - log.Infof("SyncNetworks for wire %s result: %s", localWire.Name, msg) + notes := fmt.Sprintf("SyncNetworks for wire %s result: %s", localWire.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.GetUserCred()) + logclient.AddActionLog(provider, getAction(task.GetParams()), notes, task.GetUserCred(), true) } func syncZoneStorages(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, localZone *models.SZone, remoteZone cloudprovider.ICloudZone) { @@ -211,12 +243,14 @@ func syncZoneStorages(ctx context.Context, provider *models.SCloudprovider, task } localStorages, remoteStorages, result := models.StorageManager.SyncStorages(ctx, task.UserCred, provider, localZone, storages) msg := result.Result() - log.Infof("SyncZones for region %s result: %s", localZone.Name, msg) + notes := fmt.Sprintf("SyncZones for region %s result: %s", localZone.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) + logclient.AddActionLog(provider, getAction(task.GetParams()), notes, task.GetUserCred(), true) for i := 0; i < len(localStorages); i += 1 { syncStorageCaches(ctx, provider, task, &localStorages[i], remoteStorages[i]) @@ -251,12 +285,14 @@ func syncStorageDisks(ctx context.Context, provider *models.SCloudprovider, task } _, _, result := models.DiskManager.SyncDisks(ctx, task.UserCred, localStorage, disks) msg := result.Result() - log.Infof("SyncDisks for storage %s result: %s", localStorage.Name, msg) + notes := fmt.Sprintf("SyncDisks for storage %s result: %s", localStorage.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) + logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true) } func syncZoneHosts(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, localZone *models.SZone, remoteZone cloudprovider.ICloudZone, syncRange *models.SSyncRange) { @@ -269,13 +305,14 @@ func syncZoneHosts(ctx context.Context, provider *models.SCloudprovider, task *C } localHosts, remoteHosts, result := models.HostManager.SyncHosts(ctx, task.UserCred, provider, localZone, hosts) msg := result.Result() - log.Infof("SyncHosts for zone %s result: %s", localZone.Name, msg) + notes := fmt.Sprintf("SyncHosts for zone %s result: %s", localZone.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) - + logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true) for i := 0; i < len(localHosts); i += 1 { if len(syncRange.Host) > 0 && !utils.IsInStringArray(localHosts[i].Id, syncRange.Host) { continue @@ -296,12 +333,14 @@ func syncHostStorages(ctx context.Context, provider *models.SCloudprovider, task } result := localHost.SyncHostStorages(ctx, task.UserCred, storages) msg := result.Result() - log.Infof("SyncHostStorages for host %s result: %s", localHost.Name, msg) + notes := fmt.Sprintf("SyncHostStorages for host %s result: %s", localHost.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) + logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true) } func syncHostWires(ctx context.Context, provider *models.SCloudprovider, task taskman.ITask, localHost *models.SHost, remoteHost cloudprovider.ICloudHost) { @@ -314,12 +353,14 @@ func syncHostWires(ctx context.Context, provider *models.SCloudprovider, task ta } result := localHost.SyncHostWires(ctx, task.GetUserCred(), wires) msg := result.Result() - log.Infof("SyncHostWires for host %s result: %s", localHost.Name, msg) + notes := fmt.Sprintf("SyncHostWires for host %s result: %s", localHost.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.GetUserCred()) + logclient.AddActionLog(provider, getAction(task.GetParams()), notes, task.GetUserCred(), true) } func syncHostVMs(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, localHost *models.SHost, remoteHost cloudprovider.ICloudHost) { @@ -332,13 +373,14 @@ func syncHostVMs(ctx context.Context, provider *models.SCloudprovider, task *Clo } localVMs, remoteVMs, result := localHost.SyncHostVMs(ctx, task.UserCred, vms) msg := result.Result() - log.Infof("SyncHostVMs for host %s result: %s", localHost.Name, msg) + notes := fmt.Sprintf("SyncHostVMs for host %s result: %s", localHost.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) - + logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true) for i := 0; i < len(localVMs); i += 1 { syncVMNics(ctx, provider, task, localHost, &localVMs[i], remoteVMs[i]) syncVMDisks(ctx, provider, task, localHost, &localVMs[i], remoteVMs[i]) @@ -355,12 +397,14 @@ func syncVMNics(ctx context.Context, provider *models.SCloudprovider, task *Clou } result := localVM.SyncVMNics(ctx, task.UserCred, host, nics) msg := result.Result() - log.Infof("syncVMNics for VM %s result: %s", localVM.Name, msg) + notes := fmt.Sprintf("syncVMNics for VM %s result: %s", localVM.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) + logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true) } func syncVMDisks(ctx context.Context, provider *models.SCloudprovider, task *CloudProviderSyncInfoTask, host *models.SHost, localVM *models.SGuest, remoteVM cloudprovider.ICloudVM) { @@ -373,10 +417,12 @@ func syncVMDisks(ctx context.Context, provider *models.SCloudprovider, task *Clo } result := localVM.SyncVMDisks(ctx, task.UserCred, host, disks) msg := result.Result() - log.Infof("syncVMNics for VM %s result: %s", localVM.Name, msg) + notes := fmt.Sprintf("syncVMNics for VM %s result: %s", localVM.Name, msg) + log.Infof(notes) if result.IsError() { logSyncFailed(provider, task, msg) return } db.OpsLog.LogEvent(provider, db.ACT_SYNC_HOST_COMPLETE, msg, task.UserCred) + logclient.AddActionLog(provider, getAction(task.Params), notes, task.UserCred, true) } diff --git a/pkg/util/logclient/logclient.go b/pkg/util/logclient/logclient.go index 6113cecf86..3e070285b3 100644 --- a/pkg/util/logclient/logclient.go +++ b/pkg/util/logclient/logclient.go @@ -19,6 +19,8 @@ const ( ACT_BM_UNMAINTENANCE = "退出离线状态" ACT_CANCEL_DELETE = "恢复" ACT_CHANGE_OWNER = "更改项目" + ACT_CLOUD_FULLSYNC = "全量同步" + ACT_CLOUD_SYNC = "同步" ACT_CREATE = "创建" ACT_DELETE = "删除" ACT_DISABLE = "禁用" @@ -38,18 +40,18 @@ const ( ACT_UNCACHED_IMAGE = "清除缓存" ACT_UPDATE = "更新" ACT_VM_ATTACH_DISK = "挂载磁盘" + ACT_VM_BIND_KEYPAIR = "绑定密钥" ACT_VM_CHANGE_FLAVOR = "调整配置" ACT_VM_DEPLOY = "部署" ACT_VM_DETACH_DISK = "卸载磁盘" ACT_VM_PURGE = "清除" ACT_VM_REBUILD = "重装系统" ACT_VM_RESET_PSWD = "重置密码" - ACT_VM_BIND_KEYPAIR = "绑定密钥" - ACT_VM_UNBIND_KEYPAIR = "解绑密钥" ACT_VM_START = "开机" ACT_VM_STOP = "关机" ACT_VM_SYNC_CONF = "同步配置" ACT_VM_SYNC_STATUS = "同步状态" + ACT_VM_UNBIND_KEYPAIR = "解绑密钥" ) type IObject interface {