From af9e911fd09bc65e2cf5e6817faaa3193e05eb5a Mon Sep 17 00:00:00 2001 From: zhaoxiangchun <1422928955@qq.com> Date: Wed, 30 Sep 2020 17:15:28 +0800 Subject: [PATCH] modify suggest rule cli MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.增加perform config方法,方便修改默认规则:执行周期,扫描窗口的属性 --- cmd/climc/shell/monitor/suggestsysrule.go | 69 +++---------------- pkg/mcclient/modules/mod_suggestsysrule.go | 2 +- .../options/monitor/suggestsysrule.go | 38 +++++++++- pkg/monitor/models/suggestsysrule.go | 36 ++++++++++ 4 files changed, 82 insertions(+), 63 deletions(-) diff --git a/cmd/climc/shell/monitor/suggestsysrule.go b/cmd/climc/shell/monitor/suggestsysrule.go index 35579d598c..c92f4e7531 100644 --- a/cmd/climc/shell/monitor/suggestsysrule.go +++ b/cmd/climc/shell/monitor/suggestsysrule.go @@ -15,70 +15,19 @@ package monitor import ( - "yunion.io/x/onecloud/pkg/mcclient" - "yunion.io/x/onecloud/pkg/mcclient/modules/monitor" + "yunion.io/x/onecloud/cmd/climc/shell" + "yunion.io/x/onecloud/pkg/mcclient/modules" options "yunion.io/x/onecloud/pkg/mcclient/options/monitor" ) func init() { - aN := cmdN("suggestsysrule") - R(&options.SuggestRuleListOptions{}, aN("list"), "List all suggestsysrules", - func(s *mcclient.ClientSession, args *options.SuggestRuleListOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := monitor.SuggestSysRuleManager.List(s, params) - if err != nil { - return err - } - printList(ret, monitor.SuggestSysRuleManager.GetColumns(s)) - return nil - }) - R(&options.SuggestRuleCreateOptions{}, aN("create"), "Create suggestsys rule", - func(s *mcclient.ClientSession, args *options.SuggestRuleCreateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := monitor.SuggestSysRuleManager.Create(s, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - R(&options.SuggestRuleShowOptions{}, aN("show"), "Show details of a alert rule", - func(s *mcclient.ClientSession, args *options.SuggestRuleShowOptions) error { - ret, err := monitor.SuggestSysRuleManager.Get(s, args.ID, nil) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - R(&options.SuggestRuleUpdateOptions{}, aN("update"), "Update a alert rule", - func(s *mcclient.ClientSession, args *options.SuggestRuleUpdateOptions) error { - params, err := args.Params() - if err != nil { - return err - } - ret, err := monitor.SuggestSysRuleManager.Update(s, args.ID, params) - if err != nil { - return err - } - printObject(ret) - return nil - }) - - R(&options.SuggestRuleDeleteOptions{}, aN("delete"), "Delete alerts", - func(s *mcclient.ClientSession, args *options.SuggestRuleDeleteOptions) error { - ret := monitor.SuggestSysRuleManager.BatchDelete(s, args.ID, nil) - printBatchResults(ret, monitor.SuggestSysRuleManager.GetColumns(s)) - return nil - }) + cmd := shell.NewResourceCmd(modules.SuggestSysRuleManager) + cmd.List(new(options.SuggestRuleListOptions)) + cmd.Show(new(options.SuggestRuleShowOptions)) + cmd.Perform("enable", new(options.SuggestRuleShowOptions)) + cmd.Perform("disable", new(options.SuggestRuleShowOptions)) + cmd.Delete(new(options.CommonAlertDeleteOptions)) + cmd.Perform("config", new(options.SuggestRuleConfigOptions)) } diff --git a/pkg/mcclient/modules/mod_suggestsysrule.go b/pkg/mcclient/modules/mod_suggestsysrule.go index 0082c94b44..49a11573b8 100644 --- a/pkg/mcclient/modules/mod_suggestsysrule.go +++ b/pkg/mcclient/modules/mod_suggestsysrule.go @@ -51,7 +51,7 @@ type SInfluxdbShemaManager struct { func NewSuggestSysRuleManager() *SSuggestSysRuleManager { man := NewMonitorV2Manager("suggestsysrule", "suggestsysrules", - []string{"id", "name", "type", "enabled", "setting"}, + []string{"id", "name", "type", "enabled", "period", "time_from", "setting"}, []string{}) return &SSuggestSysRuleManager{ ResourceManager: &man, diff --git a/pkg/mcclient/options/monitor/suggestsysrule.go b/pkg/mcclient/options/monitor/suggestsysrule.go index 86c8a06620..1d774bac1d 100644 --- a/pkg/mcclient/options/monitor/suggestsysrule.go +++ b/pkg/mcclient/options/monitor/suggestsysrule.go @@ -27,10 +27,36 @@ type SuggestRuleListOptions struct { options.BaseListOptions } +func (o *SuggestRuleListOptions) Params() (jsonutils.JSONObject, error) { + return options.ListStructToParams(o) +} + type SuggestRuleShowOptions struct { ID string `help:"ID or name of the alert" json:"-"` } +func (o *SuggestRuleShowOptions) Params() (jsonutils.JSONObject, error) { + return options.StructToParams(o) +} + +func (o *SuggestRuleShowOptions) GetId() string { + return o.ID +} + +type SuggestRuleConfigOptions struct { + ID string `help:"ID or name of the alert" json:"-"` + Period string `help:"Period of suggest rule e.g. '5s', '1m'"` + TimeFrom string `help:"TimeFrom of suggest rule e.g. '24h'"` +} + +func (o *SuggestRuleConfigOptions) Params() (jsonutils.JSONObject, error) { + return options.StructToParams(o) +} + +func (o *SuggestRuleConfigOptions) GetId() string { + return o.ID +} + type SuggestSysRuleAlertSettingOptions struct { Status string `help:"Status of eip_unused rule"` } @@ -43,7 +69,7 @@ type SuggestRuleCreateOptions struct { Period string `help:"Period of suggest rule e.g. '5s', '1m'" default:"30s"` } -func (opt SuggestRuleCreateOptions) Params() (jsonutils.JSONObject, error) { +func (opt *SuggestRuleCreateOptions) Params() (jsonutils.JSONObject, error) { input := new(monitor.SuggestSysRuleCreateInput) input.Name = opt.Name input.Period = opt.Period @@ -119,5 +145,13 @@ func newSuggestSysAlertSetting(tp string) *monitor.SSuggestSysAlertSetting { } type SuggestRuleDeleteOptions struct { - ID []string `help:"ID of alert to delete"` + ID string `help:"ID of alert to delete"` +} + +func (o *SuggestRuleDeleteOptions) GetId() string { + return o.ID +} + +func (o *SuggestRuleDeleteOptions) Params() (jsonutils.JSONObject, error) { + return options.StructToParams(o) } diff --git a/pkg/monitor/models/suggestsysrule.go b/pkg/monitor/models/suggestsysrule.go index 52b31caca1..2641b275f1 100644 --- a/pkg/monitor/models/suggestsysrule.go +++ b/pkg/monitor/models/suggestsysrule.go @@ -311,6 +311,42 @@ func (self *SSuggestSysRule) PerformDisable(ctx context.Context, userCred mcclie return nil, nil } +func (self *SSuggestSysRule) AllowPerformConfig(ctx context.Context, userCred mcclient.TokenCredential, + query jsonutils.JSONObject, data jsonutils.JSONObject) bool { + return db.IsAdminAllowPerform(userCred, self, "config") +} + +func (self *SSuggestSysRule) PerformConfig(ctx context.Context, userCred mcclient.TokenCredential, + query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { + period, _ := data.GetString("period") + timeFrom, _ := data.GetString("time_from") + if len(period) != 0 { + period = parseDuration(period) + if _, err := time.ParseDuration(period); err != nil { + return data, httperrors.NewInputParameterError("Invalid period format: %s", period) + } + } + if len(timeFrom) != 0 { + timeFrom = parseDuration(timeFrom) + if _, err := time.ParseDuration(timeFrom); err != nil { + return data, httperrors.NewInputParameterError("Invalid time_from format: %s", timeFrom) + } + } + db.Update(self, func() error { + if len(period) != 0 { + self.Period = period + } + if len(timeFrom) != 0 { + self.TimeFrom = timeFrom + + } + return nil + }) + db.OpsLog.LogEvent(self, "modifyconfig", "", userCred) + self.updateCronjob() + return nil, nil +} + func (self *SSuggestSysRuleManager) AllowGetPropertyRuleType(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { return true }