forked from ddrilling/AsbCloudServer
Changed way of retrieving last telemetry date for wells
This commit is contained in:
parent
23a467639a
commit
4d8780dabc
@ -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);
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user