From 4435fed8bb9514f0b0381907975dfb6727eff737 Mon Sep 17 00:00:00 2001 From: cwasicki <126617870+cwasicki@users.noreply.github.com> Date: Wed, 23 Aug 2023 13:32:28 +0200 Subject: [PATCH] Add duration to gaps and expose gaps in moving window Signed-off-by: cwasicki <126617870+cwasicki@users.noreply.github.com> --- src/frequenz/sdk/timeseries/_moving_window.py | 9 +++++++++ .../sdk/timeseries/_ringbuffer/buffer.py | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/src/frequenz/sdk/timeseries/_moving_window.py b/src/frequenz/sdk/timeseries/_moving_window.py index 3c11e9edc..912b972f8 100644 --- a/src/frequenz/sdk/timeseries/_moving_window.py +++ b/src/frequenz/sdk/timeseries/_moving_window.py @@ -246,6 +246,15 @@ async def sink_buffer(sample: Sample[Quantity]) -> None: asyncio.create_task(self._resampler.resample(), name="resample") ) + def gaps(self) -> list[Gap]: + """ + Return a list of gaps in the `MovingWindow`. + + Returns: + A list of gaps in the `MovingWindow`. + """ + return self._buffer.gaps() + def __len__(self) -> int: """ Return the size of the `MovingWindow`s underlying buffer. diff --git a/src/frequenz/sdk/timeseries/_ringbuffer/buffer.py b/src/frequenz/sdk/timeseries/_ringbuffer/buffer.py index 44daa95cf..6a1ed153c 100644 --- a/src/frequenz/sdk/timeseries/_ringbuffer/buffer.py +++ b/src/frequenz/sdk/timeseries/_ringbuffer/buffer.py @@ -44,6 +44,14 @@ def contains(self, timestamp: datetime) -> bool: return False + def duration(self) -> timedelta: + """Return the length of the gap. + + Returns: + Length of the gap. + """ + return self.end - self.start + class OrderedRingBuffer(Generic[FloatArray]): """Time aware ringbuffer that keeps its entries sorted by time.""" @@ -108,6 +116,15 @@ def gaps(self) -> List[Gap]: """ return self._gaps + @property + def gaps(self) -> List[Gap]: + """Return the list of gaps. + + Returns: + The list of gaps. + """ + return self._gaps + @property def maxlen(self) -> int: """Get the max length.