Changed way of retrieving last telemetry date for wells

This commit is contained in:
KharchenkoVladimir 2021-10-25 16:32:55 +05:00
parent 23a467639a
commit 4d8780dabc
2 changed files with 35 additions and 8 deletions

View File

@ -2,13 +2,42 @@
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<string, DateTime> requests = new Dictionary<string, DateTime>();
private readonly TimeSpan timeout = TimeSpan.FromDays(7);
private Dictionary<string, DateTime> requests;
private readonly TimeSpan timeout;
public TelemetryTracker(CacheDb cacheDb)
{
timeout = TimeSpan.FromDays(7);
var options = new DbContextOptionsBuilder<AsbCloudDbContext>()
.UseNpgsql("Host=localhost;Database=postgres;Username=postgres;Password=q;Persist Security Info=True")
.Options;
using var db = new AsbCloudDbContext(options);
var cacheTelemetry = cacheDb.GetCachedTable<Telemetry>(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)
{
@ -25,7 +54,7 @@ namespace AsbCloudInfrastructure.Services
return requests.Keys;
}
private void DeleteOldRequestDates()
private void DeleteOldRequestDates() // TODO: удалить этот метод
{
requests = requests.Where(dValue => (DateTime.Now - dValue.Value) < timeout)
.ToDictionary(dValue => dValue.Key, dValue => dValue.Value);

View File

@ -29,15 +29,13 @@ namespace AsbCloudInfrastructure.Services
public DateTime GetLastTelemetryDate(int idWell)
{
var defaultDate = DateTime.MinValue;
var well = cacheWells.FirstOrDefault(w => w.Id == idWell);
if (well?.IdTelemetry is null)
return defaultDate;
return DateTime.MinValue;
var lastTelemetry = db.TelemetryDataSaub
.FirstOrDefault(t => t.Id == well.IdTelemetry);
return lastTelemetry?.Date ?? defaultDate;
var lastTelemetryDate = telemetryService.GetLastTelemetryDate((int)well.IdTelemetry);
return lastTelemetryDate;
}
public async Task<IEnumerable<WellDto>> GetTransmittingWellsAsync(int idCompany,