(req *Request, rec recorder, log *zap.Logger)
| 390 | } |
| 391 | |
| 392 | func (r *Route) RunSteps(req *Request, rec recorder, log *zap.Logger) (*Response, error) { |
| 393 | if len(r.Steps) == 0 { |
| 394 | return nil, errors.New("steps are empty") |
| 395 | } |
| 396 | |
| 397 | responses := []*http.Response{} |
| 398 | cancelFuncs := []context.CancelFunc{} |
| 399 | |
| 400 | noResponses := false |
| 401 | defer func() { |
| 402 | for index, resp := range responses { |
| 403 | if index != len(responses)-1 { |
| 404 | if resp != nil { |
| 405 | resp.Body.Close() |
| 406 | } |
| 407 | } |
| 408 | } |
| 409 | |
| 410 | for index, cancel := range cancelFuncs { |
| 411 | if index != len(cancelFuncs)-1 || noResponses { |
| 412 | cancel() |
| 413 | } |
| 414 | } |
| 415 | }() |
| 416 | |
| 417 | body, err := io.ReadAll(req.Forwarded.Body) |
| 418 | if err != nil { |
| 419 | return nil, err |
| 420 | } |
| 421 | |
| 422 | var lastErr error |
| 423 | stopStep := 0 |
| 424 | |
| 425 | totalRetries := 0 |
| 426 | currentRetry := 0 |
| 427 | for _, step := range r.Steps { |
| 428 | totalRetries += step.Retries |
| 429 | } |
| 430 | |
| 431 | for idx, step := range r.Steps { |
| 432 | resourceName := "" |
| 433 | |
| 434 | if step.Provider == "azure" { |
| 435 | val, err := req.GetSettingValue("azure", "resourceName") |
| 436 | if err != nil { |
| 437 | return nil, err |
| 438 | } |
| 439 | |
| 440 | resourceName = val |
| 441 | } |
| 442 | |
| 443 | key, err := req.GetSettingValue(step.Provider, "apikey") |
| 444 | if err != nil { |
| 445 | return nil, err |
| 446 | } |
| 447 | |
| 448 | parsed, err := time.ParseDuration(step.Timeout) |
| 449 | if err != nil { |
nothing calls this directly
no test coverage detected