diff options
| author | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2020-03-12 17:45:30 +0200 |
|---|---|---|
| committer | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2020-03-12 17:45:30 +0200 |
| commit | adeeb0ee759b886f902ace9bb68998e1ecf320a7 (patch) | |
| tree | 2a6b5634238f3906b892f4bc919dec74b8a78309 /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels | |
| parent | 1834b13df30bcf71aab363f9e504c4e79b3f2224 (diff) | |
| download | Tango-adeeb0ee759b886f902ace9bb68998e1ecf320a7.tar.gz Tango-adeeb0ee759b886f902ace9bb68998e1ecf320a7.zip | |
Implement statistic values in Job runs View.
Related Work Items: #2509
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels')
3 files changed, 176 insertions, 29 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs index b06261306..38c1cc24a 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs @@ -12,13 +12,14 @@ using Tango.SharedUI; using Tango.BL; using Tango.MachineStudio.Common.Notifications; using System.Threading.Tasks; +using Tango.Core.Commands; namespace Tango.MachineStudio.Statistics.ViewModels { public class ChartsViewVM : ViewModel { private INotificationProvider _notification; - private ObservablesContext _context; + //private ObservablesContext _context; private List<JobRunStatisticsModel> _job_runs; private bool _loaded; @@ -48,14 +49,14 @@ namespace Tango.MachineStudio.Statistics.ViewModels public DateTime StartDate { get { return _startDate; } - set { _startDate = value; RaisePropertyChangedAuto(); OnDateRangeChanged(); } + set { _startDate = value; RaisePropertyChangedAuto();} } private DateTime _endDate; public DateTime EndDate { get { return _endDate; } - set { _endDate = value; RaisePropertyChangedAuto(); OnDateRangeChanged(); } + set { _endDate = value; RaisePropertyChangedAuto();} } private DateTime _minDate; @@ -71,6 +72,8 @@ namespace Tango.MachineStudio.Statistics.ViewModels get { return _maxDate; } set { _maxDate = value; RaisePropertyChangedAuto(); } } + + public RelayCommand LoadJobRunsCommand { get; set; } #endregion public ChartsViewVM(INotificationProvider notificationProvider) @@ -78,45 +81,93 @@ namespace Tango.MachineStudio.Statistics.ViewModels _notification = notificationProvider; StartDate = DateTime.Now.AddMonths(-1); EndDate = DateTime.Now; + LoadJobRunsCommand = new RelayCommand(async () => await LoadJobRuns(), () => IsFree); } #region Generate Charts - public async void Init() + //public async void Init() + //{ + //using (_notification.PushTaskItem("Loading statistics...")) + //{ + // IsFree = false; + + // await Task.Factory.StartNew(() => + // { + // _context = ObservablesContext.CreateDefault(); + // //_job_runs = _context.JobRuns.OrderBy(x => x.StartDate).ToList().Select(x => new JobRunStatisticsModel(x)).ToList(); + // //foreach (var run in _job_runs) + // //{ + // // run.LoadMachine(_context).GetAwaiter().GetResult(); + // //} + // }); + + // if (_job_runs.Count > 0) + // { + // MinDate = _job_runs.Min(x => x.StartDate); + // MaxDate = _job_runs.Max(x => x.StartDate); + // } + + // InvokeUIOnIdle(() => + // { + // if (_loaded) + // { + // OnDateRangeChanged(); + // } + // }); + + // _loaded = true; + // IsFree = true; + //} + //} + private async Task LoadJobRuns() { using (_notification.PushTaskItem("Loading statistics...")) { - IsFree = false; - - await Task.Factory.StartNew(() => + try { - _context = ObservablesContext.CreateDefault(); - _job_runs = _context.JobRuns.OrderBy(x => x.StartDate).ToList().Select(x => new JobRunStatisticsModel(x)).ToList(); - foreach (var run in _job_runs) + IsFree = false; + + await Task.Factory.StartNew(() => + { + using (var db = ObservablesContext.CreateDefault()) + { + _job_runs = db.JobRuns.OrderBy(x => x.StartDate).ToList().Select(x => new JobRunStatisticsModel(x)).ToList(); + foreach (var run in _job_runs) + { + run.LoadMachine(db).GetAwaiter().GetResult(); + } + + } + }); + if (_job_runs.Count > 0) { - run.LoadMachine(_context).GetAwaiter().GetResult(); + MinDate = _job_runs.Min(x => x.StartDate); + MaxDate = _job_runs.Max(x => x.StartDate); } - }); - if (_job_runs.Count > 0) + InvokeUIOnIdle(() => + { + if (_loaded) + { + OnDateRangeChanged(); + } + }); + + _loaded = true; + } + catch (Exception ex) { - MinDate = _job_runs.Min(x => x.StartDate); - MaxDate = _job_runs.Max(x => x.StartDate); + LogManager.Log(ex, "Error loading statistics."); } - - InvokeUIOnIdle(() => + finally { - if (_loaded) - { - OnDateRangeChanged(); - } - }); - - _loaded = true; - IsFree = true; + IsFree = true; + } } } + private List<JobRunStatisticsModel> GetJobRunsByDateRange(DateTime startDate, DateTime endTime, JobRunStatus? status = null) { return _job_runs.Where(x => x.StartDate.ToLocalTime() >= startDate && x.StartDate.ToLocalTime() <= endTime && (status == null || x.JobRunStatus == status)).ToList(); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs index a51d18909..d57a1c96c 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs @@ -16,6 +16,10 @@ using Tango.MachineStudio.Statistics.Models; using Tango.SharedUI; using Tango.SharedUI.Components; using Tango.AutoComplete.Editors; +using System.Windows.Media; +using LiveCharts.Wpf; +using LiveCharts; +using Tango.BL.ValueObjects; namespace Tango.MachineStudio.Statistics.ViewModels { @@ -184,6 +188,8 @@ namespace Tango.MachineStudio.Statistics.ViewModels RaisePropertyChangedAuto(); } } + + public StatisticsValueCollection StatisticsValueCollection { get; set; } #endregion @@ -261,7 +267,8 @@ namespace Tango.MachineStudio.Statistics.ViewModels return null; } }); - + + StatisticsValueCollection = new StatisticsValueCollection(); } /// <summary> @@ -322,19 +329,21 @@ namespace Tango.MachineStudio.Statistics.ViewModels .Query(y => y.Where(x => ( String.IsNullOrEmpty(jobName) || x.JobName.ToLower().StartsWith(jobName.ToLower())) && (x.JobLength < LengthUpperValue && x.JobLength >= LengthLowerValue))) .BuildListAsync(); - var modelList = runs.Select(x => new JobRunModel() { JobRun = x, Machine = _allMachines.FirstOrDefault(y => y.Guid == x.MachineGuid), User = _allUsers.SingleOrDefault(y => y.Guid == x.UserGuid), - Rml = _rmlsModels.SingleOrDefault(y => y.Guid == x.RmlGuid) + Rml = _rmlsModels.SingleOrDefault(y => y.Guid == x.RmlGuid), }).OrderByDescending(x => x.JobRun.StartDate).ToList(); modelList.ForEach(x => x.Init()); JobRuns = modelList.ToObservableCollection(); + GenerateStatistics(); } + + } catch (Exception ex) { @@ -347,5 +356,93 @@ namespace Tango.MachineStudio.Statistics.ViewModels } } + protected void GenerateStatistics() + { + StatisticsValueCollection.Clean(); + GenerateTotalRunsLength(); + GenerateRunsDuration(); + GenerateUploadDuration(); + GenerateHeatingDuration(); + GenerateTotalThreadConsumption(); + + GeneratePieCharts(); + CreateThreadConsumptionPerThread(); + GenerateAllLiquidQuantities(); + } + + protected void GenerateTotalRunsLength() + { + double val = JobRuns.Where(z => z.JobRun.EndPosition > 0).Sum(x => x.JobRun.JobLength); + StatisticsValueCollection.AddStatisticsValue("Total Runs Length", val, " m"); + } + + protected void GenerateRunsDuration() + { + var selection = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.EndDate != null && z.JobRun.ActualStartDate != null); + double val = selection.Sum(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalHours); + StatisticsValueCollection.AddStatisticsValue("Total Runs Duration", val, " hours"); + double average = selection.Average(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalHours); + StatisticsValueCollection.AddStatisticsValue("Average Runs Duration", average, " hours"); + } + + protected void GenerateUploadDuration() + { + var val = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.UploadDuration != null).Average(x => x.UploadDuration.Value.Ticks); + TimeSpan ts = new TimeSpan(Convert.ToInt64(val)); + StatisticsValueCollection.AddStatisticsValue("Average Upload Duration", Math.Max(ts.TotalMinutes, 0), " minutes"); + } + + protected void GenerateHeatingDuration() + { + var val = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.HeatingDuration != null).Average(x => x.HeatingDuration.Value.Ticks); + TimeSpan ts = new TimeSpan(Convert.ToInt64(val)); + StatisticsValueCollection.AddStatisticsValue("Average Heating Duration", Math.Max(ts.TotalMinutes, 0), " minutes"); + } + + protected void GenerateTotalThreadConsumption() + { + double val = JobRuns.Where(z => z.JobRun.EndPosition > 0).Sum(x => x.JobRun.EndPosition); + StatisticsValueCollection.AddStatisticsValue("Total Thread Consumption", val, " m"); + } + + protected void GeneratePieCharts() + { + int PPCCount = JobRuns.Count(x => x.JobRun.Source == JobSource.Local); + int MSCount = JobRuns.Count(x => x.JobRun.Source == JobSource.Remote); + StatisticsValueCollection.GeneratePieJobSource(PPCCount, MSCount); + + int failedCount = JobRuns.Count(x => x.JobRun.JobRunStatus == JobRunStatus.Failed); + int abortedCount = JobRuns.Count(x => x.JobRun.JobRunStatus == JobRunStatus.Aborted); + int completedCount = JobRuns.Count(x => x.JobRun.JobRunStatus == JobRunStatus.Completed); + StatisticsValueCollection.GeneratePieJobRunStatus(failedCount, abortedCount, completedCount); + + int gradientCount = JobRuns.Count(x => x.JobRun.IsGradient == true); + int solidCount = JobRuns.Count(x => x.JobRun.IsGradient == false); + StatisticsValueCollection.GeneratePieGradientSolid(gradientCount, solidCount); + + } + + protected void CreateThreadConsumptionPerThread() + { + var temp = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.Rml != null).GroupBy(x => x.Rml.Name); + List <StatisticsValue> result = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.Rml != null && !String.IsNullOrEmpty(z.Rml.Name)).GroupBy(x => x.Rml.Name).Select(y => new StatisticsValue { Name = y.Key, Value = y.Sum(x => x.JobRun.EndPosition), Unit="m" }).ToList(); + StatisticsValueCollection.CreateThreadConsumptionPerThread(result); + } + + protected void GenerateAllLiquidQuantities() + { + var db_liquidQuantities = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.LiquidQuantities.Count > 0).Select(y=> y.JobRun.LiquidQuantities).ToList(); + List<JobRunLiquidQuantity> allLiquidQuantities = new List<JobRunLiquidQuantity>(); + + foreach (LiquidTypes ltype in (LiquidTypes[])Enum.GetValues(typeof(LiquidTypes))) + { + var liquidQuantityByTypeList = db_liquidQuantities.Select(x => x.SingleOrDefault(y => y.LiquidType == ltype)).Where(x=>x!=null); + var count = liquidQuantityByTypeList != null ? liquidQuantityByTypeList.Sum(x => x.Quantity) : 0; + JobRunLiquidQuantity lq = new JobRunLiquidQuantity() { LiquidType = ltype, Quantity = count }; + allLiquidQuantities.Add(lq); + } + StatisticsValueCollection.GenerateStatisticsLiquidQuantity(allLiquidQuantities); + } + } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs index 4a75a41c8..e7e2013c5 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs @@ -50,7 +50,6 @@ namespace Tango.MachineStudio.Statistics.ViewModels public override void OnNavigatedTo() { base.OnNavigatedTo(); - ChartsViewVM.Init(); } } } |
