public async Task <HistoryExtract> BuildAsync( string componentUid, string statusUid, DateTime rangeStart, DateTime rangeEnd, TimeSpan?interval, HistoryExtractDataType dataType, int maxEntityCount, CancellationToken cancellationToken) { if (componentUid == null) { throw new ArgumentNullException(nameof(componentUid)); } if (statusUid == null) { throw new ArgumentNullException(nameof(statusUid)); } var entities = await _repository.GetComponentStatusValues(new ComponentStatusFilter { ComponentUid = componentUid, StatusUid = statusUid, RangeStart = rangeStart, RangeEnd = rangeEnd, MaxEntityCount = maxEntityCount }, cancellationToken).ConfigureAwait(false); var historyExtract = new HistoryExtract { ComponentUid = componentUid, StatusUid = statusUid, EntityCount = entities.Count }; if (dataType == HistoryExtractDataType.Text) { historyExtract.DataPoints.AddRange(GenerateTextBasedDataPoints(entities, rangeStart, rangeEnd)); } else if (dataType == HistoryExtractDataType.Number) { historyExtract.DataPoints.AddRange(GenerateNumberBasedDataPoints(entities, rangeStart, rangeEnd, interval)); } else { throw new NotSupportedException(); } return(historyExtract); }
public HistoryExtract Build(string componentUid, string statusUid, DateTime rangeStart, DateTime rangeEnd, TimeSpan interval, HistoryExtractDataType dataType) { if (componentUid == null) { throw new ArgumentNullException(nameof(componentUid)); } if (statusUid == null) { throw new ArgumentNullException(nameof(statusUid)); } var entities = _repository.GetComponentStatusValues(componentUid, statusUid, rangeStart, rangeEnd); var historyExtract = new HistoryExtract { ComponentUid = componentUid, StatusUid = statusUid, EntityCount = entities.Count }; while (rangeStart <= rangeEnd) { var dataPoint = new HistoryExtractDataPoint { Timestamp = rangeStart }; var entity = entities.FirstOrDefault(e => e.RangeStart <= dataPoint.Timestamp && e.RangeEnd >= dataPoint.Timestamp); if (entity != null) { if (dataType == HistoryExtractDataType.Number) { dataPoint.Value = Convert.ToDouble(entity.Value, CultureInfo.InvariantCulture); } else { dataPoint.Value = entity.Value; } } historyExtract.DataPoints.Add(dataPoint); rangeStart += interval; } return(historyExtract); }
public async Task <HistoryExtract> BuildAsync( string path, DateTime rangeStart, DateTime rangeEnd, TimeSpan?interval, HistoryExtractDataType dataType, int maxEntityCount, CancellationToken cancellationToken) { if (path == null) { throw new ArgumentNullException(nameof(path)); } var entities = await _repository.Read(new HistoryReadOperation { Path = path, RangeStart = rangeStart, RangeEnd = rangeEnd, MaxEntityCount = maxEntityCount }, cancellationToken).ConfigureAwait(false); var historyExtract = new HistoryExtract { Path = path, EntityCount = entities.Count }; if (dataType == HistoryExtractDataType.Text) { historyExtract.DataPoints.AddRange(GenerateTextBasedDataPoints(entities, rangeStart, rangeEnd)); } else if (dataType == HistoryExtractDataType.Number) { historyExtract.DataPoints.AddRange(GenerateNumberBasedDataPoints(entities, rangeStart, rangeEnd, interval)); } else { throw new NotSupportedException(); } return(historyExtract); }