在优化建议资源列表中增加费用信息

另外,在资源进行处理时记录对应的status信息
This commit is contained in:
zhaoxiangchun
2020-05-29 19:45:47 +08:00
parent f330d01791
commit 5ca2c6fcdf
6 changed files with 47 additions and 3 deletions
+6 -2
View File
@@ -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)
}
+36
View File
@@ -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
}
}
+1 -1
View File
@@ -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
@@ -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
@@ -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
+1
View File
@@ -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)