ClientLogController.cs 2.2 KB

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