feat(api, bll): переделал сервис получения статистики из RabbitMQ. StatRabbitMqController - статистика по очередям и соединениям

This commit is contained in:
Mikhail Trubnikov
2024-05-24 14:52:25 +10:00
parent f35092dd51
commit 8de174ebb9
13 changed files with 158 additions and 77 deletions

View File

@@ -0,0 +1,78 @@
using Microsoft.Extensions.Logging;
using PARR.BLL.Contracts.Interfaces;
using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using System.Net;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
namespace PARR.BLL.Services.Implementations
{
internal class MqAdminService : IMqAdminService
{
private readonly HttpClient httpClient;
private readonly ILogger<MqAdminService> logger;
public MqAdminService(HttpClient httpClient, ILogger<MqAdminService> logger)
{
this.httpClient = httpClient;
this.logger = logger;
}
public async Task<MqApiResult> GetConnectionsAsync(IMqSettings mqSettings)
{
var url = $"http://{mqSettings.HostName}:15672/api/connections";
return await SendRequestAsync(mqSettings, url);
}
public async Task<MqApiResult> GetQueuesAsync(IMqSettings mqSettings)
{
var url = $"http://{mqSettings.HostName}:15672/api/queues";
return await SendRequestAsync(mqSettings, url);
}
private async Task<MqApiResult> SendRequestAsync(IMqSettings mqSettings, string url)
{
SetAuthorizationHeaders(mqSettings);
try
{
var result = await httpClient.GetAsync(url);
if (result.StatusCode == HttpStatusCode.OK)
{
var content = await result.Content.ReadAsStringAsync();
var json = JsonSerializer.Deserialize<object>(content);
return new MqApiResult { IsSuccess = true, Response = json };
}
else
{
logger.LogError($"Ошибка при запросе к RabbitMq, url: {url}, StatusCode: {result.StatusCode}");
return new MqApiResult { IsSuccess = false };
}
}
catch (Exception ex)
{
logger.LogError(ex, $"Ошибка при запросе к RabbitMQ, url: {url}");
return new MqApiResult { IsSuccess = false, Exception = ex };
}
}
private void SetAuthorizationHeaders(IMqSettings mqSettings)
{
httpClient.DefaultRequestHeaders.Clear();
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes($"{mqSettings.User}:{mqSettings.Password}")));
}
}
}