aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/IStudioModule.cs
blob: 6963892fa0a5596010377564a90ec77f661cd361 (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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media.Imaging;
using Tango.BL.Entities;
using Tango.BL.Enumerations;

namespace Tango.MachineStudio.Common
{
    /// <summary>
    /// Represents a Machine Studio module.
    /// </summary>
    /// <seealso cref="System.IDisposable" />
    public interface IStudioModule : IDisposable
    {
        /// <summary>
        /// Gets the module name.
        /// </summary>
        String Name { get; }

        /// <summary>
        /// Gets the module description.
        /// </summary>
        String Description { get; }

        /// <summary>
        /// Gets the module cover image.
        /// </summary>
        BitmapSource Image { get; }

        /// <summary>
        /// Gets the module entry point view type.
        /// </summary>
        Type MainViewType { get; }

        /// <summary>
        /// Gets or sets a value indicating whether this module is shown under a new window.
        /// </summary>
        bool InNewWindow { get; set; }

        /// <summary>
        /// Gets the permission required to see and load this module.
        /// </summary>
        Permissions Permission { get; }

        /// <summary>
        /// Gets a value indicating whether this module has been initialized.
        /// </summary>
        bool IsInitialized { get; }

        /// <summary>
        /// Perform any operations required to initialize this module.
        /// </summary>
        void Initialize();

        /// <summary>
        /// Sets a value indicating whether this module is loaded.
        /// </summary>
        bool IsLoaded { set; get; }
    }
}
lass="n">_timelineJobStatusSeries; public LabeledSeriesCollection TimelineJobStatusSeries { get { return _timelineJobStatusSeries; } set { _timelineJobStatusSeries = value; RaisePropertyChangedAuto(); } } private LabeledSeriesCollection _pieJobFailedReasons; public LabeledSeriesCollection PieJobFailedReasons { get { return _pieJobFailedReasons; } set { _pieJobFailedReasons = value; RaisePropertyChangedAuto(); } } public MainViewVM() { } public override void OnApplicationReady() { Task.Factory.StartNew(() => { _context = ObservablesContext.CreateDefault(); DateTime start_date = DateTime.UtcNow.AddMonths(-1); _job_runs = _context.JobRuns.OrderBy(x => x.StartDate).ToList(); }); } private List<JobRun> GetJobRunsByStartDate(DateTime startDate, JobRunStatus? status = null) { return _job_runs.Where(x => x.StartDate.ToLocalTime() >= startDate && (status == null || x.JobRunStatus == status)).ToList(); } private List<JobRun> GetJobRunsByDate(DateTime date, JobRunStatus? status = null) { return _job_runs.Where(x => x.StartDate.ToLocalTime().Date == date.Date && (status == null || x.JobRunStatus == status)).ToList(); } private IEnumerable<DateTime> CreateDates(DateTime start, DateTime end) { for (DateTime date = start.Date; date.Date <= end.Date; date = date.AddDays(1)) { yield return date; } } public override void OnNavigatedTo() { base.OnNavigatedTo(); if (rendered) return; rendered = true; InvokeUIOnIdle(() => { GenerateTimelineJobStatusChart(); GeneratePieFailedReasonsChart(); }); } private void GenerateTimelineJobStatusChart() { TimelineJobStatusSeries = new LabeledSeriesCollection() { Title = "This Month Job Runs Status", ChartTitle = "Number Of Runs", LabelsTitle = "Date", SeriesColors = new List<Color>() { Colors.Green, Colors.Orange, Colors.Red, }, }; 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, }; foreach (var date in CreateDates(DateTime.Now.AddMonths(-1), DateTime.Now)) { completed_job_runs.Values.Add(GetJobRunsByDate(date, JobRunStatus.Completed).Count()); aborted_job_runs.Values.Add(GetJobRunsByDate(date, JobRunStatus.Aborted).Count()); failed_job_runs.Values.Add(GetJobRunsByDate(date, 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); } private void GeneratePieFailedReasonsChart() { var groups = GetJobRunsByStartDate(DateTime.Now.AddMonths(-1), JobRunStatus.Failed).GroupBy(x => x.FailedMessage).OrderBy(x => x.Count()); List<Color> colors = new List<Color>(); int max = groups.Max(x => x.Count()); for (int i = 0; i < groups.Count(); i++) { int count = groups.ElementAt(i).Count(); double alpha = Math.Max(((double)(count) / max * 200), 20); colors.Add(Color.FromArgb((byte)alpha, 200, 0, 0)); } PieJobFailedReasons = new LabeledSeriesCollection() { Title = "This Month Job Failure Reasons", SeriesColors = colors, }; int index = 0; foreach (var group in groups) { int count = group.Count(); var series = new PieSeries() { Title = group.First().FailedMessage, Values = new ChartValues<int>() { count }, Fill = new SolidColorBrush(colors[index++]), DataLabels = true, ToolTip = group.First().FailedMessage, }; PieJobFailedReasons.SeriesCollection.Add(series); } } } }