Skip to content

Commit ef2da53

Browse files
committed
Dead Link Checker: lift validation under the Polly
So that HTTP code validation errors are considered as Polly errors as well.
1 parent a12d249 commit ef2da53

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

scripts/check-dead-links.fsx

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,34 @@ let retryPipeline =
4646
ResiliencePipelineBuilder()
4747
.AddRetry(RetryStrategyOptions())
4848
.Build()
49+
type Success = Success
4950
let checkLinkStatus (client: HttpClient) (url: string) = task {
5051
try
5152
lock printLock (fun () -> printfn $"Verifying link {url}…")
52-
let! response = retryPipeline.ExecuteAsync(
53-
fun _ -> ValueTask<HttpResponseMessage>(client.GetAsync url)
54-
)
55-
if response.StatusCode <> HttpStatusCode.OK then
53+
let context = ResilienceContextPool.Shared.Get()
54+
try
55+
let! result = retryPipeline.ExecuteOutcomeAsync(
56+
(fun _ _ -> ValueTask<Outcome<Success>>(task {
57+
let! response = client.GetAsync url
58+
return
59+
match response.StatusCode with
60+
| HttpStatusCode.OK -> Outcome.FromResult(Success)
61+
| code when Map.tryFind url exclusionCodes = Some code -> Outcome.FromResult(Success)
62+
| code -> Outcome.FromException(Exception $"Status code {int code}.")
63+
})),
64+
context,
65+
null
66+
)
5667
return
57-
match Map.tryFind url exclusionCodes with
58-
| Some code when code = response.StatusCode -> Result.Ok()
59-
| _ -> Result.Error $"Status code {int response.StatusCode}."
60-
else
61-
return Result.Ok()
68+
match result with
69+
| _ when not(isNull(box result.Result)) -> Result.Ok()
70+
| _ when result.Exception <> null -> Result.Error(result.Exception.Message)
71+
| _ -> failwithf "Neither result nor exception was set."
72+
73+
finally
74+
ResilienceContextPool.Shared.Return context
6275
with
63-
| error -> return Result.Error $"Exception {error.Message}"
76+
| error -> return Result.Error $"Internal script error: {error}"
6477
}
6578

6679
let isNonLocalLink(link: string) =

0 commit comments

Comments
 (0)