using Microsoft.Extensions.Configuration; using Polly; using RestSharp; namespace LazyBear.MCP.Services.Jira; public static class JiraClientFactory { private static readonly TimeSpan[] BackoffDurations = { TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(2000), TimeSpan.FromMilliseconds(4000) }; private static readonly Policy _retryPolicy = Policy .HandleResult(response => !response.IsSuccessful && response.StatusCode == System.Net.HttpStatusCode.TooManyRequests) .Or() .WaitAndRetryAsync( retryCount: 3, sleepDurationProvider: attempt => BackoffDurations[attempt], onRetry: (outcome, timespan, attempt, context) => { }); public static RestClient CreateClient(IConfiguration configuration) { var jiraUrl = configuration["Jira:Url"] ?? ""; if (string.IsNullOrWhiteSpace(jiraUrl)) { throw new Exception("Jira:Url не задан"); } var config = new RestClientOptions(jiraUrl) { UserAgent = "LazyBear-Jira-MCP", Timeout = TimeSpan.FromMilliseconds(30000) }; return _retryPolicy.Wrap(new RestClient(config)); } }