| 5159 | } |
| 5160 | |
| 5161 | func (c *unixSocketClient) AgentTaskClaimNext( |
| 5162 | ctx context.Context, |
| 5163 | request AgentTaskClaimNextRequest, |
| 5164 | credentials agentidentity.Credentials, |
| 5165 | ) (AgentTaskNextRecord, error) { |
| 5166 | const path = "/api/agent/tasks/claim-next" |
| 5167 | response, err := c.doRequestWithCredentials(ctx, http.MethodPost, path, nil, request, "", credentials) |
| 5168 | if err != nil { |
| 5169 | return AgentTaskNextRecord{}, err |
| 5170 | } |
| 5171 | defer func() { |
| 5172 | _ = response.Body.Close() |
| 5173 | }() |
| 5174 | |
| 5175 | if response.StatusCode == http.StatusNoContent { |
| 5176 | if err := drainResponseBody(http.MethodPost, path, response.Body); err != nil { |
| 5177 | return AgentTaskNextRecord{}, err |
| 5178 | } |
| 5179 | return AgentTaskNextRecord{Claimed: false}, nil |
| 5180 | } |
| 5181 | if response.StatusCode < 200 || response.StatusCode >= 300 { |
| 5182 | return AgentTaskNextRecord{}, readAPIError(response) |
| 5183 | } |
| 5184 | |
| 5185 | var decoded contract.AgentTaskClaimResponse |
| 5186 | if err := json.NewDecoder(response.Body).Decode(&decoded); err != nil { |
| 5187 | return AgentTaskNextRecord{}, fmt.Errorf("cli: decode %s %s response: %w", http.MethodPost, path, err) |
| 5188 | } |
| 5189 | claim := decoded.Claim |
| 5190 | return AgentTaskNextRecord{Claimed: true, Claim: &claim}, nil |
| 5191 | } |
| 5192 | |
| 5193 | func (c *unixSocketClient) AgentTaskHeartbeat( |
| 5194 | ctx context.Context, |