using AsbCloudApp.Services; using System; using System.Collections.Generic; using System.Linq; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services.Cache; using Microsoft.EntityFrameworkCore; namespace AsbCloudInfrastructure.Services { public class TelemetryTracker : ITelemetryTracker { private Dictionary requests; public TelemetryTracker(CacheDb cacheDb) { var options = new DbContextOptionsBuilder() .UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True") .Options; using var db = new AsbCloudDbContext(options); var cacheTelemetry = cacheDb.GetCachedTable(db); var lastTelemetriesDates = (from d in db.TelemetryDataSaub group d by d.IdTelemetry into g select new { IdTelemetry = g.Max(t => t.IdTelemetry), Date = g.Max(t => t.Date) }).ToList(); requests = lastTelemetriesDates.Select(t => new { Uid = cacheTelemetry.FirstOrDefault(c => c.Id == t.IdTelemetry).RemoteUid, t.Date }).ToDictionary(t => t.Uid, u => u.Date); } public void SaveRequestDate(string uid) => requests[uid] = DateTime.Now; public DateTime GetLastTelemetryDateByUid(string uid) => requests.GetValueOrDefault(uid, DateTime.MinValue); public IEnumerable GetTransmittingTelemetryUids() => requests.Keys; } }