From d46b9c9a91665fccfb411c67da974ac3516715ec Mon Sep 17 00:00:00 2001 From: Alexander Zobnin Date: Thu, 23 Sep 2021 13:15:01 +0300 Subject: [PATCH] Data alignment: skip 1 point gaps (insert interpolated value) --- pkg/timeseries/align.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/timeseries/align.go b/pkg/timeseries/align.go index 8eed9fd..5a58ac3 100644 --- a/pkg/timeseries/align.go +++ b/pkg/timeseries/align.go @@ -22,10 +22,20 @@ func (ts TimeSeries) Align(interval time.Duration) TimeSeries { pointFrameTs = point.GetTimeFrame(interval) if pointFrameTs.After(frameTs) { + pointsToAdd := make([]TimePoint, 0) for frameTs.Before(pointFrameTs) { - alignedTs = append(alignedTs, TimePoint{Time: frameTs, Value: nil}) + pointsToAdd = append(pointsToAdd, TimePoint{Time: frameTs, Value: nil}) frameTs = frameTs.Add(interval) } + if len(pointsToAdd) > 1 { + alignedTs = append(alignedTs, pointsToAdd...) + } else if len(pointsToAdd) == 1 && i < ts.Len()-1 { + // In case of 1 point gap, insert interpolated value to prevent unnecessary gaps + interpolatedPoint := pointsToAdd[0] + pointValue := linearInterpolation(interpolatedPoint.Time, ts[i], ts[i+1]) + interpolatedPoint.Value = &pointValue + alignedTs = append(alignedTs, interpolatedPoint) + } } alignedTs = append(alignedTs, TimePoint{Time: pointFrameTs, Value: point.Value})