aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Statistics/ViewModels/MainViewVM.cs
blob: f09ed2e0d20382f7e28d6b9e4eb0ff90947ccc0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using LiveCharts;
using LiveCharts.Wpf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using Tango.BL;
using Tango.BL.Enumerations;
using Tango.MachineStudio.Common;
using Tango.MachineStudio.Statistics.Models;

namespace Tango.MachineStudio.Statistics.ViewModels
{
    public class MainViewVM : StudioViewModel
    {
        private ObservablesContext _context;

        private LabeledSeriesCollection _timelineJobStatusSeries;
        public LabeledSeriesCollection TimelineJobStatusSeries
        {
            get { return _timelineJobStatusSeries; }
            set { _timelineJobStatusSeries = value; RaisePropertyChangedAuto(); }
        }

        public MainViewVM()
        {
            TimelineJobStatusSeries = new LabeledSeriesCollection()
            {
                ChartTitle = "Monthly Job Runs",
                LabelsTitle = "Date",
                SeriesColors = new List<Color>()
                {
                     Colors.Green,
                     Colors.Orange,
                     Colors.Red,
                },
            };
        }

        public override void OnApplicationReady()
        {
            Task.Factory.StartNew(() =>
            {
                _context = ObservablesContext.CreateDefault();
                DateTime start_date = DateTime.UtcNow.AddMonths(-1);
                var jobs_runs = _context.JobRuns.Where(x => x.StartDate > start_date).OrderBy(x => x.StartDate).ToList();

                InvokeUIOnIdle(() =>
                {
                    var completed_job_runs = new ColumnSeries()
                    {
                        Title = "Completed",
                        Values = new ChartValues<int>(),
                        Fill = Brushes.Green,
                    };
                    var aborted_job_runs = new ColumnSeries()
                    {
                        Title = "Aborted",
                        Values = new ChartValues<int>(),
                        Fill = Brushes.Orange,
                    };
                    var failed_job_runs = new ColumnSeries()
                    {
                        Title = "Failed",
                        Values = new ChartValues<int>(),
                        Fill = Brushes.Red,
                    };

                    for (DateTime date = DateTime.Now.AddMonths(-1); date.Date <= DateTime.Now.Date; date = date.AddDays(1))
                    {
                        completed_job_runs.Values.Add(jobs_runs.Where(x => x.StartDate.ToLocalTime().Date == date.Date && x.JobRunStatus == JobRunStatus.Completed).Count());
                        aborted_job_runs.Values.Add(jobs_runs.Where(x => x.StartDate.ToLocalTime().Date == date.Date && x.JobRunStatus == JobRunStatus.Aborted).Count());
                        failed_job_runs.Values.Add(jobs_runs.Where(x => x.StartDate.ToLocalTime().Date == date.Date && x.JobRunStatus == JobRunStatus.Failed).Count());

                        TimelineJobStatusSeries.Labels.Add(date.ToShortDateString());
                    }

                    TimelineJobStatusSeries.SeriesCollection.Add(completed_job_runs);
                    TimelineJobStatusSeries.SeriesCollection.Add(aborted_job_runs);
                    TimelineJobStatusSeries.SeriesCollection.Add(failed_job_runs);
                });
            });
        }
    }
}