| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- package client
- import (
- "github.com/pkg/errors"
- "net/http"
- )
- const (
- createWorkflowRelativeUrl = "/api/v1/workflows/{namespace}"
- deleteWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}"
- getWorkflowsInNamespaceRelativeUrl = "/api/v1/workflows/{namespace}"
- getWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}"
- lintWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/lint"
- submitWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}/submit"
- resubmitWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}/resubmit"
- resumeWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}/resume"
- retryWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}/retry"
- setWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}/set"
- stopWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}/stop"
- suspendWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}/suspend"
- terminateWorkflowRelativeUrl = "/api/v1/workflows/{namespace}/{name}/terminate"
- getEventsStreamRelativeUrl = "/api/v1/stream/events/{namespace}"
- getWorkflowEventsStreamRelativeUrl = "/api/v1/workflow-events/{namespace}"
- )
- type CreateWorkflowParams struct {
- Namespace string
- WorkflowDefinition map[string]any
- }
- func (c *Client) CreateWorkflow(params CreateWorkflowParams) (string, error) {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": params.Namespace,
- }).
- SetBody(map[string]any{
- "namespace": params.Namespace,
- "workflow": params.WorkflowDefinition,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Post(createWorkflowRelativeUrl)
- if err != nil {
- return "", errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- metadata, ok := responseMap["metadata"]
- if !ok {
- return "", errors.New("metadata为空")
- }
- metadataMap, ok := metadata.(map[string]any)
- if !ok {
- return "", errors.New("metadata不是map")
- }
- workflowName, ok := metadataMap["name"]
- if !ok {
- return "", errors.New("metadata中没有工作流名称")
- }
- workflowNameStr, ok := workflowName.(string)
- if !ok {
- return "", errors.New("工作流名称不是字符串")
- }
- return workflowNameStr, nil
- case http.StatusConflict:
- return "", errors.New("工作流已存在")
- default:
- message, ok := responseMap["message"]
- if !ok {
- return "", errors.Errorf("%v", resp.Status())
- }
- return "", errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- type DeleteWorkflowParams struct {
- Namespace string
- Name string
- }
- func (c *Client) DeleteWorkflow(params DeleteWorkflowParams) error {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": params.Namespace,
- "name": params.Name,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Delete(deleteWorkflowRelativeUrl)
- if err != nil {
- return errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- return nil
- default:
- message, ok := responseMap["message"]
- if !ok {
- return errors.Errorf("%v", resp.Status())
- }
- return errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- type GetWorkflowsInNamespaceParams struct {
- Namespace string
- }
- func (c *Client) GetWorkflowsInNamespace(params GetWorkflowsInNamespaceParams) ([]map[string]any, error) {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": params.Namespace,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Get(getWorkflowsInNamespaceRelativeUrl)
- if err != nil {
- return nil, errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- itemsValue, ok := responseMap["items"]
- if !ok {
- return nil, errors.New("没有获取到items参数")
- }
- items, ok := itemsValue.([]any)
- if !ok {
- return nil, errors.New("items不是slice")
- }
- templateDefinitions := make([]map[string]any, len(items))
- for i, item := range items {
- templateDefinition, ok := item.(map[string]any)
- if !ok {
- return nil, errors.New("item无法转换为map[string]any")
- }
- templateDefinitions[i] = templateDefinition
- }
- return templateDefinitions, nil
- default:
- message, ok := responseMap["message"]
- if !ok {
- return nil, errors.Errorf("%v", resp.Status())
- }
- return nil, errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- type GetWorkflowParams struct {
- Namespace string
- Name string
- }
- func (c *Client) GetWorkflow(params GetWorkflowParams) (map[string]any, error) {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": params.Namespace,
- "name": params.Name,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Get(getWorkflowRelativeUrl)
- if err != nil {
- return nil, errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- return responseMap, nil
- default:
- message, ok := responseMap["message"]
- if !ok {
- return nil, errors.Errorf("%v", resp.Status())
- }
- return nil, errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- type LintWorkflowParams struct {
- Namespace string
- WorkflowDefinition map[string]any
- }
- func (c *Client) LintWorkflow(params LintWorkflowParams) error {
- responseMap := make(map[string]any)
- resp, err := c.restyClient.R().
- SetHeader("Content-Type", "application/json").
- SetAuthToken(c.token).
- SetPathParams(map[string]string{
- "namespace": params.Namespace,
- }).
- SetBody(map[string]any{
- "namespace": params.Namespace,
- "workflow": params.WorkflowDefinition,
- }).
- SetResult(&responseMap).
- SetError(&responseMap).
- Post(lintWorkflowRelativeUrl)
- if err != nil {
- return errors.New(err.Error())
- }
- switch resp.StatusCode() {
- case http.StatusOK:
- return nil
- case http.StatusConflict:
- return errors.New("工作流已存在")
- default:
- message, ok := responseMap["message"]
- if !ok {
- return errors.Errorf("%v", resp.Status())
- }
- return errors.Errorf("%v, %v", resp.Status(), message)
- }
- }
- type SubmitWorkflowParams struct {
- Namespace string
- Name string
- }
- func (c *Client) SubmitWorkflow(params SubmitWorkflowParams) error {
- return nil
- }
- type ResubmitWorkflowParams struct {
- Namespace string
- Name string
- ResubmitParametersJson string
- }
- func (c *Client) ResubmitWorkflow(params ResubmitWorkflowParams) error {
- return nil
- }
- type ResumeWorkflowParams struct {
- Namespace string
- Name string
- }
- func (c *Client) ResumeWorkflow(params ResumeWorkflowParams) error {
- return nil
- }
- type RetryWorkflowParams struct {
- Namespace string
- Name string
- RetryParametersJson string
- RetryOnSuccessWorkflowNodeFieldSelector string
- }
- func (c *Client) RetryWorkflow(params RetryWorkflowParams) error {
- return nil
- }
- type SetWorkflowParams struct {
- Namespace string
- Name string
- NodeFieldSelector string
- Message string
- Phase string
- OutputParametersJson string
- }
- func (c *Client) SetWorkflow(params SetWorkflowParams) error {
- return nil
- }
- type StopWorkflowParams struct {
- Namespace string
- Name string
- NodeFieldSelector string
- Message string
- }
- func (c *Client) StopWorkflow(params StopWorkflowParams) error {
- return nil
- }
- type SuspendWorkflowParams struct {
- Namespace string
- Name string
- }
- func (c *Client) SuspendWorkflow(params SuspendWorkflowParams) error {
- return nil
- }
- type TerminalWorkflowParams struct {
- Namespace string
- Name string
- }
- func (c *Client) TerminalWorkflow(params TerminalWorkflowParams) error {
- return nil
- }
- type EventCallback func(event map[string]any, eventErr error) error
- type GetWorkflowEventsStreamParams struct {
- Namespace string
- Name string
- }
- func (c *Client) GetWorkflowEventsStream(params GetWorkflowEventsStreamParams, callback EventCallback) error {
- return nil
- }
|