aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs69
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/JobRunsViewVM.cs64
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml35
4 files changed, 133 insertions, 37 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs
index 3c25bfe4f..23d7564e8 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Converters/NanoLiterToLiterFormatConverter.cs
@@ -14,7 +14,7 @@ namespace Tango.MachineStudio.Statistics.Converters
{
try
{
- double val =(double) ((int)value) / 1000000;
+ double val =(double) ((int)value) / 1000000000;
return val.ToString("N2", CultureInfo.InvariantCulture);
}
catch{ }
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs
index 2a298777b..287e09009 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Models/StatisticsValueCollection.cs
@@ -11,6 +11,8 @@ using System.Windows.Media;
using Tango.BL.Enumerations;
using Tango.BL.ValueObjects;
using Tango.Core;
+using System.Windows.Media;
+using System.Windows;
namespace Tango.MachineStudio.Statistics.Models
{
@@ -35,6 +37,9 @@ namespace Tango.MachineStudio.Statistics.Models
private ObservableCollection<StatisticsValue> _statisticsCollection;
+ /// <summary>
+ /// Gets or sets the statistics collection of StatisticsValue object.
+ /// </summary>
public ObservableCollection<StatisticsValue> StatisticsCollection
{
get { return _statisticsCollection; }
@@ -44,16 +49,25 @@ namespace Tango.MachineStudio.Statistics.Models
}
private List<StatisticsValue> _threadConsumptionPerThread;
-
+ /// <summary>
+ /// Gets or sets the thread consumption per thread list.
+ /// </summary>
public List<StatisticsValue> ThreadConsumptionPerThread
{
get { return _threadConsumptionPerThread; }
set { _threadConsumptionPerThread = value; RaisePropertyChangedAuto(); }
}
+ /// <summary>
+ /// Gets or sets the thread consumption per thread collection.
+ /// </summary>
public CompositeCollection ThreadConsumptionPerThreadCollection { get; set; }
private LabeledSeriesCollection _pieJobSource;
+
+ /// <summary>
+ /// Gets or sets the pie job source.
+ /// </summary>
public LabeledSeriesCollection PieJobSource
{
get { return _pieJobSource; }
@@ -61,6 +75,10 @@ namespace Tango.MachineStudio.Statistics.Models
}
private LabeledSeriesCollection _pieJobRunStatus;
+
+ /// <summary>
+ /// Gets or sets the pie job run status.
+ /// </summary>
public LabeledSeriesCollection PieJobRunStatus
{
get { return _pieJobRunStatus; }
@@ -68,6 +86,10 @@ namespace Tango.MachineStudio.Statistics.Models
}
private LabeledSeriesCollection _pieGradientSolid;
+
+ /// <summary>
+ /// Gets or sets the pie gradient solid.
+ /// </summary>
public LabeledSeriesCollection PieGradientSolid
{
get { return _pieGradientSolid; }
@@ -75,6 +97,10 @@ namespace Tango.MachineStudio.Statistics.Models
}
private List<JobRunLiquidQuantity> _liquidQuantities;
+
+ /// <summary>
+ /// Gets or sets the liquid quantities.
+ /// </summary>
public List<JobRunLiquidQuantity> LiquidQuantities
{
get
@@ -91,6 +117,9 @@ namespace Tango.MachineStudio.Statistics.Models
private int _totalLiquidQuantities;
+ /// <summary>
+ /// Gets or sets the total liquid quantities.
+ /// </summary>
public int TotalLiquidQuantities
{
get { return _totalLiquidQuantities; }
@@ -106,8 +135,10 @@ namespace Tango.MachineStudio.Statistics.Models
ThreadConsumptionPerThreadCollection = new CompositeCollection();
_pieColors = new List<Color>();
- _pieColors.Add(Color.FromRgb(239, 131, 43));//green
- _pieColors.Add(Color.FromRgb(144, 233, 144));//orange
+ _pieColors.Add(((SolidColorBrush)Application.Current.Resources["RedBrush100"]).Color);
+ _pieColors.Add(((SolidColorBrush)Application.Current.Resources["OrangeBrush300"]).Color);
+ _pieColors.Add(((SolidColorBrush)Application.Current.Resources["GreenBrush300"]).Color);
+ _pieColors.Add(((SolidColorBrush)Application.Current.Resources["BlueBrush100"]).Color);
_pieColors.Add(Color.FromRgb(100, 184, 236));//blue
@@ -128,6 +159,9 @@ namespace Tango.MachineStudio.Statistics.Models
};
}
+ /// <summary>
+ /// Cleans all values.
+ /// </summary>
public void Clean()
{
StatisticsCollection.Clear();
@@ -138,21 +172,27 @@ namespace Tango.MachineStudio.Statistics.Models
PieGradientSolid.SeriesCollection.Clear();
}
- public void AddStatisticsValue( string name, double value, string unit)
+ /// <summary>
+ /// Adds the statistics value.
+ /// </summary>
+ public void AddStatisticsValue(string name, double value, string unit)
{
- StatisticsCollection.Add(new StatisticsValue() { Name = name, Value=value, Unit = unit });
+ StatisticsCollection.Add(new StatisticsValue() { Name = name, Value = value, Unit = unit });
RaisePropertyChanged("StatisticsCollection");
}
+ /// <summary>
+ /// Creates the thread consumption per thread.
+ /// </summary>
public void CreateThreadConsumptionPerThread(List<StatisticsValue> threads)
{
ThreadConsumptionPerThreadCollection.Add(new CollectionContainer() { Collection = threads.Take(threads.Count() > 2 ? 2 : threads.Count()) });
if (threads.Count() > 2)
{
- ThreadConsumptionPerThreadCollection.Add(new CollectionContainer() { Collection = new List<MoreValue>() { new MoreValue(){ Text="More threads ..." } } });
+ ThreadConsumptionPerThreadCollection.Add(new CollectionContainer() { Collection = new List<MoreValue>() { new MoreValue() { Text = "More threads ..." } } });
ThreadConsumptionPerThread = threads.Skip(2).ToList();
}
-
+
RaisePropertyChanged("ThreadConsumptionPerThreadCollection");
}
@@ -166,7 +206,7 @@ namespace Tango.MachineStudio.Statistics.Models
{
Title = "PPC",
Values = new ChartValues<int>() { PPCCount },
- Fill = new SolidColorBrush(_pieColors[0]),
+ Fill = new SolidColorBrush(_pieColors[2]),
DataLabels = true,
ToolTip = "",
LabelPoint = labelPoint
@@ -179,7 +219,7 @@ namespace Tango.MachineStudio.Statistics.Models
{
Title = "MS",
Values = new ChartValues<int>() { MSCount },
- Fill = new SolidColorBrush(_pieColors[2]),
+ Fill = new SolidColorBrush(_pieColors[3]),
DataLabels = true,
ToolTip = "",
LabelPoint = labelPoint
@@ -206,7 +246,7 @@ namespace Tango.MachineStudio.Statistics.Models
{
Title = "Aborted",
Values = new ChartValues<int>() { abortedCount },
- Fill = new SolidColorBrush(_pieColors[2]),
+ Fill = new SolidColorBrush(_pieColors[1]),
DataLabels = true,
ToolTip = "",
LabelPoint = labelPoint,
@@ -218,7 +258,7 @@ namespace Tango.MachineStudio.Statistics.Models
{
Title = "Completed",
Values = new ChartValues<int>() { completedCount },
- Fill = new SolidColorBrush(_pieColors[1]),
+ Fill = new SolidColorBrush(_pieColors[2]),
DataLabels = true,
ToolTip = "",
LabelPoint = labelPoint
@@ -234,7 +274,7 @@ namespace Tango.MachineStudio.Statistics.Models
{
Title = "Solid",
Values = new ChartValues<int>() { solidCount },
- Fill = new SolidColorBrush(_pieColors[0]),
+ Fill = new SolidColorBrush(_pieColors[2]),
DataLabels = true,
ToolTip = "",
LabelPoint = labelPoint
@@ -245,7 +285,7 @@ namespace Tango.MachineStudio.Statistics.Models
{
Title = "Gradient",
Values = new ChartValues<int>() { gradientCount },
- Fill = new SolidColorBrush(_pieColors[2]),
+ Fill = new SolidColorBrush(_pieColors[3]),
DataLabels = true,
ToolTip = "",
LabelPoint = labelPoint
@@ -259,6 +299,9 @@ namespace Tango.MachineStudio.Statistics.Models
}
#endregion
+ /// <summary>
+ /// Generates the statistics liquid quantity and TotalLiquidQuantities.
+ /// </summary>
public void GenerateStatisticsLiquidQuantity(List<JobRunLiquidQuantity> liquidQuantities)
{
LiquidQuantities = liquidQuantities;
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 9bf69137d..ca40273f9 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
@@ -177,7 +177,7 @@ namespace Tango.MachineStudio.Statistics.ViewModels
private Job _selectedJob;
/// <summary>
- /// Gets or sets the job. Used as Sele
+ /// Gets or sets the job.
/// </summary>
public Job SelectedJob
{
@@ -189,6 +189,9 @@ namespace Tango.MachineStudio.Statistics.ViewModels
}
}
+ /// <summary>
+ /// Gets or sets the statistics value collection. Class - container included calculated statistic values.
+ /// </summary>
public StatisticsValueCollection StatisticsValueCollection { get; set; }
#endregion
@@ -356,54 +359,76 @@ namespace Tango.MachineStudio.Statistics.ViewModels
}
}
+ #region GenerateS_StatisticsValueCollection
+
+ /// <summary>
+ /// Generates the statistics.
+ /// </summary>
protected void GenerateStatistics()
{
StatisticsValueCollection.Clean();
GenerateTotalRunsLength();
- GenerateRunsDuration();
- GenerateUploadDuration();
- GenerateHeatingDuration();
GenerateTotalThreadConsumption();
+ GenerateRunsDuration();
+ GenerateAverageUploadDuration();
+ GenerateAverageHeatingDuration();
GeneratePieCharts();
CreateThreadConsumptionPerThread();
GenerateAllLiquidQuantities();
}
-
+
+ /// <summary>
+ /// Generates the total length of the job runs.
+ /// </summary>
protected void GenerateTotalRunsLength()
{
double val = JobRuns.Where(z => z.JobRun.EndPosition > 0).Sum(x => x.JobRun.JobLength);
StatisticsValueCollection.AddStatisticsValue("Total Runs Length", val, " m");
}
+ /// <summary>
+ /// Generates the duration and average of the job runs.
+ /// </summary>
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");
+ double average = selection.Average(x => (x.JobRun.EndDate - x.JobRun.ActualStartDate).Value.TotalMilliseconds);
+ StatisticsValueCollection.AddStatisticsValue("Average Runs Duration", Math.Max(TimeSpan.FromMilliseconds(average).TotalHours, 0), " hours");
}
- protected void GenerateUploadDuration()
+ /// <summary>
+ /// Generates the average upload duration of the job runs.
+ /// </summary>
+ protected void GenerateAverageUploadDuration()
{
- var val = (long)JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.UploadDuration != null).Average(x => x.UploadDuration.Value.TotalMilliseconds);
- StatisticsValueCollection.AddStatisticsValue("Average Upload Duration", Math.Max(TimeSpan.FromMilliseconds(val).TotalMinutes, 0), " minutes");
+ var average = (long)JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.UploadDuration != null).Average(x => x.UploadDuration.Value.TotalMilliseconds);
+ StatisticsValueCollection.AddStatisticsValue("Average Upload Duration", Math.Max(TimeSpan.FromMilliseconds(average).TotalMinutes, 0), " minutes");
}
- protected void GenerateHeatingDuration()
+ /// <summary>
+ /// Generates the average duration heating of the job runs.
+ /// </summary>
+ protected void GenerateAverageHeatingDuration()
{
- 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");
+ var average = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.HeatingDuration != null && z.HeatingDuration.Value.Ticks > 0).Average(x => x.HeatingDuration.Value.TotalMilliseconds);
+ StatisticsValueCollection.AddStatisticsValue("Average Heating Duration", Math.Max(TimeSpan.FromMilliseconds(average).TotalMinutes, 0), " minutes");
}
+ /// <summary>
+ /// Generates the total thread consumption by EndPosition.
+ /// </summary>
protected void GenerateTotalThreadConsumption()
{
double val = JobRuns.Where(z => z.JobRun.EndPosition > 0).Sum(x => x.JobRun.EndPosition);
- StatisticsValueCollection.AddStatisticsValue("Total Thread Consumption", val, " m");
+ StatisticsValueCollection.AddStatisticsValue("Actual Total Runs Length", val, " m");
}
+ /// <summary>
+ /// Generates the pie charts in percentage: JobSource, JobRunStatus, Gradient.
+ /// </summary>
protected void GeneratePieCharts()
{
int PPCCount = JobRuns.Count(x => x.JobRun.Source == JobSource.Local);
@@ -421,6 +446,9 @@ namespace Tango.MachineStudio.Statistics.ViewModels
}
+ /// <summary>
+ /// Creates the thread consumption per thread.
+ /// </summary>
protected void CreateThreadConsumptionPerThread()
{
var temp = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.Rml != null).GroupBy(x => x.Rml.Name);
@@ -428,6 +456,9 @@ namespace Tango.MachineStudio.Statistics.ViewModels
StatisticsValueCollection.CreateThreadConsumptionPerThread(result);
}
+ /// <summary>
+ /// Generates all liquid quantities.
+ /// </summary>
protected void GenerateAllLiquidQuantities()
{
var db_liquidQuantities = JobRuns.Where(z => z.JobRun.EndPosition > 0 && z.JobRun.LiquidQuantities.Count > 0).Select(y => y.JobRun.LiquidQuantities).ToList();
@@ -435,13 +466,14 @@ namespace Tango.MachineStudio.Statistics.ViewModels
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 liquidQuantityByTypeList = db_liquidQuantities.Select(x => x.FirstOrDefault(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);
}
+ #endregion
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
index 4790402d5..057647858 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/Views/JobRunsView.xaml
@@ -552,15 +552,26 @@
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
- <TextBlock Text="{Binding Name}"/>
+ <TextBlock Text="{Binding Name}" FontWeight="SemiBold"/>
<TextBlock Text=": "/>
- <TextBlock Text="{Binding Value, StringFormat={}{0:0.0}}"/>
+ <TextBlock Text="{Binding Value, StringFormat={}{0:0.00}}"/>
<TextBlock Text="{Binding Unit}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
- <TextBlock Margin="0 10 0 0">Total Thread Consumption per thread:</TextBlock>
+ <TextBlock Margin="0 10 0 0" Text="Total Thread Consumption per thread:" FontWeight="SemiBold">
+ <TextBlock.Style>
+ <Style TargetType="TextBlock">
+ <Setter Property="Visibility" Value="Visible" />
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding StatisticsValueCollection.ThreadConsumptionPerThreadCollection.Count}" Value="0">
+ <Setter Property="Visibility" Value="Collapsed" />
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBlock.Style>
+ </TextBlock>
<ItemsControl ItemsSource="{Binding StatisticsValueCollection.ThreadConsumptionPerThreadCollection}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
@@ -570,7 +581,7 @@
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type model:StatisticsValue}">
<StackPanel Orientation="Horizontal">
- <TextBlock Text="{Binding Name}"/>
+ <TextBlock Text="{Binding Name}" FontWeight="SemiBold"/>
<TextBlock Text=": "/>
<TextBlock Text="{Binding Value, StringFormat={}{0:0.0}}"/>
<TextBlock Text="{Binding Unit}"/>
@@ -586,7 +597,7 @@
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="2">
- <TextBlock Margin="5 0 0 0" Text="{Binding Name}"></TextBlock>
+ <TextBlock Margin="5 0 0 0" Text="{Binding Name}" FontWeight="SemiBold"/>
<TextBlock Text=": "/>
<TextBlock Text="{Binding Value, StringFormat={}{0:0.0}}"/>
<TextBlock Text="{Binding Unit}"/>
@@ -655,7 +666,7 @@
</Ellipse.Fill>
</Ellipse>
<StackPanel Orientation="Vertical" Margin="4">
- <TextBlock Text="{Binding LiquidType,Converter={StaticResource EnumToDescriptionConverter}}"></TextBlock>
+ <TextBlock Text="{Binding LiquidType,Converter={StaticResource EnumToDescriptionConverter}}" FontWeight="SemiBold"></TextBlock>
<TextBlock >
<Run Text="{Binding Quantity, Converter={StaticResource NanoLiterToLiterFormatConverter}}"></Run>
<Run Text=" liters"></Run>
@@ -666,9 +677,19 @@
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock DockPanel.Dock="Bottom" Margin="4 10 0 0 ">
- <Run Text="Total liquid quantities for all: "/>
+ <Run Text="Total liquid quantities for all: " FontWeight="SemiBold"/>
<Run Text="{Binding StatisticsValueCollection.TotalLiquidQuantities, Converter={StaticResource NanoLiterToLiterFormatConverter}}"></Run>
<Run Text=" liters"></Run>
+ <TextBlock.Style>
+ <Style TargetType="TextBlock">
+ <Setter Property="Visibility" Value="Visible" />
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding StatisticsValueCollection.LiquidQuantities.Count}" Value="0">
+ <Setter Property="Visibility" Value="Collapsed" />
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBlock.Style>
</TextBlock>
</DockPanel>
</Border>