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.Telemetry.Mappers; using Tango.Telemetry.Telemetries; namespace Tango.Telemetry.Sources { public class TelemetryEventsHistorySource : ITelemetryHistorySource { private bool _isBusy; public TelemetryHistorySourceDirection Direction { get; } = TelemetryHistorySourceDirection.Descending; public string Name { get; } = "Events 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.MachinesEvents.CountAsync(x => x.LastUpdated < from) > 0; } } catch { return false; } } } public async Task> RequestHistory(DateTime from) { try { _isBusy = true; using (ObservablesContext db = ObservablesContext.CreateDefault()) { var events = await db.MachinesEvents .OrderByDescending(x => x.LastUpdated) .Where(x => x.LastUpdated < from) .Take(10) .ToListAsync(); List tRuns = new List(); foreach (var ev in events) { var tEvent = EventMapper.MapEvent(ev); tRuns.Add(tEvent); } return tRuns; } } finally { _isBusy = false; } } public void Dispose() { } } }