diff --git a/AsbCloudApp/Services/ITelemetryService.cs b/AsbCloudApp/Services/ITelemetryService.cs
index 2e6592b4..c46a32ec 100644
--- a/AsbCloudApp/Services/ITelemetryService.cs
+++ b/AsbCloudApp/Services/ITelemetryService.cs
@@ -16,11 +16,6 @@ namespace AsbCloudApp.Services
///
ITimezoneService TimeZoneService { get; }
- ///
- /// трекер запросов
- ///
- ITelemetryTracker TelemetryTracker { get; }
-
///
/// получить idWell по uid телеметрии
///
@@ -42,13 +37,6 @@ namespace AsbCloudApp.Services
///
SimpleTimezoneDto GetTimezone(int idTelemetry);
- ///
- /// Получить дату получения последних данных
- ///
- ///
- ///
- DateTime GetLastTelemetryDate(int idTelemetry);
-
///
/// получить idTelemetry по IdWell
///
diff --git a/AsbCloudApp/Services/ITelemetryTracker.cs b/AsbCloudApp/Services/ITelemetryTracker.cs
deleted file mode 100644
index 5a6f255e..00000000
--- a/AsbCloudApp/Services/ITelemetryTracker.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using AsbCloudApp.Data;
-using System;
-using System.Collections.Generic;
-
-namespace AsbCloudApp.Services
-{
- ///
- /// Сервис статистики телеметрии
- ///
- public interface ITelemetryTracker
- {
- ///
- /// получить дату последней отправки данных панелью
- ///
- ///
- ///
- DateTimeOffset GetLastTelemetryDateByUid(string uid);
-
- ///
- /// получить диапазон дат за которые есть данные по телеметрии
- ///
- ///
- ///
- DatesRangeDto GetTelemetryDateRangeByUid(string uid);
-
- ///
- /// обновить статистику по телеметрии
- ///
- ///
- ///
- void SaveRequestDate(string uid, DateTimeOffset remoteDate);
- }
-}
diff --git a/AsbCloudApp/Services/IWellService.cs b/AsbCloudApp/Services/IWellService.cs
index 057b3444..eb8d9f37 100644
--- a/AsbCloudApp/Services/IWellService.cs
+++ b/AsbCloudApp/Services/IWellService.cs
@@ -63,7 +63,7 @@ namespace AsbCloudApp.Services
///
///
///
- DateTimeOffset GetLastTelemetryDate(int idWell);
+ DateTime GetLastTelemetryDate(int idWell);
//TODO: выяснить и удалить отсюда
///
diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs
index 41151953..7ee76fe2 100644
--- a/AsbCloudInfrastructure/DependencyInjection.cs
+++ b/AsbCloudInfrastructure/DependencyInjection.cs
@@ -102,7 +102,6 @@ namespace AsbCloudInfrastructure
services.AddSingleton(new WitsInfoService());
services.AddSingleton(provider => TelemetryDataCache.GetInstance(provider));
services.AddSingleton(provider => TelemetryDataCache.GetInstance(provider));
- services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton(provider => ReduceSamplingService.GetInstance(configuration));
diff --git a/AsbCloudInfrastructure/Repository/DepositRepository.cs b/AsbCloudInfrastructure/Repository/DepositRepository.cs
index 4944f79d..7f19f1d7 100644
--- a/AsbCloudInfrastructure/Repository/DepositRepository.cs
+++ b/AsbCloudInfrastructure/Repository/DepositRepository.cs
@@ -111,7 +111,7 @@ namespace AsbCloudInfrastructure.Repository
{
var dto = well.Adapt();
dto.WellType = well.WellType.Caption;
- dto.LastTelemetryDate = wellService.GetLastTelemetryDate(well.Id).DateTime;
+ dto.LastTelemetryDate = wellService.GetLastTelemetryDate(well.Id);
dto.Cluster = gCluster.Key.Caption;
dto.Deposit = gDeposit.Key.Caption;
return dto;
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
index 54ab56c5..359efd18 100644
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryDataBaseService.cs
@@ -64,7 +64,6 @@ namespace AsbCloudInfrastructure.Services.SAUB
});
var entityMaxDate = entities.Max(e => e.DateTime);
- telemetryService.TelemetryTracker.SaveRequestDate(uid, entityMaxDate);
var dbset = db.Set();
var stopwatch = Stopwatch.StartNew();
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs
index 593bf981..1f841aad 100644
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs
+++ b/AsbCloudInfrastructure/Services/SAUB/TelemetryService.cs
@@ -19,21 +19,20 @@ namespace AsbCloudInfrastructure.Services.SAUB
{
private readonly IAsbCloudDbContext db;
private readonly IMemoryCache memoryCache;
- private readonly ITelemetryTracker telemetryTracker;
+ private readonly TelemetryDataCache dataSaubCache;
private readonly ITimezoneService timezoneService;
public ITimezoneService TimeZoneService => timezoneService;
- public ITelemetryTracker TelemetryTracker => telemetryTracker;
public TelemetryService(
IAsbCloudDbContext db,
IMemoryCache memoryCache,
- ITelemetryTracker telemetryTracker,
+ TelemetryDataCache dataSaubCache,
ITimezoneService timezoneService)
{
this.db = db;
this.memoryCache = memoryCache;
- this.telemetryTracker = telemetryTracker;
+ this.dataSaubCache = dataSaubCache;
this.timezoneService = timezoneService;
}
@@ -47,34 +46,11 @@ namespace AsbCloudInfrastructure.Services.SAUB
memoryCache.DropBasic();
}
- public DateTime GetLastTelemetryDate(int idTelemetry)
- {
- var telemetry = GetTelemetryCache().FirstOrDefault(t => t.Id == idTelemetry);
-
- if (telemetry is null)
- throw new Exception($"Telemetry id:{idTelemetry} does not exist");
-
- var uid = telemetry.RemoteUid;
- var timzone = GetTimezone(idTelemetry);
- var lastTelemetryDate = telemetryTracker.GetLastTelemetryDateByUid(uid);
- return lastTelemetryDate.ToRemoteDateTime(timzone.Hours);
- }
-
public DatesRangeDto GetDatesRange(int idTelemetry)
{
- var telemetry = GetTelemetryCache().FirstOrDefault(t => t.Id == idTelemetry);
- if (telemetry is null)
- throw new Exception($"Telemetry id:{idTelemetry} does not exist");
-
- var dto = TelemetryTracker.GetTelemetryDateRangeByUid(telemetry.RemoteUid);
- if (dto is null)
- throw new Exception($"Telemetry id:{idTelemetry} has no data");
-
- var timezone = GetTimezone(idTelemetry);
- dto.From = dto.From.ToTimeZoneOffsetHours(timezone.Hours);
- dto.To = dto.To.ToTimeZoneOffsetHours(timezone.Hours);
-
- return dto;
+ var cacheDataRange = dataSaubCache.GetOrDefaultDataDateRange(idTelemetry)
+ ?? new ();
+ return cacheDataRange;
}
public int GetOrCreateTelemetryIdByUid(string uid)
diff --git a/AsbCloudInfrastructure/Services/SAUB/TelemetryTracker.cs b/AsbCloudInfrastructure/Services/SAUB/TelemetryTracker.cs
deleted file mode 100644
index 588a4b87..00000000
--- a/AsbCloudInfrastructure/Services/SAUB/TelemetryTracker.cs
+++ /dev/null
@@ -1,154 +0,0 @@
-using AsbCloudApp.Data;
-using AsbCloudApp.Services;
-using AsbCloudDb.Model;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.Extensions.Caching.Memory;
-using Microsoft.Extensions.Configuration;
-using System;
-using System.Collections.Concurrent;
-using System.Collections.Generic;
-using System.Linq;
-using System.Threading.Tasks;
-
-namespace AsbCloudInfrastructure.Services.SAUB
-{
-
- public class TelemetryTracker : ITelemetryTracker
- {
- class TrackerStat
- {
- //public int Id { get; set; }
-
- public string RemoteUid { get; set; } = null!;
-
- ///
- /// Время последнего запроса (по времени сервера)
- ///
- public DateTimeOffset LastTimeServer { get; set; }
-
- ///
- /// Дата первых данных в БД
- ///
- public DateTimeOffset TelemetryDateUtcMin { get; set; }
-
- ///
- /// Дата последних данных в БД
- ///
- public DateTimeOffset TelemetryDateUtcMax { get; set; }
-
- }
-
- private readonly ConcurrentDictionary telemetriesStats;
-
- public TelemetryTracker(IConfiguration configuration, IMemoryCache memoryCache)
- {
- // TODO: make this background work
- var contextOptions = new DbContextOptionsBuilder()
- .UseNpgsql(configuration.GetConnectionString("DefaultConnection"))
- .Options;
- var db = new AsbCloudDbContext(contextOptions);
-
- var cacheTelemetry = memoryCache.GetOrCreateBasic(db.Set().Include(t=>t.Well));
- var keyValuePairs = new Dictionary(cacheTelemetry.Count());
- foreach (var telemetry in cacheTelemetry)
- {
- var date = telemetry.Info?.DrillingStartDate
- ?? ParseDateFromUidOrDefault(telemetry.RemoteUid, DateTimeOffset.MinValue);
-
- keyValuePairs[telemetry.RemoteUid] = new TrackerStat
- {
- RemoteUid = telemetry.RemoteUid,
- TelemetryDateUtcMin = date,
- TelemetryDateUtcMax = date,
- LastTimeServer = date,
- };
- }
- telemetriesStats = new ConcurrentDictionary(keyValuePairs);
-
- Task.Run(async () =>
- {
- db.Database.SetCommandTimeout(2 * 60);
- var dates = await db.TelemetryDataSaub
- .GroupBy(d => d.IdTelemetry)
- .Select(g => new
- {
- IdTelemetry = g.Key,
- DateMax = g.Max(d => d.DateTime),
- DateMin = g.Min(d => d.DateTime),
- })
- .AsNoTracking()
- .ToListAsync()
- .ConfigureAwait(false);
-
- var oldRequests = dates.Select(t => new
- {
- Uid = cacheTelemetry.FirstOrDefault(c => c.Id == t.IdTelemetry)?.RemoteUid,
- t.DateMax,
- t.DateMin,
- }).Where(s => !string.IsNullOrEmpty(s.Uid));
-
- foreach (var oldReq in oldRequests)
- {
- if (oldReq.Uid is not null)
- {
- var telemetryStat = telemetriesStats.GetOrAdd(oldReq.Uid, (uid) => new TrackerStat { RemoteUid = uid });
- telemetryStat.TelemetryDateUtcMin = oldReq.DateMin;
- telemetryStat.TelemetryDateUtcMax = oldReq.DateMax;
- telemetryStat.LastTimeServer = oldReq.DateMax;
- }
-
- }
- }).ContinueWith((t) =>
- {
- db.Dispose();
- return t;
- });
- }
-
- private static DateTimeOffset ParseDateFromUidOrDefault(string remoteUid, DateTimeOffset defaultValue = default)
- {
- //example: uid = 20211102_173407926
- if (string.IsNullOrEmpty(remoteUid) || remoteUid.Length != 18)
- return defaultValue;
-
- if (DateTime.TryParseExact(remoteUid, "yyyyMMdd_HHmmssfff",
- System.Globalization.CultureInfo.InvariantCulture,
- System.Globalization.DateTimeStyles.AssumeUniversal,
- out DateTime parsedDate))
- return parsedDate;
-
- return defaultValue;
- }
-
- public void SaveRequestDate(string uid, DateTimeOffset remoteDate)
- {
- var stat = telemetriesStats.GetOrAdd(uid, _ => new TrackerStat
- {
- RemoteUid = uid,
- TelemetryDateUtcMin = remoteDate
- }
- );
-
- stat.LastTimeServer = DateTime.Now;
-
- if (stat.TelemetryDateUtcMax.ToUniversalTime() < remoteDate.ToUniversalTime())
- stat.TelemetryDateUtcMax = remoteDate;
- }
-
- public DateTimeOffset GetLastTelemetryDateByUid(string uid) =>
- telemetriesStats.GetValueOrDefault(uid)?.TelemetryDateUtcMax ?? default;
-
- public DatesRangeDto GetTelemetryDateRangeByUid(string uid)
- {
- var stat = telemetriesStats.GetValueOrDefault(uid);
- var range = new DatesRangeDto
- {
- From = stat?.TelemetryDateUtcMin.UtcDateTime ?? default,
- To = stat?.TelemetryDateUtcMax.UtcDateTime ?? default,
- };
- return range;
- }
-
- }
-
-}
diff --git a/AsbCloudInfrastructure/Services/WellOperationService/OperationsStatService.cs b/AsbCloudInfrastructure/Services/WellOperationService/OperationsStatService.cs
index 408c895c..c32956d8 100644
--- a/AsbCloudInfrastructure/Services/WellOperationService/OperationsStatService.cs
+++ b/AsbCloudInfrastructure/Services/WellOperationService/OperationsStatService.cs
@@ -151,7 +151,7 @@ namespace AsbCloudInfrastructure.Services.WellOperationService
WellType = wellType?.Caption ?? "",
IdState = well.IdState,
State = wellService.GetStateText(well.IdState),
- LastTelemetryDate = wellService.GetLastTelemetryDate(well.Id).DateTime,
+ LastTelemetryDate = wellService.GetLastTelemetryDate(well.Id),
Companies = await wellService.GetCompaniesAsync(well.Id, token)
};
diff --git a/AsbCloudInfrastructure/Services/WellService.cs b/AsbCloudInfrastructure/Services/WellService.cs
index 2d2599b8..711b495e 100644
--- a/AsbCloudInfrastructure/Services/WellService.cs
+++ b/AsbCloudInfrastructure/Services/WellService.cs
@@ -57,15 +57,15 @@ namespace AsbCloudInfrastructure.Services
private void DropCacheRelationCompanyWell()
=> memoryCache.DropBasic();
- public DateTimeOffset GetLastTelemetryDate(int idWell)
+ public DateTime GetLastTelemetryDate(int idWell)
{
var well = GetOrDefault(idWell);
if (well?.IdTelemetry is null)
- return DateTimeOffset.MinValue;
+ return DateTime.MinValue;
- var lastTelemetryDate = telemetryService.GetLastTelemetryDate((int)well.IdTelemetry);
- return lastTelemetryDate;
+ var datesRange = telemetryService.GetDatesRange(well.IdTelemetry.Value);
+ return datesRange.To;
}
///
@@ -97,7 +97,7 @@ namespace AsbCloudInfrastructure.Services
dto.Latitude ??= gCluster.Key.Latitude ?? gDeposit.Key.Latitude;
dto.Longitude ??= gCluster.Key.Longitude ?? gDeposit.Key.Longitude;
if (well.IdTelemetry is not null)
- dto.LastTelemetryDate = telemetryService.GetLastTelemetryDate(well.IdTelemetry.Value);
+ dto.LastTelemetryDate = telemetryService.GetDatesRange(well.IdTelemetry.Value).To;
return dto;
}),
@@ -256,7 +256,7 @@ namespace AsbCloudInfrastructure.Services
dto.Cluster = entity.Cluster.Caption;
dto.Deposit = entity.Cluster.Deposit.Caption;
if (entity.IdTelemetry is not null)
- dto.LastTelemetryDate = telemetryService.GetLastTelemetryDate((int)entity.IdTelemetry);
+ dto.LastTelemetryDate = telemetryService.GetDatesRange(entity.IdTelemetry.Value).To;
dto.Companies = entity.RelationCompaniesWells
.Select(r => Convert(r.Company))
.ToList();