From 0e143a78e504a47681262d6049b235da6eac61f7 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Fri, 30 Mar 2018 08:38:15 -0400 Subject: [PATCH] log filters --- src/Admin/Controllers/LogsController.cs | 25 +++++++++++++++++++------ src/Admin/Models/LogModel.cs | 2 +- src/Admin/Models/LogsModel.cs | 10 ++++++++++ src/Admin/Views/Logs/Index.cshtml | 21 +++++++++++++++++++-- 4 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 src/Admin/Models/LogsModel.cs diff --git a/src/Admin/Controllers/LogsController.cs b/src/Admin/Controllers/LogsController.cs index 757e3500ba..d60c661955 100644 --- a/src/Admin/Controllers/LogsController.cs +++ b/src/Admin/Controllers/LogsController.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.Documents.Client; using Microsoft.Azure.Documents.Linq; +using Serilog.Events; namespace Bit.Admin.Controllers { @@ -25,7 +26,8 @@ namespace Bit.Admin.Controllers _globalSettings = globalSettings; } - public async Task Index(string cursor = null, int count = 50) + public async Task Index(string cursor = null, int count = 50, + LogEventLevel? level = null, string project = null) { var collectionLink = UriFactory.CreateDocumentCollectionUri(Database, Collection); using(var client = new DocumentClient(new Uri(_globalSettings.DocumentDb.Uri), @@ -37,12 +39,23 @@ namespace Bit.Admin.Controllers RequestContinuation = cursor }; - var query = client.CreateDocumentQuery(collectionLink, options) - .OrderByDescending(l => l.Timestamp).AsDocumentQuery(); - var response = await query.ExecuteNextAsync(); - - return View(new CursorPagedModel + var query = client.CreateDocumentQuery(collectionLink, options).AsQueryable(); + if(level.HasValue) { + query = query.Where(l => l.Level == level.Value.ToString()); + } + if(!string.IsNullOrWhiteSpace(project)) + { + query = query.Where(l => l.Properties != null && l.Properties["Project"] == (object)project); + } + + var docQuery = query.OrderByDescending(l => l.Timestamp).AsDocumentQuery(); + var response = await docQuery.ExecuteNextAsync(); + + return View(new LogsModel + { + Level = level, + Project = project, Items = response.ToList(), Count = count, Cursor = cursor, diff --git a/src/Admin/Models/LogModel.cs b/src/Admin/Models/LogModel.cs index c4ddc8c1c5..aec7908da0 100644 --- a/src/Admin/Models/LogModel.cs +++ b/src/Admin/Models/LogModel.cs @@ -10,7 +10,7 @@ namespace Bit.Admin.Models public class LogModel : Resource { public long EventIdHash { get; set; } - public LogEventLevel Level { get; set; } + public string Level { get; set; } public string Message { get; set; } public string MessageTruncated => Message.Length > 200 ? $"{Message.Substring(0, 200)}..." : Message; public string MessageTemplate { get; set; } diff --git a/src/Admin/Models/LogsModel.cs b/src/Admin/Models/LogsModel.cs new file mode 100644 index 0000000000..40bb953283 --- /dev/null +++ b/src/Admin/Models/LogsModel.cs @@ -0,0 +1,10 @@ +using Serilog.Events; + +namespace Bit.Admin.Models +{ + public class LogsModel : CursorPagedModel + { + public LogEventLevel? Level { get; set; } + public string Project { get; set; } + } +} diff --git a/src/Admin/Views/Logs/Index.cshtml b/src/Admin/Views/Logs/Index.cshtml index 4ef1921970..221886f62e 100644 --- a/src/Admin/Views/Logs/Index.cshtml +++ b/src/Admin/Views/Logs/Index.cshtml @@ -1,4 +1,4 @@ -@model CursorPagedModel +@model LogsModel @{ ViewData["Title"] = "Logs"; } @@ -7,6 +7,22 @@

Current UTC time: @DateTime.UtcNow.ToString()

+
+ + + + + +
+
@@ -58,7 +74,8 @@ {
  • Next + asp-route-count="@Model.Count" asp-route-project="@Model.Project" + asp-route-level="@Model.Level">Next
  • }