using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Controllers.V1.Base; using PARR.API.Settings; using PARR.BLL.Services.Interfaces; using PARR.Constants; namespace PARR.API.Controllers.V1.Statistics { /// /// Статистика RabbitMQ /// [Authorize(Roles = ParrRoles.Administrator.Role)] public class StatRabbitMqController : BaseApiController { private readonly IMqService mqService; private readonly MqSettings mqSettings; private readonly ILogger logger; private readonly IMqAdminService mqAdminService; public StatRabbitMqController(IMqService mqService, MqSettings mqSettings, ILogger logger, IMqAdminService mqAdminService) { this.mqService = mqService; this.mqSettings = mqSettings; this.logger = logger; this.mqAdminService = mqAdminService; } /// /// Статистика очередей в RabbitMQ /// /// [HttpGet(ApiRoutes.StatRabbitMq.GetQueueStats)] public async Task GetQueueStats() { var result = await mqAdminService.GetQueuesAsync(mqSettings.Statistics.StatMqAuth); if (!result.IsSuccess) return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Ошибка при получении статистики из RabbitMQ." } })); return Ok(new Response(result.Response, true)); //var response = new List(); //// список очередей //foreach (var queue in mqSettings.Statistics.QueueList) //{ // var result = mqService.GetQueueCount(mqSettings.Statistics.StatMqAuth, queue); // if (!result.IsSuccess) // { // logger.LogError(result.Exception, $"Ошибка при запросе статистики из RabbitMQ для очереди: ${queue}"); // return BadRequest(new Response(false, new List { new ErrorModel { Message = $"" } })); // } // response.Add(new StatRabbitMqQueueResponse { Name = queue, Consumers = result.ConsumerCount, MessagesTotal = result.Count }); //} //return Ok(new Response>(response.OrderBy(t => t.Name).ToList(), true)); } /// /// Статистика соединений в RabbitMQ /// /// [HttpGet(ApiRoutes.StatRabbitMq.GetConnectionStats)] public async Task GetConnectionStats() { var result = await mqAdminService.GetConnectionsAsync(mqSettings.Statistics.StatMqAuth); if (!result.IsSuccess) return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Ошибка при получении статистики из RabbitMQ." } })); return Ok(new Response(result.Response, true)); } } }