Skip to content

Commit bcb762d

Browse files
committed
Add log level filter.
1 parent 4512342 commit bcb762d

File tree

6 files changed

+89
-27
lines changed

6 files changed

+89
-27
lines changed

src/Serilog.Ui.Core/IDataProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ namespace Serilog.Ui.Core
55
{
66
public interface IDataProvider
77
{
8-
Task<(IEnumerable<LogModel>, int)> FetchDataAsync(int page, int count);
8+
Task<(IEnumerable<LogModel>, int)> FetchDataAsync(int page, int count, string level = null);
99
}
1010
}

src/Serilog.Ui.MsSqlServerProvider/SqlServerDataProvider.cs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Data;
55
using System.Data.SqlClient;
6+
using System.Text;
67
using System.Threading.Tasks;
78

89
namespace Serilog.Ui.MsSqlServerProvider
@@ -16,11 +17,11 @@ public SqlServerDataProvider(RelationalDbOptions options)
1617
_options = options;
1718
}
1819

19-
public async Task<(IEnumerable<LogModel>, int)> FetchDataAsync(int page, int count)
20+
public async Task<(IEnumerable<LogModel>, int)> FetchDataAsync(int page, int count, string level = null)
2021
{
2122
using (IDbConnection connection = new SqlConnection(_options.ConnectionString))
2223
{
23-
var logsTask = GetLogsAsync(page - 1, count);
24+
var logsTask = GetLogsAsync(page - 1, count, level);
2425
var logCountTask = CountLogsAsync();
2526

2627
await Task.WhenAll(logsTask, logCountTask);
@@ -29,14 +30,23 @@ public SqlServerDataProvider(RelationalDbOptions options)
2930
}
3031
}
3132

32-
private async Task<IEnumerable<LogModel>> GetLogsAsync(int page, int count)
33+
private async Task<IEnumerable<LogModel>> GetLogsAsync(int page, int count, string level)
3334
{
34-
var query =
35-
$"SELECT [Id], [Message],[Level], [TimeStamp], [Exception], [Properties] FROM [{_options.Schema}].[{_options.TableName}] " +
36-
"ORDER BY Id DESC OFFSET @Offset ROWS FETCH NEXT @Count ROWS ONLY";
35+
var queryBuilder = new StringBuilder();
36+
queryBuilder.Append("SELECT[Id], [Message],[Level], [TimeStamp], [Exception], [Properties] FROM[");
37+
queryBuilder.Append(_options.Schema);
38+
queryBuilder.Append("].[");
39+
queryBuilder.Append(_options.TableName);
40+
queryBuilder.Append("] ");
41+
42+
if (!string.IsNullOrEmpty(level))
43+
queryBuilder.Append("WHERE [LEVEL] = @Level ");
44+
45+
queryBuilder.Append("ORDER BY Id DESC OFFSET @Offset ROWS FETCH NEXT @Count ROWS ONLY");
46+
3747
using (IDbConnection connection = new SqlConnection(_options.ConnectionString))
3848
{
39-
return await connection.QueryAsync<LogModel>(query, new { Offset = page, Count = count });
49+
return await connection.QueryAsync<LogModel>(queryBuilder.ToString(), new { Offset = page, Count = count, Level = level });
4050
}
4151
}
4252

