pkg/task/client.go

114 lines
2.5 KiB
Go

package task
import (
"context"
"fmt"
"strconv"
"git.ifooth.com/common/pkg/rest"
"git.ifooth.com/common/pkg/rest/transport"
)
// Client 任务管理客户端
type Client struct {
host string
}
// NewClient 创建任务管理客户端
func NewClient(host string) *Client {
return &Client{
host: host,
}
}
// ListTask 获取任务列表
func (c *Client) ListTask(ctx context.Context, req *ListReq) (*rest.PaginationResp[Task], error) {
query := map[string]string{
"taskType": req.TaskType,
"taskName": req.TaskName,
"taskIndex": req.TaskIndex,
"currentStep": req.CurrentStep,
"status": req.Status,
"creator": req.Creator,
"offset": strconv.Itoa(req.Offset),
"limit": strconv.Itoa(req.Limit),
}
resp, err := rest.R[rest.Resp[rest.PaginationResp[Task]]]().
With(transport.CurlLog()).
With(transport.HTTPIsSuccess).
SetQueryParams(query).
SetContext(ctx).
Get("%s/api/v1/task/list", c.host)
if err != nil {
return nil, err
}
if resp.Code != 0 {
return nil, fmt.Errorf("list task failed, code: %d, message: %s", resp.Code, resp.Message)
}
return &resp.Data, nil
}
// GetTaskStatus 获取任务状态
func (c *Client) GetTaskStatus(ctx context.Context, req *IDReq) (*Task, error) {
resp, err := rest.R[rest.Resp[Task]]().
With(transport.CurlLog()).
With(transport.HTTPIsSuccess).
SetQueryParam("taskID", req.TaskID).
SetContext(ctx).
Get("%s/api/v1/task/status", c.host)
if err != nil {
return nil, err
}
if resp.Code != 0 {
return nil, fmt.Errorf("get task status failed, code: %d, message: %s", resp.Code, resp.Message)
}
return &resp.Data, nil
}
// RetryTask 重试任务
func (c *Client) RetryTask(ctx context.Context, req *IDReq) error {
resp, err := rest.R[rest.Resp[rest.EmptyResp]]().
With(transport.CurlLog()).
With(transport.HTTPIsSuccess).
SetBody(req).
SetContext(ctx).
Post("%s/api/v1/task/retry", c.host)
if err != nil {
return err
}
if resp.Code != 0 {
return fmt.Errorf("retry task failed, code: %d, message: %s", resp.Code, resp.Message)
}
return err
}
// RevokeTask 撤回任务
func (c *Client) RevokeTask(ctx context.Context, req *IDReq) error {
resp, err := rest.R[rest.Resp[rest.EmptyResp]]().
With(transport.CurlLog()).
With(transport.HTTPIsSuccess).
SetBody(req).
SetContext(ctx).
Post("%s/api/v1/task/revoke", c.host)
if err != nil {
return err
}
if resp.Code != 0 {
return fmt.Errorf("revoke task failed, code: %d, message: %s", resp.Code, resp.Message)
}
return err
}