From 4b552395dafd2999263d52a985e5518ab4f13cce Mon Sep 17 00:00:00 2001 From: ioito Date: Fri, 11 Mar 2022 10:50:26 +0800 Subject: [PATCH] fix(region): log export --- pkg/apis/input.go | 4 ++++ pkg/cloudcommon/db/db_dispatcher.go | 2 +- pkg/cloudcommon/db/modelbase.go | 30 +++++++++++++++++++++++++++++ pkg/mcclient/options/logs.go | 3 ++- 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/pkg/apis/input.go b/pkg/apis/input.go index 4d4f7c9d39..bbbcef49a8 100644 --- a/pkg/apis/input.go +++ b/pkg/apis/input.go @@ -395,3 +395,7 @@ type SyncstatusInput struct { type PurgeSplitTableInput struct { Tables []string `json:"tables"` } + +type SplitTableExportInput struct { + Table string `json:"table"` +} diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 1ac6f67823..86746acdc5 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -959,7 +959,7 @@ func (dispatcher *DBModelDispatcher) Get(ctx context.Context, idStr string, quer if err == sql.ErrNoRows { return nil, httperrors.NewResourceNotFoundError2(dispatcher.modelManager.Keyword(), idStr) } else if err != nil { - return nil, err + return nil, errors.Wrapf(err, "fetchItem") } err = isObjectRbacAllowed(ctx, model, userCred, policy.PolicyActionGet) diff --git a/pkg/cloudcommon/db/modelbase.go b/pkg/cloudcommon/db/modelbase.go index 081abd0d12..0658390af5 100644 --- a/pkg/cloudcommon/db/modelbase.go +++ b/pkg/cloudcommon/db/modelbase.go @@ -272,6 +272,10 @@ func (manager *SModelBaseManager) GetExportExtraKeys(ctx context.Context, keys s } func (manager *SModelBaseManager) CustomizeHandlerInfo(info *appsrv.SHandlerInfo) { + switch info.GetName(nil) { + case "get_splitable_export": + info.SetProcessTimeout(time.Minute * 120) + } info.SetProcessTimeoutCallback(manager.GetIModelManager().SetHandlerProcessTimeout) } @@ -451,6 +455,32 @@ func (manager *SModelBaseManager) GetPropertySplitable(ctx context.Context, user return jsonutils.Marshal(metas), nil } +func (manager *SModelBaseManager) GetPropertySplitableExport(ctx context.Context, userCred mcclient.TokenCredential, input apis.SplitTableExportInput) (jsonutils.JSONObject, error) { + splitable := manager.GetSplitTable() + if splitable == nil { + return nil, errors.Wrap(httperrors.ErrNotSupported, "not splitable") + } + if len(input.Table) == 0 { + return nil, httperrors.NewMissingParameterError("table") + } + + metas, err := splitable.GetTableMetas() + if err != nil { + return nil, errors.Wrap(err, "GetTableMetas") + } + for i := 0; i < len(metas); i += 1 { + if metas[i].Table == input.Table { + q := splitable.GetTableSpec(metas[i]).Query() + resp, err := q.AllStringMap() + if err != nil { + return nil, errors.Wrapf(err, "q.AllStringMap") + } + return jsonutils.Marshal(resp), nil + } + } + return nil, httperrors.NewResourceNotFoundError("table %s not found", input.Table) +} + func (manager *SModelBaseManager) AllowPerformPurgeSplitable(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool { return true } diff --git a/pkg/mcclient/options/logs.go b/pkg/mcclient/options/logs.go index 5e1607a24f..1fa7f719a7 100644 --- a/pkg/mcclient/options/logs.go +++ b/pkg/mcclient/options/logs.go @@ -17,8 +17,9 @@ package options import "yunion.io/x/jsonutils" type EventSplitableOptions struct { - ID string `choices:"splitable"` + ID string `choices:"splitable|splitable-export"` Service string `help:"service" choices:"compute|identity|image|log|cloudevent" default:"compute"` + Table string `help:"when id is splitable-export table must be input"` } func (self *EventSplitableOptions) GetId() string {