using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Contracts.V1.Responses.Statistics; 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; public StatRabbitMqController(IMqService mqService, MqSettings mqSettings, ILogger logger) { this.mqService = mqService; this.mqSettings = mqSettings; this.logger = logger; } /// /// Статистика очередей в RabbitMQ /// /// [HttpGet(ApiRoutes.StatRabbitMq.GetQueueStats)] public IActionResult GetQueueStats() { 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)); } } }