From ce2dbc9ac586fbd7b26898c0ae97b6c38909d5c5 Mon Sep 17 00:00:00 2001 From: Lance52259 Date: Thu, 1 Apr 2021 10:55:16 +0800 Subject: [PATCH] rds supports querying task status through job id --- openstack/rds/v3/instances/requests.go | 32 ++++++++++++++++++++++++++ openstack/rds/v3/instances/results.go | 24 +++++++++++++++++++ openstack/rds/v3/instances/urls.go | 4 ++++ 3 files changed, 60 insertions(+) diff --git a/openstack/rds/v3/instances/requests.go b/openstack/rds/v3/instances/requests.go index ca6cc025d..5bed94a37 100644 --- a/openstack/rds/v3/instances/requests.go +++ b/openstack/rds/v3/instances/requests.go @@ -423,3 +423,35 @@ func ListSlowLog(client *golangsdk.ServiceClient, opts DbSlowLogBuilder, instanc pageRdsList.Headers = rdsheader return pageRdsList } + +type RDSJobOpts struct { + JobID string `q:"id"` +} + +type RDSJobBuilder interface { + ToRDSJobQuery() (string, error) +} + +func (opts RDSJobOpts) ToRDSJobQuery() (string, error) { + q, err := golangsdk.BuildQueryString(opts) + if err != nil { + return "", err + } + return q.String(), err +} + +func GetRDSJob(client *golangsdk.ServiceClient, opts RDSJobBuilder) (r RDSJobResult) { + url := jobURL(client) + if opts != nil { + query, err := opts.ToRDSJobQuery() + if err != nil { + r.Err = err + return + } + url += query + } + _, r.Err = client.Get(url, &r.Body, &golangsdk.RequestOpts{ + MoreHeaders: map[string]string{"Content-Type": "application/json", "X-Language": "en-us"}, + }) + return +} diff --git a/openstack/rds/v3/instances/results.go b/openstack/rds/v3/instances/results.go index 1159dda18..447da8873 100644 --- a/openstack/rds/v3/instances/results.go +++ b/openstack/rds/v3/instances/results.go @@ -262,3 +262,27 @@ func ExtractSlowLog(r pagination.Page) (SlowLogResp, error) { err := (r.(SlowLogPage)).ExtractInto(&s) return s, err } + +type RDSJobResult struct { + commonResult +} + +type ListJob struct { + Job Job `json:"job"` +} + +type Job struct { + ID string `json:"id"` + Name string `json:"name"` + Status string `json:"status"` + Created string `json:"created"` + Ended string `json:"ended"` + Process string `json:"process"` + FailReason string `json:"fail_reason"` +} + +func (r RDSJobResult) Extract() (ListJob, error) { + var s ListJob + err := r.ExtractInto(&s) + return s, err +} diff --git a/openstack/rds/v3/instances/urls.go b/openstack/rds/v3/instances/urls.go index f929d9139..d4143019c 100644 --- a/openstack/rds/v3/instances/urls.go +++ b/openstack/rds/v3/instances/urls.go @@ -17,3 +17,7 @@ func listURL(c *golangsdk.ServiceClient) string { func updateURL(c *golangsdk.ServiceClient, instancesId string, updata string) string { return c.ServiceURL("instances", instancesId, updata) } + +func jobURL(c *golangsdk.ServiceClient) string { + return c.ServiceURL("jobs") +}