Innovenergy_trunk/csharp/lib/S3/Drivers/Internal/Reader.public.cs

37 lines
1.1 KiB
C#

using InnovEnergy.S3.Metadata;
using InnovEnergy.S3.Records.Specialized;
using InnovEnergy.Time.Unix;
using InnovEnergy.Lib.Utils;
namespace InnovEnergy.S3.Drivers.Internal;
public partial class Reader
{
public Task<IReadOnlyList<TimeStampedRecord>> ReadRecords(UnixTime from, UnixTime to, Int32 minNumber)
{
var maxDt = (to - from) / minNumber;
return ReadRecords(from, to, maxDt);
}
public async Task<IReadOnlyList<TimeStampedRecord>> ReadRecords(UnixTime from, UnixTime to, UnixTimeSpan maxDt)
{
if (maxDt < SamplePeriod)
maxDt = SamplePeriod;
var level = AggregationLevels.LastOrDefault(l => l.SamplePeriod <= maxDt) ?? AggregationLevels[^1];
return await level
.RangeExclusive(from, to)
.Select(t => ReadRecord(level, t))
.WhenAll();
}
public async Task<TimeStampedRecord> ReadRecord(AggregationLevel level, UnixTime time)
{
var tsRecord = await ReadRecord(level, level.GetRetentionIndex(time));
return tsRecord.TimeStamp == time
? tsRecord
: TimeStampedRecord.Empty(time);
}
}