src/Serilog.Ui.Web/Controllers/LogsController.cs

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,53 +14,58 @@ public class LogsController : Controller
1414
{
1515
private static readonly string Scripts;
1616
private static readonly string Styles;
17-
private static readonly IEnumerable<SelectListItem> SelectListItems;
17+
private static readonly IEnumerable<SelectListItem> LogCountSelectListItems;
18+
private static readonly IEnumerable<SelectListItem> LogLevelSelectListItems;
1819
private readonly IDataProvider _dataProvider;
1920

2021
static LogsController()
2122
{
2223
Styles = SetResource("Serilog.Ui.Web.wwwroot.css.main.css");
2324
Scripts = SetResource("Serilog.Ui.Web.wwwroot.js.main.js");
24-
SelectListItems = new List<SelectListItem>
25+
LogCountSelectListItems = new List<SelectListItem>
2526
{
2627
new SelectListItem {Text = "10", Value = "10", Selected = true},
2728
new SelectListItem {Text = "25", Value = "25"},
2829
new SelectListItem {Text = "50", Value = "50"},
2930
new SelectListItem {Text = "100", Value = "100"}
3031
};
32+
LogLevelSelectListItems = new List<SelectListItem>
33+
{
34+
new SelectListItem {Text = "---", Value = "", Selected = true},
35+
new SelectListItem {Text = "Verbose", Value = "Verbose"},
36+
new SelectListItem {Text = "Debug", Value = "Debug"},
37+
new SelectListItem {Text = "Information", Value = "Information"},
38+
new SelectListItem {Text = "Warning", Value = "Warning"},
39+
new SelectListItem {Text = "Error", Value = "Error"}
40+
};
3141
}
3242

3343
public LogsController(IDataProvider dataProvider)
3444
{
3545
_dataProvider = dataProvider;
3646
}
3747

38-
public async Task<IActionResult> Index(int page = 1, int count = 10)
48+
public async Task<IActionResult> Index(int page = 1, int count = 10, string level = null)
3949
{
4050
if (page < 1)
4151
page = 1;
4252

4353
if (count > 100)
4454
count = 100;
4555

46-
if (SelectListItems.First(i => i.Selected).Value != count.ToString())
47-
{
48-
SelectListItems.First(i => i.Selected).Selected = false;
49-
var x = SelectListItems.FirstOrDefault(i => i.Value == count.ToString());
50-
if (x != null)
51-
x.Selected = true;
52-
else
53-
SelectListItems.First().Selected = true;
54-
};
56+
SetLogCountSelectListItem(count);
57+
58+
SetLogLevelSelectListItem(level);
5559

56-
var (logs, logCount) = await _dataProvider.FetchDataAsync(page, count);
60+
var (logs, logCount) = await _dataProvider.FetchDataAsync(page, count, level);
5761
var viewModel = new LogViewModel
5862
{
5963
LogCount = logCount,
6064
Logs = logs,
6165
Page = page,
6266
Count = count,
63-
CountSelectListItems = SelectListItems
67+
LogCountSelectListItems = LogCountSelectListItems,
68+
LogLevelSelectListItems = LogLevelSelectListItems
6469
};
6570

6671
ViewData["Styles"] = Styles;
@@ -69,6 +74,36 @@ public async Task<IActionResult> Index(int page = 1, int count = 10)
6974
return View(viewModel);
7075
}
7176

77+
private static void SetLogLevelSelectListItem(string level)
78+
{
79+
if (LogLevelSelectListItems.First(i => i.Selected).Value != level)
80+
{
81+
LogLevelSelectListItems.First(i => i.Selected).Selected = false;
82+
var x = LogLevelSelectListItems.FirstOrDefault(i => i.Value == level);
83+
if (x != null)
84+
x.Selected = true;
85+
else
86+
LogLevelSelectListItems.First().Selected = true;
87+
}
88+
89+
;
90+
}
91+
92+
private static void SetLogCountSelectListItem(int count)
93+
{
94+
if (LogCountSelectListItems.First(i => i.Selected).Value != count.ToString())
95+
{
96+
LogCountSelectListItems.First(i => i.Selected).Selected = false;
97+
var x = LogCountSelectListItems.FirstOrDefault(i => i.Value == count.ToString());
98+
if (x != null)
99+
x.Selected = true;
100+
else
101+
LogCountSelectListItems.First().Selected = true;
102+
}
103+
104+
;
105+
}
106+
72107
private static string SetResource(string resourceName)
73108
{
74109
var resourceStream = typeof(LogsController).Assembly.GetManifestResourceStream(resourceName);

src/Serilog.Ui.Web/ViewModel/LogViewModel.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public class LogViewModel
1414

1515
public int Count { get; set; }
1616

17-
public IEnumerable<SelectListItem> CountSelectListItems { get; set; }
17+
public IEnumerable<SelectListItem> LogCountSelectListItems { get; set; }
18+
19+
public IEnumerable<SelectListItem> LogLevelSelectListItems { get; set; }
1820
}
1921
}

src/Serilog.Ui.Web/Views/Logs/Index.cshtml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,28 @@
1717
}
1818
<h1>Log List</h1>
1919
<form method="get" asp-action="Index">
20+
2021
<div class="row">
21-
<div class="col-sm-12 col-md-6">
22+
<div class="col-sm-12 col-md-4">
2223
<div class="table-select" id="logCount">
2324
<label>
2425
Show
25-
<select asp-items="@Model.CountSelectListItems" name="count" class="form-control form-control-sm">
26+
<select asp-items="@Model.LogCountSelectListItems" name="count" class="form-control form-control-sm">
2627
</select>
2728
entries
2829
</label>
2930
</div>
3031
</div>
31-
<div class="col-sm-12 col-md-6">
32+
<div class="col-sm-12 col-md-4">
33+
<div class="table-select" id="logFilter">
34+
<label>
35+
Level
36+
<select asp-items="@Model.LogLevelSelectListItems" name="level" class="form-control form-control-sm">
37+
</select>
38+
</label>
39+
</div>
40+
</div>
41+
<div class="col-sm-12 col-md-4">
3242
<div class="table-filter">
3343
<label>Search:<input type="search" class="form-control form-control-sm" placeholder=""></label>
3444
</div>

src/Serilog.Ui.Web/wwwroot/js/main.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,10 @@
2222
$("#logCount").on("change", function () {
2323
$("#page").val($(".page-link.disabled").attr("data-val"));
2424
$("form").submit()
25-
})
25+
});
26+
27+
$("#logFilter").on("change", function () {
28+
$("#page").val($(".page-link.disabled").attr("data-val"));
29+
$("form").submit()
30+
});
2631
})(jQuery);

0 commit comments

Comments
 (0)