diff --git a/MareSynchronosServer/MareSynchronosServer/Startup.cs b/MareSynchronosServer/MareSynchronosServer/Startup.cs index 77160de..feaaf53 100644 --- a/MareSynchronosServer/MareSynchronosServer/Startup.cs +++ b/MareSynchronosServer/MareSynchronosServer/Startup.cs @@ -77,6 +77,10 @@ public class Startup MetricsAPI.CounterUserPushData, MetricsAPI.CounterUserPushDataTo, MetricsAPI.CounterUsersRegisteredDeleted, + MetricsAPI.CounterAuthenticationCacheHits, + MetricsAPI.CounterAuthenticationFailures, + MetricsAPI.CounterAuthenticationRequests, + MetricsAPI.CounterAuthenticationSuccesses }, new List { MetricsAPI.GaugeAuthorizedConnections, diff --git a/MareSynchronosServer/MareSynchronosShared/Authentication/SecretKeyAuthenticatorService.cs b/MareSynchronosServer/MareSynchronosShared/Authentication/SecretKeyAuthenticatorService.cs index e35978b..171a176 100644 --- a/MareSynchronosServer/MareSynchronosShared/Authentication/SecretKeyAuthenticatorService.cs +++ b/MareSynchronosServer/MareSynchronosShared/Authentication/SecretKeyAuthenticatorService.cs @@ -1,5 +1,6 @@ using System.Collections.Concurrent; using MareSynchronosShared.Data; +using MareSynchronosShared.Metrics; using MareSynchronosShared.Utils; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; @@ -10,6 +11,7 @@ namespace MareSynchronosShared.Authentication; public class SecretKeyAuthenticatorService { + private readonly MareMetrics metrics; private readonly IServiceScopeFactory _serviceScopeFactory; private readonly ILogger _logger; private readonly ConcurrentDictionary _cachedPositiveResponses = new(StringComparer.Ordinal); @@ -18,7 +20,7 @@ public class SecretKeyAuthenticatorService private readonly int _tempBanMinutes; private readonly List _whitelistedIps; - public SecretKeyAuthenticatorService(IServiceScopeFactory serviceScopeFactory, IConfiguration configuration, ILogger logger) + public SecretKeyAuthenticatorService(MareMetrics metrics, IServiceScopeFactory serviceScopeFactory, IConfiguration configuration, ILogger logger) { _logger = logger; var config = configuration.GetRequiredSection("MareSynchronos"); @@ -31,13 +33,18 @@ public class SecretKeyAuthenticatorService { logger.LogInformation("Whitelisted IP: " + ip); } + + this.metrics = metrics; _serviceScopeFactory = serviceScopeFactory; } internal async Task AuthorizeAsync(string ip, string secretKey) { + metrics.IncCounter(MetricsAPI.CounterAuthenticationRequests); + if (_cachedPositiveResponses.TryGetValue(secretKey, out var cachedPositiveResponse)) { + metrics.IncCounter(MetricsAPI.CounterAuthenticationCacheHits); return cachedPositiveResponse; } @@ -68,6 +75,8 @@ public class SecretKeyAuthenticatorService if (reply.Success) { + metrics.IncCounter(MetricsAPI.CounterAuthenticationSuccesses); + _cachedPositiveResponses[secretKey] = reply; _ = Task.Run(async () => { @@ -86,6 +95,8 @@ public class SecretKeyAuthenticatorService private SecretKeyAuthReply AuthenticationFailure(string ip) { + metrics.IncCounter(MetricsAPI.CounterAuthenticationFailures); + _logger.LogWarning("Failed authorization from {ip}", ip); if (!_whitelistedIps.Any(w => ip.Contains(w, StringComparison.OrdinalIgnoreCase))) { diff --git a/MareSynchronosServer/MareSynchronosStaticFilesServer/Startup.cs b/MareSynchronosServer/MareSynchronosStaticFilesServer/Startup.cs index 6baa83b..748e3af 100644 --- a/MareSynchronosServer/MareSynchronosStaticFilesServer/Startup.cs +++ b/MareSynchronosServer/MareSynchronosStaticFilesServer/Startup.cs @@ -35,6 +35,8 @@ public class Startup bool isSecondary = mareSettings.GetValue("IsSecondaryInstance", false); + //services.AddControllers(); + var defaultMethodConfig = new MethodConfig { Names = { MethodName.Default }, @@ -52,6 +54,10 @@ public class Startup { services.AddSingleton(new MareMetrics(new List { + MetricsAPI.CounterAuthenticationCacheHits, + MetricsAPI.CounterAuthenticationFailures, + MetricsAPI.CounterAuthenticationRequests, + MetricsAPI.CounterAuthenticationSuccesses }, new List { MetricsAPI.GaugeFilesTotalSize, @@ -113,6 +119,7 @@ public class Startup app.UseEndpoints(e => { e.MapGrpcService(); + //e.MapControllers(); }); } }