-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Support reindex as asynchronous task (#550)
* With WaitForCompletion(false), a task id is returned. * Monitor the progress of an individual task.
- Loading branch information
Showing
5 changed files
with
248 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
package elastic | ||
|
||
import ( | ||
"context" | ||
"fmt" | ||
"net/url" | ||
|
||
"gopkg.in/olivere/elastic.v5/uritemplates" | ||
) | ||
|
||
// TasksGetTaskService retrieves the state of a task in the cluster. It is part of the Task Management API | ||
// documented at http://www.elastic.co/guide/en/elasticsearch/reference/5.2/tasks-list.html. | ||
// | ||
// It is supported as of Elasticsearch 2.3.0. | ||
type TasksGetTaskService struct { | ||
client *Client | ||
pretty bool | ||
taskId string | ||
detailed *bool | ||
waitForCompletion *bool | ||
} | ||
|
||
// NewTasksGetTaskService creates a new TasksGetTaskService. | ||
func NewTasksGetTaskService(client *Client) *TasksGetTaskService { | ||
return &TasksGetTaskService{ | ||
client: client, | ||
} | ||
} | ||
|
||
// TaskId indicates to return the task with specified id. | ||
func (s *TasksGetTaskService) TaskId(taskId string) *TasksGetTaskService { | ||
s.taskId = taskId | ||
return s | ||
} | ||
|
||
// Detailed indicates whether to return detailed task information (default: false). | ||
func (s *TasksGetTaskService) Detailed(detailed bool) *TasksGetTaskService { | ||
s.detailed = &detailed | ||
return s | ||
} | ||
|
||
// WaitForCompletion indicates whether to wait for the matching tasks | ||
// to complete (default: false). | ||
func (s *TasksGetTaskService) WaitForCompletion(waitForCompletion bool) *TasksGetTaskService { | ||
s.waitForCompletion = &waitForCompletion | ||
return s | ||
} | ||
|
||
// Pretty indicates that the JSON response be indented and human readable. | ||
func (s *TasksGetTaskService) Pretty(pretty bool) *TasksGetTaskService { | ||
s.pretty = pretty | ||
return s | ||
} | ||
|
||
// buildURL builds the URL for the operation. | ||
func (s *TasksGetTaskService) buildURL() (string, url.Values, error) { | ||
// Build URL | ||
var err error | ||
var path string | ||
params := url.Values{} | ||
path, err = uritemplates.Expand("/_tasks/{task_id}", map[string]string{ | ||
"task_id": s.taskId, | ||
}) | ||
|
||
if err != nil { | ||
return "", url.Values{}, err | ||
} | ||
|
||
// Add query string parameters | ||
if s.pretty { | ||
params.Set("pretty", "1") | ||
} | ||
if s.detailed != nil { | ||
params.Set("detailed", fmt.Sprintf("%v", *s.detailed)) | ||
} | ||
if s.waitForCompletion != nil { | ||
params.Set("wait_for_completion", fmt.Sprintf("%v", *s.waitForCompletion)) | ||
} | ||
return path, params, nil | ||
} | ||
|
||
// Validate checks if the operation is valid. | ||
func (s *TasksGetTaskService) Validate() error { | ||
return nil | ||
} | ||
|
||
// Do executes the operation. | ||
func (s *TasksGetTaskService) Do(ctx context.Context) (*TasksGetTaskResponse, error) { | ||
// Check pre-conditions | ||
if err := s.Validate(); err != nil { | ||
return nil, err | ||
} | ||
|
||
// Get URL for request | ||
path, params, err := s.buildURL() | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
// Get HTTP response | ||
res, err := s.client.PerformRequest(ctx, "GET", path, params, nil) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
// Return operation response | ||
ret := new(TasksGetTaskResponse) | ||
if err := s.client.decoder.Decode(res.Body, ret); err != nil { | ||
return nil, err | ||
} | ||
return ret, nil | ||
} | ||
|
||
type TasksGetTaskResponse struct { | ||
Completed bool `json:completed` | ||
Task TaskInfo `json:task` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters