mirror of
https://github.com/techgarage-ir/MTWireGuard.git
synced 2025-08-26 20:35:21 +02:00
Added Serilog to manage logs
Handle required fields while starting
This commit is contained in:
parent
6fbfaa1007
commit
b128154c60
17 changed files with 749 additions and 154 deletions
134
Serilog.Ui.SqliteProvider/SqliteDataProvider.cs
Normal file
134
Serilog.Ui.SqliteProvider/SqliteDataProvider.cs
Normal file
|
@ -0,0 +1,134 @@
|
|||
using Dapper;
|
||||
using Microsoft.Data.Sqlite;
|
||||
using Serilog.Ui.Core;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Serilog.Ui.SqliteDataProvider
|
||||
{
|
||||
public class SqliteDataProvider(RelationalDbOptions options) : IDataProvider
|
||||
{
|
||||
private readonly RelationalDbOptions _options = options ?? throw new ArgumentNullException(nameof(options));
|
||||
|
||||
public async Task<(IEnumerable<LogModel>, int)> FetchDataAsync(
|
||||
int page,
|
||||
int count,
|
||||
string level = null,
|
||||
string searchCriteria = null,
|
||||
DateTime? startDate = null,
|
||||
DateTime? endDate = null
|
||||
)
|
||||
{
|
||||
var logsTask = GetLogs(page - 1, count, level, searchCriteria, startDate, endDate);
|
||||
var logCountTask = CountLogs(level, searchCriteria, startDate, endDate);
|
||||
|
||||
await Task.WhenAll(logsTask, logCountTask);
|
||||
|
||||
return (await logsTask, await logCountTask);
|
||||
}
|
||||
|
||||
public string Name => _options.ToDataProviderName("SQLite");
|
||||
|
||||
private Task<IEnumerable<LogModel>> GetLogs(
|
||||
int page,
|
||||
int count,
|
||||
string level,
|
||||
string searchCriteria,
|
||||
DateTime? startDate,
|
||||
DateTime? endDate)
|
||||
{
|
||||
var queryBuilder = new StringBuilder();
|
||||
queryBuilder.Append("SELECT Id, RenderedMessage AS Message, Level, Timestamp, Exception, Properties FROM ");
|
||||
queryBuilder.Append(_options.TableName);
|
||||
queryBuilder.Append(" ");
|
||||
|
||||
GenerateWhereClause(queryBuilder, level, searchCriteria, startDate, endDate);
|
||||
|
||||
queryBuilder.Append("ORDER BY Id DESC LIMIT @Offset, @Count");
|
||||
|
||||
using (var connection = new SqliteConnection(_options.ConnectionString))
|
||||
{
|
||||
var param = new
|
||||
{
|
||||
Offset = page * count,
|
||||
Count = count,
|
||||
Level = level,
|
||||
Search = searchCriteria != null ? $"%{searchCriteria}%" : null,
|
||||
StartDate = startDate,
|
||||
EndDate = endDate
|
||||
};
|
||||
var logs = connection.Query<LogModel>(queryBuilder.ToString(), param);
|
||||
var index = 1;
|
||||
foreach (var log in logs)
|
||||
log.RowNo = (page * count) + index++;
|
||||
|
||||
return Task.FromResult(logs);
|
||||
}
|
||||
}
|
||||
|
||||
private Task<int> CountLogs(
|
||||
string level,
|
||||
string searchCriteria,
|
||||
DateTime? startDate = null,
|
||||
DateTime? endDate = null)
|
||||
{
|
||||
var queryBuilder = new StringBuilder();
|
||||
queryBuilder.Append("SELECT COUNT(Id) FROM ");
|
||||
queryBuilder.Append(_options.TableName);
|
||||
queryBuilder.Append(" ");
|
||||
|
||||
GenerateWhereClause(queryBuilder, level, searchCriteria, startDate, endDate);
|
||||
|
||||
using var connection = new SqliteConnection(_options.ConnectionString);
|
||||
return Task.FromResult(connection.QueryFirstOrDefault<int>(queryBuilder.ToString(),
|
||||
new
|
||||
{
|
||||
Level = level,
|
||||
Search = searchCriteria != null ? "%" + searchCriteria + "%" : null,
|
||||
StartDate = startDate,
|
||||
EndDate = endDate
|
||||
}));
|
||||
}
|
||||
|
||||
private void GenerateWhereClause(
|
||||
StringBuilder queryBuilder,
|
||||
string level,
|
||||
string searchCriteria,
|
||||
DateTime? startDate = null,
|
||||
DateTime? endDate = null)
|
||||
{
|
||||
var whereIncluded = false;
|
||||
|
||||
if (!string.IsNullOrEmpty(level))
|
||||
{
|
||||
queryBuilder.Append("WHERE Level = @Level ");
|
||||
whereIncluded = true;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(searchCriteria))
|
||||
{
|
||||
queryBuilder.Append(whereIncluded
|
||||
? "AND (RenderedMessage LIKE @Search OR Exception LIKE @Search) "
|
||||
: "WHERE (RenderedMessage LIKE @Search OR Exception LIKE @Search) ");
|
||||
whereIncluded = true;
|
||||
}
|
||||
|
||||
if (startDate != null)
|
||||
{
|
||||
queryBuilder.Append(whereIncluded
|
||||
? "AND Timestamp >= @StartDate "
|
||||
: "WHERE Timestamp >= @StartDate ");
|
||||
whereIncluded = true;
|
||||
}
|
||||
|
||||
if (endDate != null)
|
||||
{
|
||||
queryBuilder.Append(whereIncluded
|
||||
? "AND Timestamp <= @EndDate "
|
||||
: "WHERE Timestamp <= @EndDate ");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue