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 TelemetryJobRunsHistorySource : TelemetryConfigurableSource, ITelemetryHistorySource { private bool _isBusy; public string Name { get;} = "JobRuns History"; public bool RequiresTelemetryDuplicationTracking { get => true; } public TelemetryHistorySourceDirection Direction { get => TelemetryHistorySourceDirection.Descending; } public async Task CanRequestHistory(DateTime from) { if (_isBusy) { return false; } else { try { using (ObservablesContext db = ObservablesContext.CreateDefault()) { return await db.JobRuns.CountAsync(x => x.LastUpdated < from) > 0; } } catch { return false; } } } public async Task> RequestHistory(DateTime from) { try { _isBusy = true; using (ObservablesContext db = ObservablesContext.CreateDefault()) { var runs = await db.JobRuns .OrderByDescending(x => x.LastUpdated) .Where(x => x.LastUpdated < from) .Take(Config.MaxJobRunsPerRequest) .ToListAsync(); List tRuns = new List(); foreach (var run in runs) { var tRun = JobRunMapper.MapJobRun(run); tRuns.Add(tRun); } return tRuns; } } finally { _isBusy = false; } } public void Dispose() { } } }