From 9938a99e07978aa7e17b3ba8d66615d82b08c3cd Mon Sep 17 00:00:00 2001 From: "b.nodon" Date: Wed, 1 Apr 2026 16:24:58 +0200 Subject: [PATCH] =?UTF-8?q?#180=20Middleware=20pour=20mesurer=20le=20temps?= =?UTF-8?q?=20de=20r=C3=A9ponse=20des=20requ=C3=AAtes=20HTTP.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LogTempsExecutionMiddleware.cs | 39 +++++++++++++++++++ Webzine.WebApplication/Program.cs | 2 + 2 files changed, 41 insertions(+) create mode 100644 Webzine.WebApplication/Middlewares/LogTempsExecutionMiddleware.cs diff --git a/Webzine.WebApplication/Middlewares/LogTempsExecutionMiddleware.cs b/Webzine.WebApplication/Middlewares/LogTempsExecutionMiddleware.cs new file mode 100644 index 0000000..f871044 --- /dev/null +++ b/Webzine.WebApplication/Middlewares/LogTempsExecutionMiddleware.cs @@ -0,0 +1,39 @@ +namespace Webzine.WebApplication.Middlewares +{ + using System.Diagnostics; + + public class LogTempsExecutionMiddleware + { + /// + /// log à chaque requete http. + /// + // _next représente le maillon suivant dans la chaîne (le prochain middleware ou le contrôleur) + private readonly RequestDelegate next; + private readonly ILogger logger; + + // Le constructeur récupère "_next" et le Logger + public LogTempsExecutionMiddleware(RequestDelegate next, ILogger logger) + { + this.next = next; + this.logger = logger; + } + + // méthode appelée à chaque requête HTTP + public async Task InvokeAsync(HttpContext context) + { + // (Avant le contrôleur) + var chronometre = Stopwatch.StartNew(); // lance le chrono + + // C'est ici que le reste de l'application s'exécute (autres middlewares et Contrôleur) + await this.next(context); + + // (Après le contrôleur) + chronometre.Stop(); // arrête le chrono + var tempsEcoule = chronometre.ElapsedMilliseconds; + + // écrit dans les logs l'URL de la page et le temps qu'elle a pris + var urlPage = context.Request.Path; + this.logger.LogInformation($"[MIDDLEWARE] La page {urlPage} a mis {tempsEcoule} ms à charger."); + } + } +} \ No newline at end of file diff --git a/Webzine.WebApplication/Program.cs b/Webzine.WebApplication/Program.cs index 916d86e..cf6fa9e 100644 --- a/Webzine.WebApplication/Program.cs +++ b/Webzine.WebApplication/Program.cs @@ -73,6 +73,8 @@ try var app = builder.Build(); + app.UseMiddleware(); + if (repositoryType == RepositoryType.Db) { using (var scope = app.Services.CreateScope())