mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #12099 from zhaoxiangchun/automated-cherry-pick-of-#12097-upstream-release-3.7
Automated cherry pick of #12097: fix(monitor): monitor resource apiHelper fix
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
package apihelper
|
||||
|
||||
import (
|
||||
"yunion.io/x/jsonutils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
mcclient "yunion.io/x/onecloud/pkg/mcclient"
|
||||
mcclient_modulebase "yunion.io/x/onecloud/pkg/mcclient/modulebase"
|
||||
@@ -44,6 +46,14 @@ type IModelSetEmulatedIncluder interface {
|
||||
IncludeEmulated() bool
|
||||
}
|
||||
|
||||
type IModelSetFilter interface {
|
||||
ModelFilter() []string
|
||||
}
|
||||
|
||||
type IModelListParam interface {
|
||||
ModelParamFilter() jsonutils.JSONObject
|
||||
}
|
||||
|
||||
func SyncModelSets(mssOld IModelSets, s *mcclient.ClientSession, opt *Options) (r ModelSetsUpdateResult, err error) {
|
||||
mss := mssOld.ModelSetList()
|
||||
mssNews := mssOld.NewEmpty()
|
||||
|
||||
@@ -120,6 +120,10 @@ func GetModels(opts *GetModelsOptions) error {
|
||||
"cloud_env=onpremise",
|
||||
)
|
||||
}
|
||||
if inter, ok := opts.ModelSet.(IModelSetFilter); ok {
|
||||
filter := inter.ModelFilter()
|
||||
listOptions.Filter = append(listOptions.Filter, filter...)
|
||||
}
|
||||
if !minUpdatedAt.Equal(PseudoZeroTime) {
|
||||
// Only fetching pending deletes when we are doing incremental fetch
|
||||
listOptions.PendingDeleteAll = options.Bool(true)
|
||||
@@ -129,6 +133,10 @@ func GetModels(opts *GetModelsOptions) error {
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s: making list params: %s", manKeyPlural, err)
|
||||
}
|
||||
if inter, ok := opts.ModelSet.(IModelListParam); ok {
|
||||
filter := inter.ModelParamFilter()
|
||||
params.Update(filter)
|
||||
}
|
||||
//XXX
|
||||
//params.Set(api.LBAGENT_QUERY_ORIG_KEY, jsonutils.NewString(api.LBAGENT_QUERY_ORIG_VAL))
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"yunion.io/x/jsonutils"
|
||||
|
||||
"yunion.io/x/onecloud/pkg/apihelper"
|
||||
"yunion.io/x/onecloud/pkg/apis/monitor"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
@@ -130,6 +132,10 @@ func (s Servers) NeedSync() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (s Servers) ModelFilter() []string {
|
||||
return []string{"hypervisor.notin(baremetal,container)"}
|
||||
}
|
||||
|
||||
func (h Hosts) AddModel(i db.IModel) {
|
||||
resource := i.(*Host)
|
||||
h[resource.Id] = resource
|
||||
@@ -155,6 +161,12 @@ func (s Hosts) NeedSync() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (s Hosts) ModelParamFilter() jsonutils.JSONObject {
|
||||
param := jsonutils.NewDict()
|
||||
param.Set("baremetal", jsonutils.NewBool(false))
|
||||
return param
|
||||
}
|
||||
|
||||
func (r Rds) ModelManager() modulebase.IBaseManager {
|
||||
return &mcclient_modules.DBInstance
|
||||
}
|
||||
|
||||
@@ -103,6 +103,41 @@ func (manager *SMonitorResourceManager) GetMonitorResources(input monitor.Monito
|
||||
return monitorResources, nil
|
||||
}
|
||||
|
||||
type SdeleteRes struct {
|
||||
resType string
|
||||
notIn []string
|
||||
in []string
|
||||
}
|
||||
|
||||
func (manager *SMonitorResourceManager) DeleteMonitorResources(ctx context.Context, userCred mcclient.TokenCredential, input SdeleteRes) error {
|
||||
monitorResources := make([]SMonitorResource, 0)
|
||||
errs := make([]error, 0)
|
||||
query := manager.Query()
|
||||
if len(input.notIn) != 0 {
|
||||
query.NotIn("res_id", input.notIn)
|
||||
}
|
||||
if len(input.in) != 0 {
|
||||
query.In("res_id", input.in)
|
||||
}
|
||||
if len(input.resType) != 0 {
|
||||
query.Equals("res_type", input.resType)
|
||||
}
|
||||
err := db.FetchModelObjects(manager, query, &monitorResources)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "SMonitorResourceManager FetchModelObjects when DeleteMonitorResources err")
|
||||
}
|
||||
for _, res := range monitorResources {
|
||||
err := (&res).RealDelete(ctx, userCred)
|
||||
if err != nil {
|
||||
errs = append(errs, errors.Wrapf(err, "delete monitorResource:%s err", res.GetId()))
|
||||
}
|
||||
}
|
||||
if len(errs) != 0 {
|
||||
return errors.NewAggregate(errs)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (manager *SMonitorResourceManager) GetMonitorResourceById(id string) (*SMonitorResource, error) {
|
||||
iModel, err := db.FetchById(manager, id)
|
||||
if err != nil {
|
||||
@@ -401,6 +436,7 @@ func (manager *SMonitorResourceManager) SyncResources(ctx context.Context, mss *
|
||||
userCred := auth.AdminCredential()
|
||||
errs := make([]error, 0)
|
||||
log.Infoln("start sync")
|
||||
aliveIds := make([]string, 0)
|
||||
for _, set := range mss.ModelSetList() {
|
||||
setRv := reflect.ValueOf(set)
|
||||
needSync, typ := manager.GetSetType(set)
|
||||
@@ -420,6 +456,7 @@ func (manager *SMonitorResourceManager) SyncResources(ctx context.Context, mss *
|
||||
return errors.Wrap(err, "GetMonitorResources err")
|
||||
}
|
||||
if mRv.IsValid() {
|
||||
aliveIds = append(aliveIds, kRv.String())
|
||||
obj := jsonutils.Marshal(mRv.Interface())
|
||||
if len(res) == 0 {
|
||||
// no find to create
|
||||
@@ -452,6 +489,10 @@ func (manager *SMonitorResourceManager) SyncResources(ctx context.Context, mss *
|
||||
}
|
||||
}
|
||||
}
|
||||
err := manager.DeleteMonitorResources(ctx, userCred, SdeleteRes{notIn: aliveIds, resType: typ})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
log.Infoln("SMonitorResourceManager SyncResources End")
|
||||
err := CommonAlertManager.Run(ctx)
|
||||
|
||||
Reference in New Issue
Block a user