prometheus/promql
beorn7 a7c519930e histograms: Add Compact method to the normal integer Histogram
And use the new method to call to compact Histograms during
parsing. This happens for both `Histogram` and `FloatHistogram`. In
this way, if targets decide to optimize the exposition size by merging
spans with empty buckets in between, we still get a normalized
results. It will also normalize away any valid but weird
representations like empty spans, spans with offset zero, and empty
buckets at the start or end of a span.

The implementation seemed easy at first as it just turns the
`compactBuckets` helper into a generic function (which now got its own
file). However, the integer Histograms have delta buckets instead of
absolute buckets, which had to be treated specially in the generic
`compactBuckets` function. To make sure it works, I have added plenty
of explicit tests for `Histogram` in addition to the `FloatHistogram`
tests.

I have also updated the doc comment for the `Compact` method.

Based on the insights now expressed in the doc comment, compacting
with a maxEmptyBuckets > 0 is rarely useful. Therefore, this commit
also sets the value to 0 in the two cases we were using 3 so far. We
might still want to reconsider, so I don't want to remove the
maxEmptyBuckets parameter right now.

Signed-off-by: beorn7 <beorn@grafana.com>
2022-09-27 13:04:16 +02:00
..
fuzz-data textparse: Add fuzzing and fix bug caught 2017-07-07 11:12:17 +02:00
parser Merge branch 'main' into sparsehistogram 2022-08-10 17:54:37 +02:00
testdata Adds day_of_year function to PromQL 2022-05-20 14:08:34 +02:00
bench_test.go Track and report Samples Queried per query 2022-03-21 23:49:17 +01:00
engine.go Fix count() for histograms and add test case 2022-08-29 19:57:29 +05:30
engine_test.go histograms: Add Compact method to the normal integer Histogram 2022-09-27 13:04:16 +02:00
functions.go histograms: Add Compact method to the normal integer Histogram 2022-09-27 13:04:16 +02:00
functions_test.go Avoid literal integer overflows in 32 bit arches. 2022-03-29 22:51:20 +02:00
fuzz.go refactor (promql): move from github.com/pkg/errors to 'errors' and 'fmt' (#10817) 2022-06-08 10:47:52 +02:00
fuzz_test.go error for invalid media type should not be completely swallowed (#10186) 2022-02-08 10:57:56 +01:00
promql_test.go add doc 2022-02-13 21:59:03 +08:00
quantile.go promql: Add histogram_fraction function 2022-06-28 15:58:03 +02:00
query_logger.go Improve error logging for missing config and QL dir (#10260) 2022-02-16 17:43:15 +01:00
query_logger_test.go refactor: move from io/ioutil to io and os packages (#10528) 2022-04-27 11:24:36 +02:00
test.go refactor (promql): move from github.com/pkg/errors to 'errors' and 'fmt' (#10817) 2022-06-08 10:47:52 +02:00
test_test.go tsdb: Rework iterators (#9877) 2021-11-29 13:24:23 +05:30
value.go Merge branch 'main' into sparsehistogram 2022-07-13 21:27:20 +02:00
value_test.go Shortcut `ContainsSameLabelset()` (#11000) 2022-07-13 15:18:10 +05:30