aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/Controllers/ClientLogController.cs
diff options
context:
space:
mode:
authorcrobibero <cody@robibe.ro>2021-04-26 07:02:26 -0600
committercrobibero <cody@robibe.ro>2021-04-26 07:02:26 -0600
commit1d6224c9c66b31c9df602b4281c870a9c400767c (patch)
tree91e65f2c5aa0de89a9782a3036a9fc62777ea929 /Jellyfin.Api/Controllers/ClientLogController.cs
parent5df87b3e0da0ef3010ec9929939ef3084bff42be (diff)
Add endpoint to log client events
Diffstat (limited to 'Jellyfin.Api/Controllers/ClientLogController.cs')
-rw-r--r--Jellyfin.Api/Controllers/ClientLogController.cs69
1 files changed, 69 insertions, 0 deletions
diff --git a/Jellyfin.Api/Controllers/ClientLogController.cs b/Jellyfin.Api/Controllers/ClientLogController.cs
new file mode 100644
index 000000000..8e38cd13c
--- /dev/null
+++ b/Jellyfin.Api/Controllers/ClientLogController.cs
@@ -0,0 +1,69 @@
+using Jellyfin.Api.Models.ClientLogDtos;
+using MediaBrowser.Controller.ClientEvent;
+using MediaBrowser.Model.ClientLog;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Jellyfin.Api.Controllers
+{
+ /// <summary>
+ /// Client log controller.
+ /// </summary>
+ public class ClientLogController : BaseJellyfinApiController
+ {
+ private readonly IClientEventLogger _clientEventLogger;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ClientLogController"/> class.
+ /// </summary>
+ /// <param name="clientEventLogger">Instance of the <see cref="IClientEventLogger"/> interface.</param>
+ public ClientLogController(IClientEventLogger clientEventLogger)
+ {
+ _clientEventLogger = clientEventLogger;
+ }
+
+ /// <summary>
+ /// Post event from client.
+ /// </summary>
+ /// <param name="clientLogEventDto">The client log dto.</param>
+ /// <response code="204">Event logged.</response>
+ /// <returns>Submission status.</returns>
+ [HttpPost]
+ [ProducesResponseType(StatusCodes.Status204NoContent)]
+ public ActionResult LogEvent([FromBody] ClientLogEventDto clientLogEventDto)
+ {
+ Log(clientLogEventDto);
+ return NoContent();
+ }
+
+ /// <summary>
+ /// Bulk post events from client.
+ /// </summary>
+ /// <param name="clientLogEventDtos">The list of client log dtos.</param>
+ /// <response code="204">All events logged.</response>
+ /// <returns>Submission status.</returns>
+ [HttpPost("Bulk")]
+ [ProducesResponseType(StatusCodes.Status204NoContent)]
+ public ActionResult LogEvents([FromBody] ClientLogEventDto[] clientLogEventDtos)
+ {
+ foreach (var dto in clientLogEventDtos)
+ {
+ Log(dto);
+ }
+
+ return NoContent();
+ }
+
+ private void Log(ClientLogEventDto dto)
+ {
+ _clientEventLogger.Log(new ClientLogEvent(
+ dto.Timestamp,
+ dto.Level,
+ dto.UserId,
+ dto.ClientName,
+ dto.ClientVersion,
+ dto.DeviceId,
+ dto.Message));
+ }
+ }
+} \ No newline at end of file