2
0

ClientLogController.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using Jellyfin.Api.Constants;
  2. using Jellyfin.Api.Models.ClientLogDtos;
  3. using MediaBrowser.Controller.ClientEvent;
  4. using MediaBrowser.Model.ClientLog;
  5. using Microsoft.AspNetCore.Authorization;
  6. using Microsoft.AspNetCore.Http;
  7. using Microsoft.AspNetCore.Mvc;
  8. namespace Jellyfin.Api.Controllers
  9. {
  10. /// <summary>
  11. /// Client log controller.
  12. /// </summary>
  13. [Authorize(Policy = Policies.DefaultAuthorization)]
  14. public class ClientLogController : BaseJellyfinApiController
  15. {
  16. private readonly IClientEventLogger _clientEventLogger;
  17. /// <summary>
  18. /// Initializes a new instance of the <see cref="ClientLogController"/> class.
  19. /// </summary>
  20. /// <param name="clientEventLogger">Instance of the <see cref="IClientEventLogger"/> interface.</param>
  21. public ClientLogController(IClientEventLogger clientEventLogger)
  22. {
  23. _clientEventLogger = clientEventLogger;
  24. }
  25. /// <summary>
  26. /// Post event from client.
  27. /// </summary>
  28. /// <param name="clientLogEventDto">The client log dto.</param>
  29. /// <response code="204">Event logged.</response>
  30. /// <returns>Submission status.</returns>
  31. [HttpPost]
  32. [ProducesResponseType(StatusCodes.Status204NoContent)]
  33. public ActionResult LogEvent([FromBody] ClientLogEventDto clientLogEventDto)
  34. {
  35. Log(clientLogEventDto);
  36. return NoContent();
  37. }
  38. /// <summary>
  39. /// Bulk post events from client.
  40. /// </summary>
  41. /// <param name="clientLogEventDtos">The list of client log dtos.</param>
  42. /// <response code="204">All events logged.</response>
  43. /// <returns>Submission status.</returns>
  44. [HttpPost("Bulk")]
  45. [ProducesResponseType(StatusCodes.Status204NoContent)]
  46. public ActionResult LogEvents([FromBody] ClientLogEventDto[] clientLogEventDtos)
  47. {
  48. foreach (var dto in clientLogEventDtos)
  49. {
  50. Log(dto);
  51. }
  52. return NoContent();
  53. }
  54. private void Log(ClientLogEventDto dto)
  55. {
  56. _clientEventLogger.Log(new ClientLogEvent(
  57. dto.Timestamp,
  58. dto.Level,
  59. dto.UserId,
  60. dto.ClientName,
  61. dto.ClientVersion,
  62. dto.DeviceId,
  63. dto.Message));
  64. }
  65. }
  66. }