96 lines
2.6 KiB
Go
96 lines
2.6 KiB
Go
package orbit
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"net/url"
|
|
"strconv"
|
|
)
|
|
|
|
func historyResourcePath(ids ...string) (string, error) {
|
|
for _, id := range ids {
|
|
if !validID(id) {
|
|
return "", errors.New("invalid history resource id")
|
|
}
|
|
}
|
|
path := "/v1/tasks/" + ids[0] + "/attempts"
|
|
if len(ids) > 1 {
|
|
path += "/" + ids[1] + "/evidence"
|
|
}
|
|
if len(ids) > 2 {
|
|
path += "/" + ids[2]
|
|
}
|
|
return path, nil
|
|
}
|
|
func historyPageQuery(in HistoryPageRequest) (string, error) {
|
|
if in.Limit < 0 || in.Limit > 100 || len(in.Cursor) > 1024 {
|
|
return "", errors.New("invalid history limit or cursor")
|
|
}
|
|
q := url.Values{}
|
|
if in.Limit > 0 {
|
|
q.Set("limit", strconv.Itoa(in.Limit))
|
|
}
|
|
if in.Cursor != "" {
|
|
q.Set("cursor", in.Cursor)
|
|
}
|
|
if len(q) == 0 {
|
|
return "", nil
|
|
}
|
|
return "?" + q.Encode(), nil
|
|
}
|
|
|
|
// ListTaskAttempts 按执行代次降序读取摘要;当前查询不会授予执行权。
|
|
func (c *Client) ListTaskAttempts(ctx context.Context, taskID string, in HistoryPageRequest) (AttemptPage, error) {
|
|
var out AttemptPage
|
|
path, err := historyResourcePath(taskID)
|
|
if err != nil {
|
|
return out, err
|
|
}
|
|
query, err := historyPageQuery(in)
|
|
if err != nil {
|
|
return out, err
|
|
}
|
|
err = c.call(ctx, "GET", path+query, "", nil, &out)
|
|
return out, err
|
|
}
|
|
|
|
// GetTaskAttempt 获取当前归属及已保存结果,不提供执行秘密或执行授权。
|
|
func (c *Client) GetTaskAttempt(ctx context.Context, taskID, attemptID string) (Attempt, error) {
|
|
var out Attempt
|
|
if !validID(attemptID) {
|
|
return out, errors.New("invalid attempt id")
|
|
}
|
|
path, err := historyResourcePath(taskID)
|
|
if err != nil {
|
|
return out, err
|
|
}
|
|
err = c.call(ctx, "GET", path+"/"+attemptID, "", nil, &out)
|
|
return out, err
|
|
}
|
|
|
|
// ListAttemptEvidence 列出原先仅保存为证据的报告,不把声明结果提升为权威结果。
|
|
func (c *Client) ListAttemptEvidence(ctx context.Context, taskID, attemptID string, in HistoryPageRequest) (AttemptEvidencePage, error) {
|
|
var out AttemptEvidencePage
|
|
path, err := historyResourcePath(taskID, attemptID)
|
|
if err != nil {
|
|
return out, err
|
|
}
|
|
query, err := historyPageQuery(in)
|
|
if err != nil {
|
|
return out, err
|
|
}
|
|
err = c.call(ctx, "GET", path+query, "", nil, &out)
|
|
return out, err
|
|
}
|
|
|
|
// GetAttemptEvidence 读取单条原报告正文,不改变任务或尝试的权威状态。
|
|
func (c *Client) GetAttemptEvidence(ctx context.Context, taskID, attemptID, evidenceID string) (AttemptEvidence, error) {
|
|
var out AttemptEvidence
|
|
path, err := historyResourcePath(taskID, attemptID, evidenceID)
|
|
if err != nil {
|
|
return out, err
|
|
}
|
|
err = c.call(ctx, "GET", path, "", nil, &out)
|
|
return out, err
|
|
}
|