using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL; using Tango.BL.Entities; using Tango.BL.Enumerations; using Tango.Telemetry.Mappers; using Tango.Telemetry.Telemetries; namespace Tango.Telemetry.Sources { public class TelemetryMachineUpdatesHistorySource : ITelemetryHistorySource { private bool _isBusy; public TelemetryHistorySourceDirection Direction { get; } = TelemetryHistorySourceDirection.Descending; public string Name { get; } = "Machine Updates History"; public bool RequiresTelemetryDuplicationTracking { get; } = true; public async Task CanRequestHistory(DateTime from) { if (_isBusy) { return false; } else { try { using (ObservablesContext db = ObservablesContext.CreateDefault()) { return await db.TangoUpdates.CountAsync(x => x.LastUpdated < from) > 0; } } catch { return false; } } } public async Task> RequestHistory(DateTime from) { try { _isBusy = true; using (ObservablesContext db = ObservablesContext.CreateDefault()) { int[] skipArr = { (int)TangoUpdateStatuses.SynchronizationCompleted, (int)TangoUpdateStatuses.SynchronizationFailed, (int)TangoUpdateStatuses.SynchronizationStarted }; var updates = await db.TangoUpdates.Where(x => x.LastUpdated <= from && !skipArr.Contains(x.Status)).Take(10).ToListAsync(); List tUpdates = new List(); foreach (var update in updates) { TelemetryMachineUpdate tUpdate = MachineUpdateMapper.MapMachineUpdate(update); tUpdates.Add(tUpdate); } return tUpdates; } } finally { _isBusy = false; } } public void Dispose() { } } }