using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web; using Tango.BL.Entities; using Tango.Portal.Enumerations; using Tango.Portal.Models; namespace Tango.Portal.Utils { public class StatisticsUtils { private static readonly Lazy _default = new Lazy(() => new StatisticsUtils()); public static StatisticsUtils Default => _default.Value; private Statistics _stats; private DateTime _fetchDate { get; set; } public Statistics GetStats() { if (_stats == null || DateTime.Now > _fetchDate.AddDays(1)) { _fetchDate = DateTime.Now; _stats = new Statistics(); Task.Factory.StartNew(() => { try { foreach (var env in Enum.GetValues(typeof(PortalEnvironment)).Cast()) { using (var db = DbUtils.CreateContext(env)) { var jobRuns = db.JobRuns.Select(x => new { x.ActualStartPosition, x.ActualEndPosition, x.EndPosition, x.Status }) .ToList() .Select(x => new JobRun() { ActualStartPosition = x.ActualStartPosition, ActualEndPosition = x.ActualEndPosition, EndPosition = x.EndPosition, Status = x.Status }) .ToList(); int[] arr = (new List() { BL.Enumerations.TangoUpdateStatuses.DatabaseCompleted, BL.Enumerations.TangoUpdateStatuses.OfflineFirmwareUpgradeCompleted, BL.Enumerations.TangoUpdateStatuses.OfflineUpdateCompleted, BL.Enumerations.TangoUpdateStatuses.SetupCompleted, BL.Enumerations.TangoUpdateStatuses.UpdateCompleted }).Cast().ToArray(); var upgrades = db.TangoUpdates.Where(x => arr.Contains(x.Status)).Count(); _stats.TotalDyedThread += (int)jobRuns.Sum(x => x.Distance) / 1000; _stats.JobsCompleted += jobRuns.Count; _stats.SoftwareUpgrades += upgrades; } } } catch { } }); } return _stats; } private StatisticsUtils() { _stats = new Statistics(); } } }