diff --git a/src/frequenz/sdk/timeseries/_resampling/_config.py b/src/frequenz/sdk/timeseries/_resampling/_config.py index 047892803..f265e792e 100644 --- a/src/frequenz/sdk/timeseries/_resampling/_config.py +++ b/src/frequenz/sdk/timeseries/_resampling/_config.py @@ -94,7 +94,7 @@ class ResamplerConfig: It must be a positive time span. """ - max_data_age_in_periods: float = 3.0 + max_data_age_in_periods: float = 1.0 """The maximum age a sample can have to be considered *relevant* for resampling. Expressed in number of periods, where period is the `resampling_period` @@ -102,7 +102,7 @@ class ResamplerConfig: the *input sampling period* if we are upsampling (input period bigger than the resampling period). - It must be bigger than 1.0. + It must be bigger or equal than 1.0. Example: If `resampling_period` is 3 seconds, the input sampling period is diff --git a/src/frequenz/sdk/timeseries/_resampling/_resampler.py b/src/frequenz/sdk/timeseries/_resampling/_resampler.py index 81471fc0d..e7182fd90 100644 --- a/src/frequenz/sdk/timeseries/_resampling/_resampler.py +++ b/src/frequenz/sdk/timeseries/_resampling/_resampler.py @@ -9,7 +9,7 @@ import itertools import logging import math -from bisect import bisect +from bisect import bisect, bisect_left from collections import deque from datetime import datetime, timedelta, timezone from typing import assert_never @@ -437,7 +437,7 @@ def resample(self, timestamp: datetime) -> Sample[Quantity]: ) minimum_relevant_timestamp = timestamp - period * conf.max_data_age_in_periods - min_index = bisect( + min_index = bisect_left( self._buffer, minimum_relevant_timestamp, key=lambda s: s[0], @@ -458,7 +458,8 @@ def resample(self, timestamp: datetime) -> Sample[Quantity]: if relevant_samples else None ) - return Sample(timestamp, None if value is None else Quantity(value)) + sample_time = timestamp - conf.resampling_period + return Sample(sample_time, None if value is None else Quantity(value)) def _log_no_relevant_samples( self, minimum_relevant_timestamp: datetime, timestamp: datetime