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;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using AsbCloudDb.Model;
|
||||||
|
using AsbCloudInfrastructure.Services.Cache;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace AsbCloudInfrastructure.Services
|
namespace AsbCloudInfrastructure.Services
|
||||||
{
|
{
|
||||||
public class TelemetryTracker : ITelemetryTracker
|
public class TelemetryTracker : ITelemetryTracker
|
||||||
{
|
{
|
||||||
private Dictionary<string, DateTime> requests = new Dictionary<string, DateTime>();
|
private Dictionary<string, DateTime> requests;
|
||||||
private readonly TimeSpan timeout = TimeSpan.FromDays(7);
|
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)
|
public void SaveRequestDate(string uid)
|
||||||
{
|
{
|
||||||
@ -25,7 +54,7 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
return requests.Keys;
|
return requests.Keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DeleteOldRequestDates()
|
private void DeleteOldRequestDates() // TODO: удалить этот метод
|
||||||
{
|
{
|
||||||
requests = requests.Where(dValue => (DateTime.Now - dValue.Value) < timeout)
|
requests = requests.Where(dValue => (DateTime.Now - dValue.Value) < timeout)
|
||||||
.ToDictionary(dValue => dValue.Key, dValue => dValue.Value);
|
.ToDictionary(dValue => dValue.Key, dValue => dValue.Value);
|
||||||
|
@ -29,15 +29,13 @@ namespace AsbCloudInfrastructure.Services
|
|||||||
|
|
||||||
public DateTime GetLastTelemetryDate(int idWell)
|
public DateTime GetLastTelemetryDate(int idWell)
|
||||||
{
|
{
|
||||||
var defaultDate = DateTime.MinValue;
|
|
||||||
var well = cacheWells.FirstOrDefault(w => w.Id == idWell);
|
var well = cacheWells.FirstOrDefault(w => w.Id == idWell);
|
||||||
|
|
||||||
if (well?.IdTelemetry is null)
|
if (well?.IdTelemetry is null)
|
||||||
return defaultDate;
|
return DateTime.MinValue;
|
||||||
|
|
||||||
var lastTelemetry = db.TelemetryDataSaub
|
var lastTelemetryDate = telemetryService.GetLastTelemetryDate((int)well.IdTelemetry);
|
||||||
.FirstOrDefault(t => t.Id == well.IdTelemetry);
|
return lastTelemetryDate;
|
||||||
return lastTelemetry?.Date ?? defaultDate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IEnumerable<WellDto>> GetTransmittingWellsAsync(int idCompany,
|
public async Task<IEnumerable<WellDto>> GetTransmittingWellsAsync(int idCompany,
|
||||||
|
Loading…
Reference in New Issue
Block a user