From ad1fbfda9c35ec2d06c83b4bb25686e9d377ebc5 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Thu, 11 Jul 2019 18:09:02 +0100 Subject: [PATCH] Add Chunks method to Series interface. Signed-off-by: Tom Wilkie --- querier.go | 23 +++++++++++++++++++++++ querier_test.go | 2 ++ 2 files changed, 25 insertions(+) diff --git a/querier.go b/querier.go index fbd9493f..7753287e 100644 --- a/querier.go +++ b/querier.go @@ -54,6 +54,9 @@ type Series interface { // Iterator returns a new iterator of the data of the series. Iterator() SeriesIterator + + // Chunks returns a copy of the compressed chunks that make up this series. + Chunks() []chunks.Meta } // querier aggregates querying results from time blocks within @@ -876,6 +879,10 @@ func (s *chunkSeries) Iterator() SeriesIterator { return newChunkSeriesIterator(s.chunks, s.intervals, s.mint, s.maxt) } +func (s *chunkSeries) Chunks() []chunks.Meta { + return s.chunks +} + // SeriesIterator iterates over the data of a time series. type SeriesIterator interface { // Seek advances the iterator forward to the given timestamp. @@ -904,6 +911,14 @@ func (s *chainedSeries) Iterator() SeriesIterator { return newChainedSeriesIterator(s.series...) } +func (s *chainedSeries) Chunks() []chunks.Meta { + var chunks []chunks.Meta + for _, s := range s.series { + chunks = append(s.Chunks()) + } + return chunks +} + // chainedSeriesIterator implements a series iterater over a list // of time-sorted, non-overlapping iterators. type chainedSeriesIterator struct { @@ -961,6 +976,14 @@ func (it *chainedSeriesIterator) Err() error { return it.cur.Err() } +func (s *verticalChainedSeries) Chunks() []chunks.Meta { + var chunks []chunks.Meta + for _, s := range s.series { + chunks = append(s.Chunks()) + } + return chunks +} + // verticalChainedSeries implements a series for a list of time-sorted, time-overlapping series. // They all must have the same labels. type verticalChainedSeries struct { diff --git a/querier_test.go b/querier_test.go index 2be48fcd..0529b3c7 100644 --- a/querier_test.go +++ b/querier_test.go @@ -663,6 +663,7 @@ type itSeries struct { func (s itSeries) Iterator() SeriesIterator { return s.si } func (s itSeries) Labels() labels.Labels { return labels.Labels{} } +func (s itSeries) Chunks() []chunks.Meta { return nil } func TestSeriesIterator(t *testing.T) { itcases := []struct { @@ -1441,6 +1442,7 @@ func newSeries(l map[string]string, s []tsdbutil.Sample) Series { } func (m *mockSeries) Labels() labels.Labels { return m.labels() } func (m *mockSeries) Iterator() SeriesIterator { return m.iterator() } +func (m *mockSeries) Chunks() []chunks.Meta { return nil } type listSeriesIterator struct { list []tsdbutil.Sample