using Newtonsoft.Json; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace EgwControlCenter.Core { public class TaskRunStats { #region Public Constructors /// /// init da vuoto /// public TaskRunStats() { // init generico senza reload file } /// /// Init classe con rilettura dati /// public TaskRunStats(string appDir, string confName) { AppDir = appDir; ConfName = confName; // inizio rileggendo (se presenti) dati conf da disco tryReload(); } #endregion Public Constructors #region Public Properties /// /// Tempo medio complessivo registrato /// public TimeSpan AvgTotalTime { get { TimeSpan answ = new TimeSpan(); if (TaskData != null && TaskData.Count > 0) { foreach (var record in TaskData) { answ += record.Value.AvgTime; } } return answ; } } /// /// nome del task registrato /// public Dictionary TaskData { get; set; } = new Dictionary(); #endregion Public Properties #region Public Methods /// /// Tempo medio per un Task /// public TimeSpan AvgTaskTime(string taskName) { TimeSpan answ = new TimeSpan(); if (TaskData != null && TaskData.Count > 0) { if (TaskData.ContainsKey(taskName)) { answ = TaskData[taskName].AvgTime; } } return answ; } /// /// Registro una singola esecuzione x effettuare valutazioni successive... /// /// /// public void RecordExeData(string taskName, TimeSpan duration) { // cerco nel dizionario se presente if (TaskData.ContainsKey(taskName)) { TaskData[taskName].NumRun++; TaskData[taskName].TotalTime += duration; } else { TaskData.Add(taskName, new TaskStat() { NumRun = 1, TotalTime = duration }); } } /// /// Salva le statistiche su disco /// public void SaveToDisk() { var rawData = JsonConvert.SerializeObject(TaskData, Formatting.Indented); if (rawData != null && rawData.Length > 2) { File.WriteAllText(StatsPath, rawData); } } #endregion Public Methods #region Private Fields private static Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields #region Private Properties private string AppDir { get; set; } = ""; private string ConfName { get; set; } = ""; /// /// Path file di conf check /// private string StatsPath { get => Path.Combine(AppDir, ConfName); } #endregion Private Properties #region Private Methods private void tryReload() { if (File.Exists(StatsPath)) { string rawData = File.ReadAllText(StatsPath); if (!string.IsNullOrEmpty(rawData) && rawData.Length > 2) { try { TaskData = JsonConvert.DeserializeObject>(rawData); } catch (Exception exc) { Log.Error($"Eccezione in tryReload:{Environment.NewLine}{exc}"); } } } } #endregion Private Methods } }