diff --git a/pkg/monitor/models/suggestsysalart.go b/pkg/monitor/models/suggestsysalart.go index 6b4878bb36..5630b86a67 100644 --- a/pkg/monitor/models/suggestsysalart.go +++ b/pkg/monitor/models/suggestsysalart.go @@ -25,7 +25,6 @@ import ( "yunion.io/x/sqlchemy" "yunion.io/x/onecloud/pkg/apis/monitor" - api "yunion.io/x/onecloud/pkg/apis/monitor" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" @@ -73,6 +72,11 @@ type SSuggestSysAlert struct { Provider string `list:"user" update:"user"` Project string `list:"user" update:"user"` Cloudaccount string `list:"user" update:"user"` + + //费用 + Amount float64 `list:"user" update:"user"` + //币种 + Currency string `list:"user" update:"user"` } func NewSuggestSysAlertManager(dt interface{}, keyword, keywordPlural string) *SSuggestSysAlertManager { @@ -274,7 +278,7 @@ func (self *SSuggestSysAlert) RealDelete(ctx context.Context, userCred mcclient. func (self *SSuggestSysAlert) StartDeleteTask( ctx context.Context, userCred mcclient.TokenCredential) error { params := jsonutils.NewDict() - self.SetStatus(userCred, api.SUGGEST_ALERT_START_DELETE, "") + return GetSuggestSysRuleDrivers()[self.Type].StartResolveTask(ctx, userCred, self, params) } diff --git a/pkg/monitor/suggestsysdrivers/common.go b/pkg/monitor/suggestsysdrivers/common.go index c3151d68ce..222efd4033 100644 --- a/pkg/monitor/suggestsysdrivers/common.go +++ b/pkg/monitor/suggestsysdrivers/common.go @@ -8,6 +8,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" "yunion.io/x/pkg/errors" + "yunion.io/x/pkg/util/timeutils" "yunion.io/x/onecloud/pkg/apis/monitor" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -108,6 +109,7 @@ func getSuggestSysAlertFromJson(obj jsonutils.JSONObject, rule models.ISuggestSy suggestSysAlert.ResMeta = obj suggestSysAlert.Action = monitor.DRIVER_ACTION suggestSysAlert.Status = monitor.SUGGEST_ALERT_READY + getResourceAmount(suggestSysAlert, time.Now().Add(-30*24*time.Hour)) return suggestSysAlert, nil } @@ -156,3 +158,37 @@ func getLatestActionTimeFromLogs(logActions []jsonutils.JSONObject) (*time.Time, } return latestTime, nil } + +func getResourceAmount(alert *models.SSuggestSysAlert, lastUsedTime time.Time) { + param := jsonutils.NewDict() + param.Add(jsonutils.NewString("system"), "scope") + param.Add(jsonutils.NewString("0"), "limit") + filter := fmt.Sprintf("resource_id.contains(%s)", alert.ResId) + param.Add(jsonutils.NewString(filter), "filter") + + start_day := timeutils.ShortDate(lastUsedTime) + end_day := timeutils.ShortDate(time.Now()) + + param.Add(jsonutils.NewString(start_day), "start_day") + param.Add(jsonutils.NewString(end_day), "end_day") + session := auth.GetAdminSession(context.Background(), "", "") + billRtn, err := mod.BillResources.List(session, param) + if err != nil { + log.Errorln(err) + return + } + for _, bill := range billRtn.Data { + amount, err := bill.Float("amount") + if err != nil { + log.Errorln(err) + break + } + alert.Amount += amount + currency, err := bill.GetString("currency") + if err != nil { + log.Errorln(err) + } + alert.Currency = currency + } + +} diff --git a/pkg/monitor/suggestsysdrivers/diskunused.go b/pkg/monitor/suggestsysdrivers/diskunused.go index 210d03ce14..787ba0a1a4 100644 --- a/pkg/monitor/suggestsysdrivers/diskunused.go +++ b/pkg/monitor/suggestsysdrivers/diskunused.go @@ -118,7 +118,7 @@ func (rule *DiskUnused) ValidateSetting(input *monitor.SSuggestSysAlertSetting) func (rule *DiskUnused) StartResolveTask(ctx context.Context, userCred mcclient.TokenCredential, suggestSysAlert *models.SSuggestSysAlert, params *jsonutils.JSONDict) error { - suggestSysAlert.SetStatus(userCred, monitor.SUGGEST_ALERT_DELETING, "") + suggestSysAlert.SetStatus(userCred, monitor.SUGGEST_ALERT_START_DELETE, "") task, err := taskman.TaskManager.NewTask(ctx, "ResolveUnusedTask", suggestSysAlert, userCred, params, "", "", nil) if err != nil { return err diff --git a/pkg/monitor/suggestsysdrivers/eipunused.go b/pkg/monitor/suggestsysdrivers/eipunused.go index 7b76acbf57..e320b66890 100644 --- a/pkg/monitor/suggestsysdrivers/eipunused.go +++ b/pkg/monitor/suggestsysdrivers/eipunused.go @@ -128,6 +128,7 @@ func (rule *EIPUnused) getEIPUnused(instance *monitor.SSuggestSysAlertSetting) ( problem.Add(jsonutils.NewString(rtnTime), "eipUnused time") suggestSysAlert.Problem = problem + getResourceAmount(suggestSysAlert, latestTime) EIPUnsedArr.Add(jsonutils.Marshal(suggestSysAlert)) } return EIPUnsedArr, nil @@ -159,6 +160,7 @@ func (rule *EIPUnused) Resolve(data *models.SSuggestSysAlert) error { func (rule *EIPUnused) StartResolveTask(ctx context.Context, userCred mcclient.TokenCredential, suggestSysAlert *models.SSuggestSysAlert, params *jsonutils.JSONDict) error { + suggestSysAlert.SetStatus(userCred, monitor.SUGGEST_ALERT_START_DELETE, "") task, err := taskman.TaskManager.NewTask(ctx, "ResolveUnusedTask", suggestSysAlert, userCred, params, "", "", nil) if err != nil { return err diff --git a/pkg/monitor/suggestsysdrivers/lbunused.go b/pkg/monitor/suggestsysdrivers/lbunused.go index 5fbb82d1f9..e7a2639eb7 100644 --- a/pkg/monitor/suggestsysdrivers/lbunused.go +++ b/pkg/monitor/suggestsysdrivers/lbunused.go @@ -181,6 +181,7 @@ func containsLbBackEnd(groupId string) (*bool, error) { func (rule *LBUnused) StartResolveTask(ctx context.Context, userCred mcclient.TokenCredential, suggestSysAlert *models.SSuggestSysAlert, params *jsonutils.JSONDict) error { + suggestSysAlert.SetStatus(userCred, monitor.SUGGEST_ALERT_START_DELETE, "") task, err := taskman.TaskManager.NewTask(ctx, "ResolveUnusedTask", suggestSysAlert, userCred, params, "", "", nil) if err != nil { return err diff --git a/pkg/monitor/tasks/resolve_unused_task.go b/pkg/monitor/tasks/resolve_unused_task.go index 7f5e36ea34..db707eada4 100644 --- a/pkg/monitor/tasks/resolve_unused_task.go +++ b/pkg/monitor/tasks/resolve_unused_task.go @@ -43,6 +43,7 @@ func (self *ResolveUnusedTask) OnInit(ctx context.Context, obj db.IStandaloneMod self.taskFail(ctx, suggestSysAlert, msg) return } + suggestSysAlert.SetStatus(self.UserCred, api.SUGGEST_ALERT_DELETING, "") err = suggestSysAlert.RealDelete(ctx, self.UserCred) if err != nil { msg := fmt.Sprintf("fail to delete SSuggestSysAlert %s", err)