Files
LazyBearWorks/LazyBear.MCP/Services/Jira/JiraClientFactory.cs

41 lines
1.2 KiB
C#

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<RestResponse>(response => !response.IsSuccessful && response.StatusCode == System.Net.HttpStatusCode.TooManyRequests)
.Or<RestException>()
.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));
}
}