diff --git a/AsbCloudApp/Data/RequestLogDto.cs b/AsbCloudApp/Data/RequestLogDto.cs
index 28b3ff79..eb3231c0 100644
--- a/AsbCloudApp/Data/RequestLogDto.cs
+++ b/AsbCloudApp/Data/RequestLogDto.cs
@@ -2,6 +2,7 @@
namespace AsbCloudApp.Data
{
+#nullable enable
///
/// DTO журнала запросов
///
@@ -10,7 +11,7 @@ namespace AsbCloudApp.Data
///
/// логин пользователя
///
- public string UserLogin { get; set; }
+ public string UserLogin { get; set; } = string.Empty;
///
/// Id пользователя
@@ -20,22 +21,22 @@ namespace AsbCloudApp.Data
///
/// IP адрес пользователя
///
- public string UserIp { get; set; }
+ public string? UserIp { get; set; }
///
/// метод запроса (GET, POST,..)
///
- public string RequestMethod { get; set; }
+ public string RequestMethod { get; set; } = null!;
///
/// url
///
- public string RequestPath { get; set; }
+ public string? RequestPath { get; set; }
///
/// Referer
///
- public string Referer { get; set; }
+ public string Referer { get; set; } = string.Empty;
///
/// продолжительность выполнения
@@ -47,19 +48,20 @@ namespace AsbCloudApp.Data
///
public int Status { get; set; }
- ///
- /// сообщение об ошибке, если она произошла
- ///
- public string ExceptionMessage { get; set; }
-
///
/// метка времени запроса
///
public DateTime Date { get; set; }
+ ///
+ /// сообщение об ошибке, если она произошла
+ ///
+ public string? ExceptionMessage { get; set; } = null!;
+
///
/// стек вызовов
///
- public string ExceptionStack { get; set; }
+ public string? ExceptionStack { get; set; } = null!;
}
+#nullable disable
}
\ No newline at end of file
diff --git a/AsbCloudApp/Data/RequestLogUserDto.cs b/AsbCloudApp/Data/RequestLogUserDto.cs
index 1aed73d0..bd39eaef 100644
--- a/AsbCloudApp/Data/RequestLogUserDto.cs
+++ b/AsbCloudApp/Data/RequestLogUserDto.cs
@@ -2,6 +2,7 @@
namespace AsbCloudApp.Data
{
+#nullable enable
///
/// DTO статистики запросов по пользователю
///
@@ -15,12 +16,12 @@ namespace AsbCloudApp.Data
///
/// логин
///
- public string Login { get; set; }
+ public string Login { get; set; } = string.Empty;
///
/// IP адрес пользователя
///
- public string Ip { get; set; }
+ public string? Ip { get; set; }
///
/// время выполнения запроса
@@ -45,6 +46,7 @@ namespace AsbCloudApp.Data
///
/// DTO пользователя
///
- public UserDto User { get; set; }
+ public UserDto User { get; set; } = null!;
}
+#nullable disable
}
diff --git a/AsbCloudApp/Services/IRequestTracker.cs b/AsbCloudApp/Services/IRequestTracker.cs
index 48e09afd..3a4c0fe3 100644
--- a/AsbCloudApp/Services/IRequestTracker.cs
+++ b/AsbCloudApp/Services/IRequestTracker.cs
@@ -4,7 +4,7 @@ using System.Collections.Generic;
namespace AsbCloudApp.Services
{
- // TODO: make this nullable
+#nullable enable
///
/// Отслеживание и сбор статистики по запросам
@@ -29,34 +29,35 @@ namespace AsbCloudApp.Services
///
///
///
- IEnumerable GetAll(int take = -1);
+ IEnumerable GetAll(int? take);
///
/// запросы которые выполнялись быстро
///
///
///
- IEnumerable GetFast(int take = -1);
+ IEnumerable GetFast(int? take);
///
/// запросы, которые выполнялись медленно
///
///
///
- IEnumerable GetSlow(int take = -1);
+ IEnumerable GetSlow(int? take);
///
/// запросы, которые завершились ошибкой
///
///
///
- IEnumerable GetError(int take = -1);
+ IEnumerable GetError(int? take);
///
/// Статистика посещений пользователей
///
///
///
- IEnumerable GetUsersStat(int take = -1);
+ IEnumerable GetUsersStat(int? take);
}
+#nullable disable
}
diff --git a/AsbCloudInfrastructure/Services/RequestTrackerService.cs b/AsbCloudInfrastructure/Services/RequestTrackerService.cs
index 454cea5e..1c37304e 100644
--- a/AsbCloudInfrastructure/Services/RequestTrackerService.cs
+++ b/AsbCloudInfrastructure/Services/RequestTrackerService.cs
@@ -7,6 +7,7 @@ using System.Linq;
namespace AsbCloudInfrastructure.Services
{
+#nullable enable
public class RequestTrackerService : IRequerstTrackerService
{
const int fastRequestsCount = 1000;
@@ -16,28 +17,28 @@ namespace AsbCloudInfrastructure.Services
const int fastLimitMs = 500;
static readonly char[] stackTraceSeparators = "\r\n".ToCharArray();
- private readonly ConcurrentQueue fastRequests = new ConcurrentQueue();
- private readonly ConcurrentQueue slowRequests = new ConcurrentQueue();
- private readonly ConcurrentQueue errorRequests = new ConcurrentQueue();
+ private readonly ConcurrentQueue fastRequests = new ();
+ private readonly ConcurrentQueue slowRequests = new ();
+ private readonly ConcurrentQueue errorRequests = new ();
private readonly ConcurrentDictionary users = new ConcurrentDictionary();
- private static IEnumerable Get(IEnumerable list, int take = -1)
+ private static IEnumerable Get(IEnumerable list, int? take)
{
IEnumerable orderedlist = list.OrderByDescending(r => r.Date);
if (take > 0)
- orderedlist = orderedlist.Take(take);
+ orderedlist = orderedlist.Take(take.Value);
return orderedlist;
}
- public IEnumerable GetUsersStat(int take = -1)
+ public IEnumerable GetUsersStat(int? take)
{
IEnumerable result = users.Values.OrderByDescending(u => u.LastDate);
if (take > 0)
- result = result.Take(take);
+ result = result.Take(take.Value);
return result;
}
- public IEnumerable GetAll(int take = -1)
+ public IEnumerable GetAll(int? take)
{
var result = fastRequests
.Union(slowRequests)
@@ -46,13 +47,13 @@ namespace AsbCloudInfrastructure.Services
return Get(result, take);
}
- public IEnumerable GetFast(int take = -1)
+ public IEnumerable GetFast(int? take)
=> Get(fastRequests, take);
- public IEnumerable GetSlow(int take = -1)
+ public IEnumerable GetSlow(int? take)
=> Get(slowRequests, take);
- public IEnumerable GetError(int take = -1)
+ public IEnumerable GetError(int? take)
=> Get(errorRequests, take);
public void RegisterRequest(RequestLogDto requestLog)
@@ -103,14 +104,13 @@ namespace AsbCloudInfrastructure.Services
{
if (!string.IsNullOrEmpty(requestLog.UserLogin))
{
- var key = $"{requestLog?.UserId}>{requestLog?.UserIp}";
+ var key = $"{requestLog.UserId}>{requestLog.UserIp}";
if (!users.ContainsKey(key))
users[key] = new RequestLogUserDto
{
UserId = requestLog.UserId,
Ip = requestLog.UserIp,
Login = requestLog.UserLogin,
- //User = userService.Get(requestLog.UserId),
};
users[key].ElapsedMs += requestLog.ElapsedMilliseconds;
users[key].LastDate = requestLog.Date;
@@ -128,4 +128,5 @@ namespace AsbCloudInfrastructure.Services
}
}
}
+#nullable disable
}
diff --git a/AsbCloudWebApi/Controllers/RequestTrackerController.cs b/AsbCloudWebApi/Controllers/RequestTrackerController.cs
index 33bfb0c7..a645b257 100644
--- a/AsbCloudWebApi/Controllers/RequestTrackerController.cs
+++ b/AsbCloudWebApi/Controllers/RequestTrackerController.cs
@@ -6,6 +6,7 @@ using System.Collections.Generic;
namespace AsbCloudWebApi.Controllers
{
+#nullable enable
///
/// Мониторинг запросов, ошибок, пользователей
///
@@ -87,4 +88,5 @@ namespace AsbCloudWebApi.Controllers
return Ok(result);
}
}
+#nullable disable
}
diff --git a/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs b/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs
index 551b4d03..7b337f46 100644
--- a/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs
+++ b/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs
@@ -4,6 +4,7 @@ using System.Threading.Tasks;
namespace AsbCloudWebApi.Middlewares
{
+#nullable enable
public class RequerstTrackerMiddleware
{
private readonly RequestDelegate next;
@@ -18,8 +19,8 @@ namespace AsbCloudWebApi.Middlewares
var service = context.RequestServices.GetRequiredService();
var requestLog = new AsbCloudApp.Data.RequestLogDto
{
- UserLogin = context.User?.Identity.Name,
- UserIp = context.Connection.RemoteIpAddress.ToString(),
+ UserLogin = context.User.Identity?.Name ?? string.Empty,
+ UserIp = context.Connection?.RemoteIpAddress?.ToString(),
RequestMethod = context.Request.Method,
RequestPath = context.Request.Path.Value,
Referer = context.Request.Headers["Referer"].ToString(),
@@ -32,7 +33,7 @@ namespace AsbCloudWebApi.Middlewares
var sw = System.Diagnostics.Stopwatch.StartNew();
try
{
- await next?.Invoke(context);
+ await next.Invoke(context);
sw.Stop();
requestLog.ElapsedMilliseconds = sw.ElapsedMilliseconds;
requestLog.Status = context.Response.StatusCode;
@@ -43,10 +44,10 @@ namespace AsbCloudWebApi.Middlewares
sw.Stop();
requestLog.ElapsedMilliseconds = sw.ElapsedMilliseconds;
requestLog.Status = context.Response.StatusCode;
- // TODO: Add request params and body size.
service.RegisterRequestError(requestLog, ex);
throw;
}
}
}
+#nullable disable
}