Skip to content

Commit 0ac36c7

Browse files
authored
Merge pull request #323 from bonitoo-io/fix/tasks
feat: Adding TasksAPI.CreateTaskByFlux
2 parents f50acad + 982fa2d commit 0ac36c7

File tree

3 files changed

+52
-11
lines changed

3 files changed

+52
-11
lines changed

CHANGELOG.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
1+
## 2.9.0 unreleased
2+
### Features
3+
- [#323](https://github.com/influxdata/influxdb-client-go/pull/323) Added `TasksAPI.CreateTaskByFlux` to allow full control of task script.
4+
15
## 2.8.2 [2022-04-19]
26
### Bug fixes
3-
- [#319](https://github.com/influxdata/influxdb-client-go/issues/319) Synchronize `WriteAPIImpl.Close` to prevent panic when closing client by multiple go-routines.
7+
- [#319](https://github.com/influxdata/influxdb-client-go/pull/319) Synchronize `WriteAPIImpl.Close` to prevent panic when closing client by multiple go-routines.
48

59
## 2.8.1 [2022-03-21]
610
### Bug fixes

api/tasks.go

+20-9
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,18 @@ type TasksAPI interface {
5353
GetTask(ctx context.Context, task *domain.Task) (*domain.Task, error)
5454
// GetTaskByID retrieves a task found using taskID.
5555
GetTaskByID(ctx context.Context, taskID string) (*domain.Task, error)
56-
// CreateTask creates a new task according the the task object.
56+
// CreateTask creates a new task according the task object.
5757
// It copies OrgId, Name, Description, Flux, Status and Every or Cron properties. Every and Cron are mutually exclusive.
5858
// Every has higher priority.
5959
CreateTask(ctx context.Context, task *domain.Task) (*domain.Task, error)
60-
// CreateTaskWithEvery creates a new task with with the name, flux script and every repetition setting, in the org orgID.
60+
// CreateTaskWithEvery creates a new task with the name, flux script and every repetition setting, in the org orgID.
6161
// Every holds duration values.
6262
CreateTaskWithEvery(ctx context.Context, name, flux, every, orgID string) (*domain.Task, error)
63-
// CreateTaskWithCron creates a new task with with the name, flux script and cron repetition setting, in the org orgID
63+
// CreateTaskWithCron creates a new task with the name, flux script and cron repetition setting, in the org orgID
6464
// Cron holds cron-like setting, e.g. once an hour at beginning of the hour "0 * * * *".
6565
CreateTaskWithCron(ctx context.Context, name, flux, cron, orgID string) (*domain.Task, error)
66+
// CreateTaskByFlux creates a new task with complete definition in flux script, in the org orgID
67+
CreateTaskByFlux(ctx context.Context, flux, orgID string) (*domain.Task, error)
6668
// UpdateTask updates a task.
6769
// It copies Description, Flux, Status, Offset and Every or Cron properties. Every and Cron are mutually exclusive.
6870
// Every has higher priority.
@@ -217,37 +219,46 @@ func (t *tasksAPI) createTask(ctx context.Context, taskReq *domain.TaskCreateReq
217219
return response.JSON201, nil
218220
}
219221

220-
func createTaskReq(name, flux string, every, cron *string, orgID string) *domain.TaskCreateRequest {
222+
func createTaskReqDetailed(name, flux string, every, cron *string, orgID string) *domain.TaskCreateRequest {
221223
repetition := ""
222224
if every != nil {
223225
repetition = fmt.Sprintf("every: %s", *every)
224226
} else if cron != nil {
225227
repetition = fmt.Sprintf(`cron: "%s"`, *cron)
226228
}
229+
fullFlux := fmt.Sprintf(`option task = { name: "%s", %s } %s`, name, repetition, flux)
230+
return createTaskReq(fullFlux, orgID)
231+
}
232+
func createTaskReq(flux string, orgID string) *domain.TaskCreateRequest {
233+
227234
status := domain.TaskStatusTypeActive
228235
taskReq := &domain.TaskCreateRequest{
229-
Flux: fmt.Sprintf(`option task = { name: "%s", %s }
230-
%s`, name, repetition, flux),
236+
Flux: flux,
231237
Status: &status,
232238
OrgID: &orgID,
233239
}
234240
return taskReq
235241
}
236242

237243
func (t *tasksAPI) CreateTask(ctx context.Context, task *domain.Task) (*domain.Task, error) {
238-
taskReq := createTaskReq(task.Name, task.Flux, task.Every, task.Cron, task.OrgID)
244+
taskReq := createTaskReqDetailed(task.Name, task.Flux, task.Every, task.Cron, task.OrgID)
239245
taskReq.Description = task.Description
240246
taskReq.Status = task.Status
241247
return t.createTask(ctx, taskReq)
242248
}
243249

244250
func (t *tasksAPI) CreateTaskWithEvery(ctx context.Context, name, flux, every, orgID string) (*domain.Task, error) {
245-
taskReq := createTaskReq(name, flux, &every, nil, orgID)
251+
taskReq := createTaskReqDetailed(name, flux, &every, nil, orgID)
246252
return t.createTask(ctx, taskReq)
247253
}
248254

249255
func (t *tasksAPI) CreateTaskWithCron(ctx context.Context, name, flux, cron, orgID string) (*domain.Task, error) {
250-
taskReq := createTaskReq(name, flux, nil, &cron, orgID)
256+
taskReq := createTaskReqDetailed(name, flux, nil, &cron, orgID)
257+
return t.createTask(ctx, taskReq)
258+
}
259+
260+
func (t *tasksAPI) CreateTaskByFlux(ctx context.Context, flux, orgID string) (*domain.Task, error) {
261+
taskReq := createTaskReq(flux, orgID)
251262
return t.createTask(ctx, taskReq)
252263
}
253264

api/tasks_e2e_test.go

+27-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
//go:build e2e
12
// +build e2e
23

34
// Copyright 2020-2021 InfluxData, Inc. All rights reserved.
@@ -112,7 +113,29 @@ func TestTasksAPI_CRUDTask(t *testing.T) {
112113
if assert.NotNil(t, task3.Status) {
113114
assert.Equal(t, taskStatus, *task3.Status, *task3.Status)
114115
}
115-
assert.Equal(t, *org.Id, task3.OrgID, task3.OrgID)
116+
117+
flux := `import "types"
118+
option task = {
119+
name: "task 04",
120+
every: 1h,
121+
}
122+
123+
from(bucket: "my-bucket")
124+
|> range(start: -task.every)
125+
|> filter(fn: (r) => r._measurement == "mem" and r.host == "myHost")`
126+
task4, err := tasksAPI.CreateTaskByFlux(ctx, flux, *org.Id)
127+
require.Nil(t, err)
128+
require.NotNil(t, task4)
129+
130+
assert.Equal(t, "task 04", task4.Name, task4.Name)
131+
assert.Nil(t, task4.Description)
132+
if assert.NotNil(t, task4.Every) {
133+
assert.Equal(t, "1h", *task4.Every, *task4.Every)
134+
}
135+
if assert.NotNil(t, task4.Status) {
136+
assert.Equal(t, domain.TaskStatusTypeActive, *task4.Status, *task4.Status)
137+
}
138+
assert.Equal(t, *org.Id, task4.OrgID, task4.OrgID)
116139

117140
err = tasksAPI.DeleteTask(ctx, task1)
118141
assert.Nil(t, err)
@@ -123,6 +146,9 @@ func TestTasksAPI_CRUDTask(t *testing.T) {
123146
err = tasksAPI.DeleteTask(ctx, task3)
124147
assert.Nil(t, err)
125148

149+
err = tasksAPI.DeleteTask(ctx, task4)
150+
assert.Nil(t, err)
151+
126152
tasks, err = tasksAPI.FindTasks(ctx, nil)
127153
require.Nil(t, err)
128154
assert.Len(t, tasks, 0)

0 commit comments

Comments
 (0)