41 lines
1.2 KiB
C#
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));
|
|
}
|
|
}
|