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() { 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(), Fill = Brushes.Green, }; var aborted_job_runs = new ColumnSeries() { Title = "Aborted", Values = new ChartValues(), Fill = Brushes.Orange, }; var failed_job_runs = new ColumnSeries() { Title = "Failed", Values = new ChartValues(), 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); }); }); } } }