1
0
mirror of https://github.com/mainflux/mainflux.git synced 2025-05-04 22:17:59 +08:00
Aryan Godara 986edacfc7
MF-1584 - Upgrade InfluxDB from 1.x to 2.x (#1709)
* Upgrade InfluxDB from 1.x to 2.x

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influx DB configuration updated

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Connection to InfluxDBv2

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Token cannot be created

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Connected to InfluxDB2

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Connected to InfluxDB2

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* InfluxDB v2 Consumer Implementation

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* quickfix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influxdb-Writer Unit Tests Update

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Consumer Update

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* InfluxDB Writer Tests Implemented

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* InfluxDB Connection Check

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolving Remarks

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved consumer-test remark

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* consumer-test slow working version

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* reader changes

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Consumer tests time issue fixed

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Eof warning fixed

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Makefile Fixed

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Readers Initial Setup

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* consumer json fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influxdb Reader Parsers

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influxdb Reader Parsers

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influxdb Reader Parsers

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Bugfix and resolves comments.

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* one test fails

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* solved last page read

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* writers future time problem fixed

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* weird

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* weird

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Tests Passes

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolve Semaphore Issues

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* UUID comment on consumer tests resolved

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Inclusive from and Exclusive to

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Inclusive from and Exclusive to

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* 1 second limits

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* 1 second limits

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved review

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved review

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved review

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved review

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* fixed json time

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* fixed CI error

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved request

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved request

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved requests

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* removed blank line

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved comment

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* deleted unnecessary string builder

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* initial commit

Signed-off-by: aryan <aryangodara03@gmail.com>

* change influxdb docker image version.

Signed-off-by: aryan <aryangodara03@gmail.com>

* go mod and vendor fixing

Signed-off-by: aryan <aryangodara03@gmail.com>

* Upgrade InfluxDB from 1.x to 2.x

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influx DB configuration updated

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Connection to InfluxDBv2

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Token cannot be created

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Connected to InfluxDB2

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Connected to InfluxDB2

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* InfluxDB v2 Consumer Implementation

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* quickfix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influxdb-Writer Unit Tests Update

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Consumer Update

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* InfluxDB Writer Tests Implemented

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* InfluxDB Connection Check

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolving Remarks

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved consumer-test remark

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* consumer-test slow working version

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* reader changes

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Consumer tests time issue fixed

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolved Reviews

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Readers Initial Setup

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* consumer json fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* readers simple version fix

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influxdb Reader Parsers

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influxdb Reader Parsers

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Influxdb Reader Parsers

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Bugfix and resolves comments.

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* one test fails

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* solved last page read

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* writers future time problem fixed

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* weird

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* weird

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Tests Passes

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Resolve Semaphore Issues

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* UUID comment on consumer tests resolved

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Inclusive from and Exclusive to

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* Inclusive from and Exclusive to

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* 1 second limits

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* 1 second limits

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved review

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved review

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved review

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved review

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* fixed json time

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* fixed CI error

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved request

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved request

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved requests

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* removed blank line

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* resolved comment

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* deleted unnecessary string builder

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>

* initial commit

Signed-off-by: aryan <aryangodara03@gmail.com>

* change influxdb docker image version.

Signed-off-by: aryan <aryangodara03@gmail.com>

* go mod and vendor fixing

Signed-off-by: aryan <aryangodara03@gmail.com>

* go mod fixing

Signed-off-by: aryan <aryangodara03@gmail.com>

* make tests pass locally, fix errors

Signed-off-by: aryan <aryangodara03@gmail.com>

* rem unsused variables/consts

Signed-off-by: aryan <aryangodara03@gmail.com>

* go mod tidy vendor

Signed-off-by: aryan <aryangodara03@gmail.com>

* add env var and data types

Signed-off-by: aryan <aryangodara03@gmail.com>

* update influxdb version to latest (2.3 to 2.12)

Signed-off-by: aryan <aryangodara03@gmail.com>

* change time precision for message tests

Signed-off-by: aryan <aryangodara03@gmail.com>

* renamed influxdb2 to influxdata

Signed-off-by: aryan <aryangodara03@gmail.com>

* address remarks on PR

Signed-off-by: aryan <aryangodara03@gmail.com>

* update influxbd according to latest mf commit

Signed-off-by: aryan <aryangodara03@gmail.com>

* temp commit, rem before pushing

Signed-off-by: aryan <aryangodara03@gmail.com>

* update main files and cassandra-reader messages_tests

Signed-off-by: aryan <aryangodara03@gmail.com>

* fix name of logger while importing

Signed-off-by: aryan <aryangodara03@gmail.com>

* remove unnecessary print lines

Signed-off-by: aryan <aryangodara03@gmail.com>

* correct env var name

Signed-off-by: aryan <aryangodara03@gmail.com>

* change to async consume

Signed-off-by: aryan <aryangodara03@gmail.com>

* add option to switch bw sync and async

Signed-off-by: aryan <aryangodara03@gmail.com>

* test for both async and sync

Signed-off-by: aryan <aryangodara03@gmail.com>

* update consumer and add writeAPIs to config

Signed-off-by: aryan <aryangodara03@gmail.com>

* revert back to sync consuming

Signed-off-by: aryan <aryangodara03@gmail.com>

* temp fix for default timeout value

Signed-off-by: aryan <aryangodara03@gmail.com>

* set default timeout in config.

Signed-off-by: aryan <aryangodara03@gmail.com>

* remove unwanted env vars, add required ones.

Signed-off-by: aryan <aryangodara03@gmail.com>

* rem unused username password from config

Signed-off-by: aryan <aryangodara03@gmail.com>

* update readme, env vars, and remove grafana

Signed-off-by: aryan <aryangodara03@gmail.com>

* update readme

Signed-off-by: aryan <aryangodara03@gmail.com>

* fix typo

Signed-off-by: aryan <aryangodara03@gmail.com>

* update readme description.

Signed-off-by: aryan <aryangodara03@gmail.com>

* fix more typos.

Signed-off-by: aryan <aryangodara03@gmail.com>

* add link to official docs to readme.

Signed-off-by: aryan <aryangodara03@gmail.com>

---------

Signed-off-by: fatih <fatihdurmaz@sabanciuniv.edu>
Signed-off-by: aryan <aryangodara03@gmail.com>
Co-authored-by: fatih <fatihdurmaz@sabanciuniv.edu>
Co-authored-by: Dušan Borovčanin <dusan.borovcanin@mainflux.com>
2023-03-16 02:36:14 +01:00

512 lines
19 KiB
Go

// Copyright 2020-2021 InfluxData, Inc. All rights reserved.
// Use of this source code is governed by MIT
// license that can be found in the LICENSE file.
package api
import (
"context"
"fmt"
"time"
"github.com/influxdata/influxdb-client-go/v2/domain"
)
// TaskFilter defines filtering options for FindTasks functions.
type TaskFilter struct {
// Returns task with a specific name
Name string
// Filter tasks to a specific organization name.
OrgName string
// Filter tasks to a specific organization ID.
OrgID string
// Filter tasks to a specific user ID.
User string
// Filter tasks by a status--"inactive" or "active".
Status domain.TaskStatusType
// Return tasks after a specified ID.
After string
// The number of tasks to return.
// Default 100, minimum: 1, maximum 500
Limit int
}
// RunFilter defines filtering options for FindRun* functions.
type RunFilter struct {
// Return runs after a specified ID.
After string
// The number of runs to return.
// Default 100, minimum 1, maximum 500.
Limit int
// Filter runs to those scheduled before this time.
BeforeTime time.Time
// Filter runs to those scheduled after this time.
AfterTime time.Time
}
// TasksAPI provides methods for managing tasks and task runs in an InfluxDB server.
type TasksAPI interface {
// FindTasks retrieves tasks according to the filter. More fields can be applied. Filter can be nil.
FindTasks(ctx context.Context, filter *TaskFilter) ([]domain.Task, error)
// GetTask retrieves a refreshed instance of task.
GetTask(ctx context.Context, task *domain.Task) (*domain.Task, error)
// GetTaskByID retrieves a task found using taskID.
GetTaskByID(ctx context.Context, taskID string) (*domain.Task, error)
// CreateTask creates a new task according the task object.
// It copies OrgId, Name, Description, Flux, Status and Every or Cron properties. Every and Cron are mutually exclusive.
// Every has higher priority.
CreateTask(ctx context.Context, task *domain.Task) (*domain.Task, error)
// CreateTaskWithEvery creates a new task with the name, flux script and every repetition setting, in the org orgID.
// Every means duration values.
CreateTaskWithEvery(ctx context.Context, name, flux, every, orgID string) (*domain.Task, error)
// CreateTaskWithCron creates a new task with the name, flux script and cron repetition setting, in the org orgID
// Cron holds cron-like setting, e.g. once an hour at beginning of the hour "0 * * * *".
CreateTaskWithCron(ctx context.Context, name, flux, cron, orgID string) (*domain.Task, error)
// CreateTaskByFlux creates a new task with complete definition in flux script, in the org orgID
CreateTaskByFlux(ctx context.Context, flux, orgID string) (*domain.Task, error)
// UpdateTask updates a task.
// It copies Description, Flux, Status, Offset and Every or Cron properties. Every and Cron are mutually exclusive.
// Every has higher priority.
UpdateTask(ctx context.Context, task *domain.Task) (*domain.Task, error)
// DeleteTask deletes a task.
DeleteTask(ctx context.Context, task *domain.Task) error
// DeleteTaskWithID deletes a task with taskID.
DeleteTaskWithID(ctx context.Context, taskID string) error
// FindMembers retrieves members of a task.
FindMembers(ctx context.Context, task *domain.Task) ([]domain.ResourceMember, error)
// FindMembersWithID retrieves members of a task with taskID.
FindMembersWithID(ctx context.Context, taskID string) ([]domain.ResourceMember, error)
// AddMember adds a member to a task.
AddMember(ctx context.Context, task *domain.Task, user *domain.User) (*domain.ResourceMember, error)
// AddMemberWithID adds a member with id memberID to a task with taskID.
AddMemberWithID(ctx context.Context, taskID, memberID string) (*domain.ResourceMember, error)
// RemoveMember removes a member from a task.
RemoveMember(ctx context.Context, task *domain.Task, user *domain.User) error
// RemoveMemberWithID removes a member with id memberID from a task with taskID.
RemoveMemberWithID(ctx context.Context, taskID, memberID string) error
// FindOwners retrieves owners of a task.
FindOwners(ctx context.Context, task *domain.Task) ([]domain.ResourceOwner, error)
// FindOwnersWithID retrieves owners of a task with taskID.
FindOwnersWithID(ctx context.Context, taskID string) ([]domain.ResourceOwner, error)
// AddOwner adds an owner to a task.
AddOwner(ctx context.Context, task *domain.Task, user *domain.User) (*domain.ResourceOwner, error)
// AddOwnerWithID adds an owner with id memberID to a task with taskID.
AddOwnerWithID(ctx context.Context, taskID, memberID string) (*domain.ResourceOwner, error)
// RemoveOwner removes an owner from a task.
RemoveOwner(ctx context.Context, task *domain.Task, user *domain.User) error
// RemoveOwnerWithID removes a member with id memberID from a task with taskID.
RemoveOwnerWithID(ctx context.Context, taskID, memberID string) error
// FindRuns retrieves a task runs according the filter. More fields can be applied. Filter can be nil.
FindRuns(ctx context.Context, task *domain.Task, filter *RunFilter) ([]domain.Run, error)
// FindRunsWithID retrieves runs of a task with taskID according the filter. More fields can be applied. Filter can be nil.
FindRunsWithID(ctx context.Context, taskID string, filter *RunFilter) ([]domain.Run, error)
// GetRun retrieves a refreshed instance if a task run.
GetRun(ctx context.Context, run *domain.Run) (*domain.Run, error)
// GetRunByID retrieves a specific task run by taskID and runID
GetRunByID(ctx context.Context, taskID, runID string) (*domain.Run, error)
// FindRunLogs return all log events for a task run.
FindRunLogs(ctx context.Context, run *domain.Run) ([]domain.LogEvent, error)
// FindRunLogsWithID return all log events for a run with runID of a task with taskID.
FindRunLogsWithID(ctx context.Context, taskID, runID string) ([]domain.LogEvent, error)
// RunManually manually start a run of the task now, overriding the current schedule.
RunManually(ctx context.Context, task *domain.Task) (*domain.Run, error)
// RunManuallyWithID manually start a run of a task with taskID now, overriding the current schedule.
RunManuallyWithID(ctx context.Context, taskID string) (*domain.Run, error)
// RetryRun retry a task run.
RetryRun(ctx context.Context, run *domain.Run) (*domain.Run, error)
// RetryRunWithID retry a run with runID of a task with taskID.
RetryRunWithID(ctx context.Context, taskID, runID string) (*domain.Run, error)
// CancelRun cancels a running task.
CancelRun(ctx context.Context, run *domain.Run) error
// CancelRunWithID cancels a running task.
CancelRunWithID(ctx context.Context, taskID, runID string) error
// FindLogs retrieves all logs for a task.
FindLogs(ctx context.Context, task *domain.Task) ([]domain.LogEvent, error)
// FindLogsWithID retrieves all logs for a task with taskID.
FindLogsWithID(ctx context.Context, taskID string) ([]domain.LogEvent, error)
// FindLabels retrieves labels of a task.
FindLabels(ctx context.Context, task *domain.Task) ([]domain.Label, error)
// FindLabelsWithID retrieves labels of a task with taskID.
FindLabelsWithID(ctx context.Context, taskID string) ([]domain.Label, error)
// AddLabel adds a label to a task.
AddLabel(ctx context.Context, task *domain.Task, label *domain.Label) (*domain.Label, error)
// AddLabelWithID adds a label with id labelID to a task with taskID.
AddLabelWithID(ctx context.Context, taskID, labelID string) (*domain.Label, error)
// RemoveLabel removes a label from a task.
RemoveLabel(ctx context.Context, task *domain.Task, label *domain.Label) error
// RemoveLabelWithID removes a label with id labelID from a task with taskID.
RemoveLabelWithID(ctx context.Context, taskID, labelID string) error
}
// tasksAPI implements TasksAPI
type tasksAPI struct {
apiClient *domain.Client
}
// NewTasksAPI creates new instance of TasksAPI
func NewTasksAPI(apiClient *domain.Client) TasksAPI {
return &tasksAPI{
apiClient: apiClient,
}
}
func (t *tasksAPI) FindTasks(ctx context.Context, filter *TaskFilter) ([]domain.Task, error) {
params := &domain.GetTasksParams{}
if filter != nil {
if filter.Name != "" {
params.Name = &filter.Name
}
if filter.User != "" {
params.User = &filter.User
}
if filter.OrgID != "" {
params.OrgID = &filter.OrgID
}
if filter.OrgName != "" {
params.Org = &filter.OrgName
}
if filter.Status != "" {
status := domain.GetTasksParamsStatus(filter.Status)
params.Status = &status
}
if filter.Limit > 0 {
params.Limit = &filter.Limit
}
if filter.After != "" {
params.After = &filter.After
}
}
response, err := t.apiClient.GetTasks(ctx, params)
if err != nil {
return nil, err
}
return *response.Tasks, nil
}
func (t *tasksAPI) GetTask(ctx context.Context, task *domain.Task) (*domain.Task, error) {
return t.GetTaskByID(ctx, task.Id)
}
func (t *tasksAPI) GetTaskByID(ctx context.Context, taskID string) (*domain.Task, error) {
params := &domain.GetTasksIDAllParams{
TaskID: taskID,
}
return t.apiClient.GetTasksID(ctx, params)
}
func (t *tasksAPI) createTask(ctx context.Context, taskReq *domain.TaskCreateRequest) (*domain.Task, error) {
params := &domain.PostTasksAllParams{
Body: domain.PostTasksJSONRequestBody(*taskReq),
}
return t.apiClient.PostTasks(ctx, params)
}
func createTaskReqDetailed(name, flux string, every, cron *string, orgID string) *domain.TaskCreateRequest {
repetition := ""
if every != nil {
repetition = fmt.Sprintf("every: %s", *every)
} else if cron != nil {
repetition = fmt.Sprintf(`cron: "%s"`, *cron)
}
fullFlux := fmt.Sprintf(`option task = { name: "%s", %s } %s`, name, repetition, flux)
return createTaskReq(fullFlux, orgID)
}
func createTaskReq(flux string, orgID string) *domain.TaskCreateRequest {
status := domain.TaskStatusTypeActive
taskReq := &domain.TaskCreateRequest{
Flux: flux,
Status: &status,
OrgID: &orgID,
}
return taskReq
}
func (t *tasksAPI) CreateTask(ctx context.Context, task *domain.Task) (*domain.Task, error) {
taskReq := createTaskReqDetailed(task.Name, task.Flux, task.Every, task.Cron, task.OrgID)
taskReq.Description = task.Description
taskReq.Status = task.Status
return t.createTask(ctx, taskReq)
}
func (t *tasksAPI) CreateTaskWithEvery(ctx context.Context, name, flux, every, orgID string) (*domain.Task, error) {
taskReq := createTaskReqDetailed(name, flux, &every, nil, orgID)
return t.createTask(ctx, taskReq)
}
func (t *tasksAPI) CreateTaskWithCron(ctx context.Context, name, flux, cron, orgID string) (*domain.Task, error) {
taskReq := createTaskReqDetailed(name, flux, nil, &cron, orgID)
return t.createTask(ctx, taskReq)
}
func (t *tasksAPI) CreateTaskByFlux(ctx context.Context, flux, orgID string) (*domain.Task, error) {
taskReq := createTaskReq(flux, orgID)
return t.createTask(ctx, taskReq)
}
func (t *tasksAPI) DeleteTask(ctx context.Context, task *domain.Task) error {
return t.DeleteTaskWithID(ctx, task.Id)
}
func (t *tasksAPI) DeleteTaskWithID(ctx context.Context, taskID string) error {
params := &domain.DeleteTasksIDAllParams{
TaskID: taskID,
}
return t.apiClient.DeleteTasksID(ctx, params)
}
func (t *tasksAPI) UpdateTask(ctx context.Context, task *domain.Task) (*domain.Task, error) {
params := &domain.PatchTasksIDAllParams{
Body: domain.PatchTasksIDJSONRequestBody(domain.TaskUpdateRequest{
Description: task.Description,
Flux: &task.Flux,
Name: &task.Name,
Offset: task.Offset,
Status: task.Status,
}),
TaskID: task.Id,
}
if task.Every != nil {
params.Body.Every = task.Every
} else {
params.Body.Cron = task.Cron
}
return t.apiClient.PatchTasksID(ctx, params)
}
func (t *tasksAPI) FindMembers(ctx context.Context, task *domain.Task) ([]domain.ResourceMember, error) {
return t.FindMembersWithID(ctx, task.Id)
}
func (t *tasksAPI) FindMembersWithID(ctx context.Context, taskID string) ([]domain.ResourceMember, error) {
params := &domain.GetTasksIDMembersAllParams{
TaskID: taskID,
}
response, err := t.apiClient.GetTasksIDMembers(ctx, params)
if err != nil {
return nil, err
}
return *response.Users, nil
}
func (t *tasksAPI) AddMember(ctx context.Context, task *domain.Task, user *domain.User) (*domain.ResourceMember, error) {
return t.AddMemberWithID(ctx, task.Id, *user.Id)
}
func (t *tasksAPI) AddMemberWithID(ctx context.Context, taskID, memberID string) (*domain.ResourceMember, error) {
params := &domain.PostTasksIDMembersAllParams{
TaskID: taskID,
Body: domain.PostTasksIDMembersJSONRequestBody{Id: memberID},
}
return t.apiClient.PostTasksIDMembers(ctx, params)
}
func (t *tasksAPI) RemoveMember(ctx context.Context, task *domain.Task, user *domain.User) error {
return t.RemoveMemberWithID(ctx, task.Id, *user.Id)
}
func (t *tasksAPI) RemoveMemberWithID(ctx context.Context, taskID, memberID string) error {
params := &domain.DeleteTasksIDMembersIDAllParams{
TaskID: taskID,
UserID: memberID,
}
return t.apiClient.DeleteTasksIDMembersID(ctx, params)
}
func (t *tasksAPI) FindOwners(ctx context.Context, task *domain.Task) ([]domain.ResourceOwner, error) {
return t.FindOwnersWithID(ctx, task.Id)
}
func (t *tasksAPI) FindOwnersWithID(ctx context.Context, taskID string) ([]domain.ResourceOwner, error) {
params := &domain.GetTasksIDOwnersAllParams{
TaskID: taskID,
}
response, err := t.apiClient.GetTasksIDOwners(ctx, params)
if err != nil {
return nil, err
}
return *response.Users, nil
}
func (t *tasksAPI) AddOwner(ctx context.Context, task *domain.Task, user *domain.User) (*domain.ResourceOwner, error) {
return t.AddOwnerWithID(ctx, task.Id, *user.Id)
}
func (t *tasksAPI) AddOwnerWithID(ctx context.Context, taskID, memberID string) (*domain.ResourceOwner, error) {
params := &domain.PostTasksIDOwnersAllParams{
Body: domain.PostTasksIDOwnersJSONRequestBody{Id: memberID},
TaskID: taskID,
}
return t.apiClient.PostTasksIDOwners(ctx, params)
}
func (t *tasksAPI) RemoveOwner(ctx context.Context, task *domain.Task, user *domain.User) error {
return t.RemoveOwnerWithID(ctx, task.Id, *user.Id)
}
func (t *tasksAPI) RemoveOwnerWithID(ctx context.Context, taskID, memberID string) error {
params := &domain.DeleteTasksIDOwnersIDAllParams{
TaskID: taskID,
UserID: memberID,
}
return t.apiClient.DeleteTasksIDOwnersID(ctx, params)
}
func (t *tasksAPI) FindRuns(ctx context.Context, task *domain.Task, filter *RunFilter) ([]domain.Run, error) {
return t.FindRunsWithID(ctx, task.Id, filter)
}
func (t *tasksAPI) FindRunsWithID(ctx context.Context, taskID string, filter *RunFilter) ([]domain.Run, error) {
params := &domain.GetTasksIDRunsAllParams{TaskID: taskID}
if filter != nil {
if !filter.AfterTime.IsZero() {
params.AfterTime = &filter.AfterTime
}
if !filter.BeforeTime.IsZero() {
params.BeforeTime = &filter.BeforeTime
}
if filter.Limit > 0 {
params.Limit = &filter.Limit
}
if filter.After != "" {
params.After = &filter.After
}
}
response, err := t.apiClient.GetTasksIDRuns(ctx, params)
if err != nil {
return nil, err
}
return *response.Runs, nil
}
func (t *tasksAPI) GetRun(ctx context.Context, run *domain.Run) (*domain.Run, error) {
return t.GetRunByID(ctx, *run.TaskID, *run.Id)
}
func (t *tasksAPI) GetRunByID(ctx context.Context, taskID, runID string) (*domain.Run, error) {
params := &domain.GetTasksIDRunsIDAllParams{
TaskID: taskID,
RunID: runID,
}
return t.apiClient.GetTasksIDRunsID(ctx, params)
}
func (t *tasksAPI) FindRunLogs(ctx context.Context, run *domain.Run) ([]domain.LogEvent, error) {
return t.FindRunLogsWithID(ctx, *run.TaskID, *run.Id)
}
func (t *tasksAPI) FindRunLogsWithID(ctx context.Context, taskID, runID string) ([]domain.LogEvent, error) {
params := &domain.GetTasksIDRunsIDLogsAllParams{
TaskID: taskID,
RunID: runID,
}
response, err := t.apiClient.GetTasksIDRunsIDLogs(ctx, params)
if err != nil {
return nil, err
}
if response.Events == nil {
return nil, fmt.Errorf("logs for task '%s' run '%s 'not found", taskID, runID)
}
return *response.Events, nil
}
func (t *tasksAPI) RunManually(ctx context.Context, task *domain.Task) (*domain.Run, error) {
return t.RunManuallyWithID(ctx, task.Id)
}
func (t *tasksAPI) RunManuallyWithID(ctx context.Context, taskID string) (*domain.Run, error) {
params := &domain.PostTasksIDRunsAllParams{
TaskID: taskID,
}
return t.apiClient.PostTasksIDRuns(ctx, params)
}
func (t *tasksAPI) RetryRun(ctx context.Context, run *domain.Run) (*domain.Run, error) {
return t.RetryRunWithID(ctx, *run.TaskID, *run.Id)
}
func (t *tasksAPI) RetryRunWithID(ctx context.Context, taskID, runID string) (*domain.Run, error) {
params := &domain.PostTasksIDRunsIDRetryAllParams{
TaskID: taskID,
RunID: runID,
}
return t.apiClient.PostTasksIDRunsIDRetry(ctx, params)
}
func (t *tasksAPI) CancelRun(ctx context.Context, run *domain.Run) error {
return t.CancelRunWithID(ctx, *run.TaskID, *run.Id)
}
func (t *tasksAPI) CancelRunWithID(ctx context.Context, taskID, runID string) error {
params := &domain.DeleteTasksIDRunsIDAllParams{
TaskID: taskID,
RunID: runID,
}
return t.apiClient.DeleteTasksIDRunsID(ctx, params)
}
func (t *tasksAPI) FindLogs(ctx context.Context, task *domain.Task) ([]domain.LogEvent, error) {
return t.FindLogsWithID(ctx, task.Id)
}
func (t *tasksAPI) FindLogsWithID(ctx context.Context, taskID string) ([]domain.LogEvent, error) {
params := &domain.GetTasksIDLogsAllParams{
TaskID: taskID,
}
response, err := t.apiClient.GetTasksIDLogs(ctx, params)
if err != nil {
return nil, err
}
if response.Events == nil {
return nil, fmt.Errorf("logs for task '%s' not found", taskID)
}
return *response.Events, nil
}
func (t *tasksAPI) FindLabels(ctx context.Context, task *domain.Task) ([]domain.Label, error) {
return t.FindLabelsWithID(ctx, task.Id)
}
func (t *tasksAPI) FindLabelsWithID(ctx context.Context, taskID string) ([]domain.Label, error) {
params := &domain.GetTasksIDLabelsAllParams{
TaskID: taskID,
}
response, err := t.apiClient.GetTasksIDLabels(ctx, params)
if err != nil {
return nil, err
}
if response.Labels == nil {
return nil, fmt.Errorf("lables for task '%s' not found", taskID)
}
return *response.Labels, nil
}
func (t *tasksAPI) AddLabel(ctx context.Context, task *domain.Task, label *domain.Label) (*domain.Label, error) {
return t.AddLabelWithID(ctx, task.Id, *label.Id)
}
func (t *tasksAPI) AddLabelWithID(ctx context.Context, taskID, labelID string) (*domain.Label, error) {
params := &domain.PostTasksIDLabelsAllParams{
Body: domain.PostTasksIDLabelsJSONRequestBody{LabelID: &labelID},
TaskID: taskID,
}
response, err := t.apiClient.PostTasksIDLabels(ctx, params)
if err != nil {
return nil, err
}
return response.Label, nil
}
func (t *tasksAPI) RemoveLabel(ctx context.Context, task *domain.Task, label *domain.Label) error {
return t.RemoveLabelWithID(ctx, task.Id, *label.Id)
}
func (t *tasksAPI) RemoveLabelWithID(ctx context.Context, taskID, labelID string) error {
params := &domain.DeleteTasksIDLabelsIDAllParams{
TaskID: taskID,
LabelID: labelID,
}
return t.apiClient.DeleteTasksIDLabelsID(ctx, params)
}