using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tango.PPC.Shared.Logs
{
public pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #008800 } /* Keyword.Pseudo */
.highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */
.highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */
.highlight .na { color: #336699 } /* Name.Attribute */
.highlight .nb { color: #003388 } /* Name.Builtin */
.highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */
.highlight .no { color: #003366; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555555 } /* Name.Decorator */
.highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */
.highlight .nl { color: #336699; font-style: italic } /* Name.Label */
.highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #336699; font-weight: bold } /* Name.Property */
.highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #336699 } /* Name.Variable */
.highlight .ow { color: #008800 } /* Operator.Word */
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
.highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */
.highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */
.highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */
.highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */
.highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */
.highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */
.highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */
.highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */
.highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */
.highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */
.highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */
.highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */
.highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */
.highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #336699 } /* Name.Variable.Class */
.highlight .vg { color: #dd7700 } /* Name.Variable.Global */
.highlight .vi { color: #3333bb } /* Name.Variable.Instance */
.highlight .vm { color: #336699 } /* Name.Variable.Magic */
.highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.BL;
using Tango.BL.Entities;
using Tango.BL.Enumerations;
using Tango.PPC.Common;
using Tango.PPC.Common.Notifications;
using Tango.PPC.Common.Notifications.NotificationItems;
using Tango.PPC.Events.Enumerations;
using System.Data.Entity;
using Tango.Integration.Operation;
namespace Tango.PPC.Events.ViewModels
{
/// <summary>
/// Represents the main view VM and entry point for <see cref="Events.EventsModule"/>.
/// </summary>
/// <seealso cref="Tango.PPC.Common.PPCViewModel" />
public class MainViewVM : PPCViewModel
{
private Dictionary<EventTypes, NotificationItem> _notifications;
private EventsSource _selectedEventsSource;
public EventsSource SelectedEventsSource
{
get { return _selectedEventsSource; }
set { _selectedEventsSource = value; RaisePropertyChangedAuto(); }
}
private ObservableCollection<MachinesEvent> _currentEvents;
/// <summary>
/// Gets or sets the current events.
/// </summary>
public ObservableCollection<MachinesEvent> CurrentEvents
{
get { return _currentEvents; }
set { _currentEvents = value; RaisePropertyChangedAuto(); }
}
private MachinesEvent _selectedEvent;
/// <summary>
/// Gets or sets the selected event.
/// </summary>
public MachinesEvent SelectedEvent
{
get { return _selectedEvent; }
set { _selectedEvent = value; RaisePropertyChangedAuto(); }
}
private ObservableCollection<MachinesEvent> _historyEvents;
/// <summary>
/// Gets or sets the history events.
/// </summary>
public ObservableCollection<MachinesEvent> HistoryEvents
{
get { return _historyEvents; }
set { _historyEvents = value; RaisePropertyChangedAuto(); }
}
private MachinesEvent _selectedHistoryEvent;
/// <summary>
/// Gets or sets the selected event.
/// </summary>
public MachinesEvent SelectedHistoryEvent
{
get { return _selectedHistoryEvent; }
set { _selectedHistoryEvent = value; RaisePropertyChangedAuto(); }
}
/// <summary>
/// Initializes a new instance of the <see cref="MainViewVM"/> class.
/// </summary>
public MainViewVM()
{
CurrentEvents = new ObservableCollection<MachinesEvent>();
_notifications = new Dictionary<EventTypes, NotificationItem>();
}
/// <summary>
/// Called when the application has been started
/// </summary>
public override void OnApplicationStarted()
{
EventLogger.EventReceived += EventLogger_EventReceived;
EventLogger.EventResolved += EventLogger_EventResolved;
}
public override async void OnApplicationReady()
{
base.OnApplicationReady();
using (var db = ObservablesContext.CreateDefault())
{
var last_week = DateTime.UtcNow.AddDays(-7);
HistoryEvents = (await db.MachinesEvents.Where(x => x.MachineGuid == MachineProvider.Machine.Guid && x.DateTime > last_week).Include(x => x.EventType).Where(x => (EventTypeNotificationTimes)x.EventType.EventNotificationTime != EventTypeNotificationTimes.None).ToListAsync()).OrderByDescending(x => x.DateTime).ToObservableCollection();
}
MachineProvider.MachineOperator.StatusChanged += MachineOperator_StatusChanged;
}
private void MachineOperator_StatusChanged(object sender, MachineStatuses status)
{
if (status == MachineStatuses.Disconnected)
{
foreach (var notification in _notifications.ToList())
{
NotificationProvider.PopNotification(notification.Value);
}
_notifications.Clear();
InvokeUI(() =>
{
CurrentEvents.Clear();
});
}
}
private void EventLogger_EventReceived(object sender, MachinesEvent ev)
{
InvokeUI(() =>
{
if (ev.NotificationTime != EventTypeNotificationTimes.None)
{
CurrentEvents.Insert(0, ev);
var notificationItem = new MessageNotificationItem();
notificationItem.CanClose = false;
notificationItem.Message = ev.EventType.Title;
notificationItem.ExpandedMessage = ev.Description;
notificationItem.Pressed += async (_, __) =>
{
SelectedEventsSource = EventsSource.CURRENT;
SelectedEvent = ev;
await NavigationManager.NavigateTo<EventsModule>();
};
switch (ev.Category)
{
case EventTypeCategories.Info:
notificationItem.MessageType = MessageNotificationItem.MessageNotificationItemTypes.Info;
break;
case EventTypeCategories.Warning:
notificationItem.MessageType = MessageNotificationItem.MessageNotificationItemTypes.Warning;
break;
case EventTypeCategories.Error:
notificationItem.MessageType = MessageNotificationItem.MessageNotificationItemTypes.Error;
break;
case EventTypeCategories.Critical:
notificationItem.MessageType = MessageNotificationItem.MessageNotificationItemTypes.Critical;
break;
}
NotificationProvider.PushNotification(notificationItem);
_notifications.Add(ev.EventType.Type, notificationItem);
}
});
}
private void EventLogger_EventResolved(object sender, MachinesEvent ev)
{
InvokeUI(() =>
{
if (ev.NotificationTime != EventTypeNotificationTimes.None)
{
CurrentEvents.Remove(ev);
HistoryEvents.Insert(0, ev);
if (_notifications.ContainsKey(ev.EventType.Type))
{
var notification = _notifications[ev.EventType.Type];
_notifications.Remove(ev.EventType.Type);
NotificationProvider.PopNotification(notification);
}
}
});
}
public override void OnNavigatedTo()
{
base.OnNavigatedTo();
NotificationProvider.NotificationsVisible = false;
}
public override void OnNavigatedFrom()
{
base.OnNavigatedFrom();
NotificationProvider.NotificationsVisible = true;
}
}
}