From 84672fbd7d507cae59ba34b86f6113848c2f4eea Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 26 May 2021 19:43:08 +0200 Subject: [PATCH] Aggiunto logging e misura tempi recupero dati --- MP.Data/Controllers/MpStatsController.cs | 8 ++++- MP.Stats/Data/MpStatsService.cs | 40 ++++++++++++++++++++- MP.Stats/MP.Stats.csproj | 3 +- MP.Stats/NLog.config | 46 ++++++++++++++++++++++++ MP.Stats/Program.cs | 40 +++++++++++++++++---- MP.Stats/Startup.cs | 15 +++----- 6 files changed, 132 insertions(+), 20 deletions(-) create mode 100644 MP.Stats/NLog.config diff --git a/MP.Data/Controllers/MpStatsController.cs b/MP.Data/Controllers/MpStatsController.cs index 8a01f41f..d02a1c02 100644 --- a/MP.Data/Controllers/MpStatsController.cs +++ b/MP.Data/Controllers/MpStatsController.cs @@ -27,7 +27,7 @@ namespace MP.Data.Controllers { _configuration = configuration; dbCtx = new MoonPro_STATSContext(configuration); - Log.Info("Avviata classe MpStatsController.MpStatsController"); + Log.Info("Avviata classe MpStatsController"); } #endregion Public Constructors @@ -111,6 +111,12 @@ namespace MP.Data.Controllers return dbResult; } + public void ResetController() + { + dbCtx = new MoonPro_STATSContext(_configuration); + Log.Info("Effettuato reset MpStatsController"); + } + /// /// Annulla modifiche su una specifica entity (cancel update) /// diff --git a/MP.Stats/Data/MpStatsService.cs b/MP.Stats/Data/MpStatsService.cs index 659d7a45..123f1a8f 100644 --- a/MP.Stats/Data/MpStatsService.cs +++ b/MP.Stats/Data/MpStatsService.cs @@ -10,6 +10,8 @@ using MP.Data; using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json; +using System.Diagnostics; +using NLog; namespace MP.Stats.Data { @@ -21,6 +23,7 @@ namespace MP.Stats.Data private static ILogger _logger; private static List ActionsList = new List(); + private static NLog.Logger Log = LogManager.GetCurrentClassLogger(); private readonly IDistributedCache distributedCache; private readonly IMemoryCache memoryCache; @@ -31,7 +34,7 @@ namespace MP.Stats.Data /// /// Durata della cache in modalità inattiva (non acceduta) prima di venire rimossa - /// NON estende oltre il tempo massimo di validità Abs della cache + /// NON estende oltre il tempo massimo di validità della cache (chAbsExp) /// private int chSliExp = 5; @@ -116,10 +119,15 @@ namespace MP.Stats.Data } else { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); dbResult = dbController.ActionsGetAll(); rawData = JsonConvert.SerializeObject(dbResult); redisDataList = Encoding.UTF8.GetBytes(rawData); await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Info($"Effettuata lettura da DB + caching per AzioniUL: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); } @@ -187,10 +195,15 @@ namespace MP.Stats.Data } else { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); dbResult = dbController.StatControlliGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); rawData = JsonConvert.SerializeObject(dbResult); redisDataList = Encoding.UTF8.GetBytes(rawData); await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Info($"Effettuata lettura da DB + caching per ResControlli: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); } @@ -209,10 +222,15 @@ namespace MP.Stats.Data } else { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); dbResult = dbController.StatDdbGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); rawData = JsonConvert.SerializeObject(dbResult); redisDataList = Encoding.UTF8.GetBytes(rawData); await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Info($"Effettuata lettura da DB + caching per DdbTurni: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); } @@ -231,10 +249,15 @@ namespace MP.Stats.Data } else { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); dbResult = dbController.StatOdlGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); rawData = JsonConvert.SerializeObject(dbResult); redisDataList = Encoding.UTF8.GetBytes(rawData); await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Info($"Effettuata lettura da DB + caching per ODL: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); } @@ -253,10 +276,15 @@ namespace MP.Stats.Data } else { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); dbResult = dbController.StatScartiGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); rawData = JsonConvert.SerializeObject(dbResult); redisDataList = Encoding.UTF8.GetBytes(rawData); await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Info($"Effettuata lettura da DB + caching per ResScarti: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); } @@ -279,10 +307,15 @@ namespace MP.Stats.Data } else { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); dbResult = dbController.StatTurniOeeGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); rawData = JsonConvert.SerializeObject(dbResult); redisDataList = Encoding.UTF8.GetBytes(rawData); await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Info($"Effettuata lettura da DB + caching per TurniOee: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); } @@ -301,10 +334,15 @@ namespace MP.Stats.Data } else { + Stopwatch stopWatch = new Stopwatch(); + stopWatch.Start(); dbResult = dbController.StatUserLogGetAll(CurrFilter.DateStart, CurrFilter.DateEnd, CurrFilter.IdxMacchina, CurrFilter.IdxOdl, CurrFilter.KeyRichiesta, CurrFilter.CodArticolo); rawData = JsonConvert.SerializeObject(dbResult); redisDataList = Encoding.UTF8.GetBytes(rawData); await distributedCache.SetAsync(cacheKey, redisDataList, cacheOpt); + stopWatch.Stop(); + TimeSpan ts = stopWatch.Elapsed; + Log.Info($"Effettuata lettura da DB + caching per UserActionLog: {ts.TotalMilliseconds} ms"); } return await Task.FromResult(dbResult); } diff --git a/MP.Stats/MP.Stats.csproj b/MP.Stats/MP.Stats.csproj index dd1c46ad..c373b569 100644 --- a/MP.Stats/MP.Stats.csproj +++ b/MP.Stats/MP.Stats.csproj @@ -4,7 +4,7 @@ net5.0 MP.Stats 826e877c-ba70-4253-84cb-d0b1cafd4440 - 1.0.2105.2519 + 1.0.2105.2619 @@ -40,6 +40,7 @@ + diff --git a/MP.Stats/NLog.config b/MP.Stats/NLog.config new file mode 100644 index 00000000..b98c52ca --- /dev/null +++ b/MP.Stats/NLog.config @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/MP.Stats/Program.cs b/MP.Stats/Program.cs index f159f7fc..1726dc14 100644 --- a/MP.Stats/Program.cs +++ b/MP.Stats/Program.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; +using NLog.Web; using System; using System.Collections.Generic; using System.Linq; @@ -11,16 +12,43 @@ namespace MP.Stats { public class Program { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } + #region Public Methods public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); - }); + }) + .ConfigureLogging(logging => + { + logging.ClearProviders(); + logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); + }) + .UseNLog(); + + public static void Main(string[] args) + { + // inclusione NLog: + // https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-5 + // https://codewithmukesh.com/blog/logging-with-nlog-in-aspnet-core/ + var logger = NLog.Web.NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger(); + try + { + logger.Info("MP.STATS Application Starting Up"); + CreateHostBuilder(args).Build().Run(); + } + catch (Exception exception) + { + logger.Error(exception, "Stopped MP.STATS program because of exception"); + throw; + } + finally + { + NLog.LogManager.Shutdown(); + } + } + + #endregion Public Methods } -} +} \ No newline at end of file diff --git a/MP.Stats/Startup.cs b/MP.Stats/Startup.cs index 4de03884..b835f23a 100644 --- a/MP.Stats/Startup.cs +++ b/MP.Stats/Startup.cs @@ -1,22 +1,15 @@ +using Blazorise; +using Blazorise.Bootstrap; +using Blazorise.Icons.FontAwesome; using ElmahCore.Mvc; -using ElmahCore.Sql; using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.HttpsPolicy; +using Microsoft.AspNetCore.Localization; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using MP.Stats.Data; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Localization; using System.Globalization; -using Blazorise; -using Blazorise.Bootstrap; -using Blazorise.Icons.FontAwesome; namespace MP.Stats {