Files
orbit/sdk/go/schedules.go

84 lines
2.9 KiB
Go

package orbit
import (
"context"
"errors"
"net/url"
"strconv"
)
// CreateSchedule 使用稳定幂等键受理一个计划;回执不代表任何一次触发已经执行。
func (c *Client) CreateSchedule(ctx context.Context, key string, in CreateScheduleRequest) (ScheduleResult, error) {
var out ScheduleResult
err := c.call(ctx, "POST", "/v1/schedules", key, in, &out)
return out, err
}
func (c *Client) GetSchedule(ctx context.Context, id string) (Schedule, error) {
var out Schedule
if !validID(id) {
return out, errors.New("invalid schedule id")
}
err := c.call(ctx, "GET", "/v1/schedules/"+id, "", nil, &out)
return out, err
}
// PublishSchedule 发布完整新版本。保留原 key/revision 重报,不能重置原版本的积压身份。
func (c *Client) PublishSchedule(ctx context.Context, id, key string, in PublishScheduleRequest) (ScheduleResult, error) {
var out ScheduleResult
if !validID(id) {
return out, errors.New("invalid schedule id")
}
err := c.call(ctx, "PATCH", "/v1/schedules/"+id, key, in, &out)
return out, err
}
func (c *Client) PauseSchedule(ctx context.Context, id, key string, in ControlScheduleRequest) (ScheduleResult, error) {
return c.controlSchedule(ctx, id, key, in, "pause")
}
func (c *Client) ResumeSchedule(ctx context.Context, id, key string, in ControlScheduleRequest) (ScheduleResult, error) {
return c.controlSchedule(ctx, id, key, in, "resume")
}
func (c *Client) controlSchedule(ctx context.Context, id, key string, in ControlScheduleRequest, action string) (ScheduleResult, error) {
var out ScheduleResult
if !validID(id) {
return out, errors.New("invalid schedule id")
}
err := c.call(ctx, "POST", "/v1/schedules/"+id+":"+action, key, in, &out)
return out, err
}
func (c *Client) ListSchedules(ctx context.Context, queue string, in SchedulePageRequest) (SchedulePage, error) {
var out SchedulePage
if !validID(queue) {
return out, errors.New("invalid queue id")
}
q := scheduleQuery(in)
q.Set("queue_id", queue)
err := c.call(ctx, "GET", "/v1/schedules?"+q.Encode(), "", nil, &out)
return out, err
}
func (c *Client) GetScheduleVersion(ctx context.Context, id string, version uint64) (ScheduleVersion, error) {
var out ScheduleVersion
if !validID(id) || version == 0 {
return out, errors.New("invalid schedule id or version")
}
err := c.call(ctx, "GET", "/v1/schedules/"+id+"/versions/"+strconv.FormatUint(version, 10), "", nil, &out)
return out, err
}
func (c *Client) ListScheduleOccurrences(ctx context.Context, id string, in SchedulePageRequest) (ScheduleOccurrencePage, error) {
var out ScheduleOccurrencePage
if !validID(id) {
return out, errors.New("invalid schedule id")
}
err := c.call(ctx, "GET", "/v1/schedules/"+id+"/occurrences?"+scheduleQuery(in).Encode(), "", nil, &out)
return out, err
}
func scheduleQuery(in SchedulePageRequest) url.Values {
q := url.Values{}
if in.Limit != 0 {
q.Set("limit", strconv.Itoa(in.Limit))
}
if in.Cursor != "" {
q.Set("cursor", in.Cursor)
}
return q
}