using System.Linq; using Lidarr.Http; using Lidarr.Http.Extensions; using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.Instrumentation; namespace Lidarr.Api.V1.Logs { [V1ApiController] public class LogController : Controller { private readonly ILogService _logService; public LogController(ILogService logService) { _logService = logService; } [HttpGet] [Produces("application/json")] public PagingResource GetLogs() { var pagingResource = Request.ReadPagingResourceFromRequest(); var pageSpec = pagingResource.MapToPagingSpec(); if (pageSpec.SortKey == "time") { pageSpec.SortKey = "id"; } var levelFilter = pagingResource.Filters.FirstOrDefault(f => f.Key == "level"); if (levelFilter != null) { switch (levelFilter.Value) { case "fatal": pageSpec.FilterExpressions.Add(h => h.Level == "Fatal"); break; case "error": pageSpec.FilterExpressions.Add(h => h.Level == "Fatal" || h.Level == "Error"); break; case "warn": pageSpec.FilterExpressions.Add(h => h.Level == "Fatal" || h.Level == "Error" || h.Level == "Warn"); break; case "info": pageSpec.FilterExpressions.Add(h => h.Level == "Fatal" || h.Level == "Error" || h.Level == "Warn" || h.Level == "Info"); break; case "debug": pageSpec.FilterExpressions.Add(h => h.Level == "Fatal" || h.Level == "Error" || h.Level == "Warn" || h.Level == "Info" || h.Level == "Debug"); break; case "trace": pageSpec.FilterExpressions.Add(h => h.Level == "Fatal" || h.Level == "Error" || h.Level == "Warn" || h.Level == "Info" || h.Level == "Debug" || h.Level == "Trace"); break; } } var response = pageSpec.ApplyToPage(_logService.Paged, LogResourceMapper.ToResource); if (pageSpec.SortKey == "id") { response.SortKey = "time"; } return response; } } }