aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2020-03-12 17:45:30 +0200
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2020-03-12 17:45:30 +0200
commitadeeb0ee759b886f902ace9bb68998e1ecf320a7 (patch)
tree2a6b5634238f3906b892f4bc919dec74b8a78309 /Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels
parent1834b13df30bcf71aab363f9e504c4e79b3f2224 (diff)
downloadTango-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')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/ChartsViewVM.cs101
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs103
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs1
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();
}
}
}