104 lines
3.3 KiB
C#
104 lines
3.3 KiB
C#
//using DD.Persistence.Models;
|
|
//using DD.Persistence.Models.Common;
|
|
//using DD.Persistence.Repositories;
|
|
//using Microsoft.EntityFrameworkCore;
|
|
|
|
//namespace DD.Persistence.Repository.Repositories;
|
|
|
|
//public class TimestampedValuesCachedRepository : TimestampedValuesRepository
|
|
//{
|
|
// public static TimestampedValuesDto? FirstByDate { get; private set; }
|
|
// public static CyclicArray<TimestampedValuesDto> LastData { get; } = new CyclicArray<TimestampedValuesDto>(CacheItemsCount);
|
|
|
|
// private const int CacheItemsCount = 3600;
|
|
|
|
// public TimestampedValuesCachedRepository(DbContext db, IDataSourceSystemRepository<ValuesIdentityDto> relatedDataRepository) : base(db, relatedDataRepository)
|
|
// {
|
|
// //Task.Run(async () =>
|
|
// //{
|
|
// // var firstDateItem = await base.GetFirst(CancellationToken.None);
|
|
// // if (firstDateItem == null)
|
|
// // {
|
|
// // return;
|
|
// // }
|
|
|
|
// // FirstByDate = firstDateItem;
|
|
|
|
// // var dtos = await base.GetLast(CacheItemsCount, CancellationToken.None);
|
|
// // dtos = dtos.OrderBy(d => d.Timestamp);
|
|
// // LastData.AddRange(dtos);
|
|
// //}).Wait();
|
|
// }
|
|
|
|
// public override async Task<IEnumerable<TimestampedValuesDto>> GetGtDate(Guid discriminatorId, DateTimeOffset dateBegin, CancellationToken token)
|
|
// {
|
|
|
|
// if (LastData.Count == 0 || LastData[0].Timestamp > dateBegin)
|
|
// {
|
|
// var dtos = await base.GetGtDate(discriminatorId, dateBegin, token);
|
|
// return dtos;
|
|
// }
|
|
|
|
// var items = LastData
|
|
// .Where(i => i.Timestamp >= dateBegin);
|
|
|
|
// return items;
|
|
// }
|
|
|
|
// public override async Task<int> AddRange(Guid discriminatorId, IEnumerable<TimestampedValuesDto> dtos, CancellationToken token)
|
|
// {
|
|
// var result = await base.AddRange(discriminatorId, dtos, token);
|
|
// if (result > 0)
|
|
// {
|
|
|
|
// dtos = dtos.OrderBy(x => x.Timestamp);
|
|
|
|
// FirstByDate = dtos.First();
|
|
// LastData.AddRange(dtos);
|
|
// }
|
|
|
|
// return result;
|
|
// }
|
|
|
|
// public override async Task<DatesRangeDto?> GetDatesRange(Guid discriminatorId, CancellationToken token)
|
|
// {
|
|
// if (FirstByDate == null)
|
|
// return null;
|
|
|
|
// return await Task.Run(() =>
|
|
// {
|
|
// return new DatesRangeDto
|
|
// {
|
|
// From = FirstByDate.Timestamp,
|
|
// To = LastData[^1].Timestamp
|
|
// };
|
|
// });
|
|
// }
|
|
|
|
// public override async Task<IEnumerable<TimestampedValuesDto>> GetResampledData(
|
|
// Guid discriminatorId,
|
|
// DateTimeOffset dateBegin,
|
|
// double intervalSec = 600d,
|
|
// int approxPointsCount = 1024,
|
|
// CancellationToken token = default)
|
|
// {
|
|
// var dtos = LastData.Where(i => i.Timestamp >= dateBegin);
|
|
// if (LastData.Count == 0 || LastData[0].Timestamp > dateBegin)
|
|
// {
|
|
// dtos = await base.GetGtDate(discriminatorId, dateBegin, token);
|
|
// }
|
|
|
|
// var dateEnd = dateBegin.AddSeconds(intervalSec);
|
|
// dtos = dtos
|
|
// .Where(i => i.Timestamp <= dateEnd);
|
|
|
|
// var ratio = dtos.Count() / approxPointsCount;
|
|
// if (ratio > 1)
|
|
// dtos = dtos
|
|
// .Where((_, index) => index % ratio == 0);
|
|
|
|
// return dtos;
|
|
// }
|
|
//}
|
|
|