mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-09 23:24:05 -08:00
Merge pull request #14821 from charleskorn/nh-negative-multiplication-division
promql: correctly handle unary negation of native histograms and add tests for multiplication and division of native histograms by negative scalars
This commit is contained in:
commit
8114f9a281
|
@ -131,6 +131,54 @@ func TestFloatHistogramMul(t *testing.T) {
|
|||
NegativeBuckets: []float64{9, 3, 15, 18},
|
||||
},
|
||||
},
|
||||
{
|
||||
"negation",
|
||||
&FloatHistogram{
|
||||
ZeroThreshold: 0.01,
|
||||
ZeroCount: 11,
|
||||
Count: 30,
|
||||
Sum: 23,
|
||||
PositiveSpans: []Span{{-2, 2}, {1, 3}},
|
||||
PositiveBuckets: []float64{1, 0, 3, 4, 7},
|
||||
NegativeSpans: []Span{{3, 2}, {3, 2}},
|
||||
NegativeBuckets: []float64{3, 1, 5, 6},
|
||||
},
|
||||
-1,
|
||||
&FloatHistogram{
|
||||
ZeroThreshold: 0.01,
|
||||
ZeroCount: -11,
|
||||
Count: -30,
|
||||
Sum: -23,
|
||||
PositiveSpans: []Span{{-2, 2}, {1, 3}},
|
||||
PositiveBuckets: []float64{-1, 0, -3, -4, -7},
|
||||
NegativeSpans: []Span{{3, 2}, {3, 2}},
|
||||
NegativeBuckets: []float64{-3, -1, -5, -6},
|
||||
},
|
||||
},
|
||||
{
|
||||
"negative multiplier",
|
||||
&FloatHistogram{
|
||||
ZeroThreshold: 0.01,
|
||||
ZeroCount: 11,
|
||||
Count: 30,
|
||||
Sum: 23,
|
||||
PositiveSpans: []Span{{-2, 2}, {1, 3}},
|
||||
PositiveBuckets: []float64{1, 0, 3, 4, 7},
|
||||
NegativeSpans: []Span{{3, 2}, {3, 2}},
|
||||
NegativeBuckets: []float64{3, 1, 5, 6},
|
||||
},
|
||||
-2,
|
||||
&FloatHistogram{
|
||||
ZeroThreshold: 0.01,
|
||||
ZeroCount: -22,
|
||||
Count: -60,
|
||||
Sum: -46,
|
||||
PositiveSpans: []Span{{-2, 2}, {1, 3}},
|
||||
PositiveBuckets: []float64{-2, 0, -6, -8, -14},
|
||||
NegativeSpans: []Span{{3, 2}, {3, 2}},
|
||||
NegativeBuckets: []float64{-6, -2, -10, -12},
|
||||
},
|
||||
},
|
||||
{
|
||||
"no-op with custom buckets",
|
||||
&FloatHistogram{
|
||||
|
@ -409,6 +457,54 @@ func TestFloatHistogramDiv(t *testing.T) {
|
|||
NegativeBuckets: []float64{1.5, 0.5, 2.5, 3},
|
||||
},
|
||||
},
|
||||
{
|
||||
"negation",
|
||||
&FloatHistogram{
|
||||
ZeroThreshold: 0.01,
|
||||
ZeroCount: 5.5,
|
||||
Count: 3493.3,
|
||||
Sum: 2349209.324,
|
||||
PositiveSpans: []Span{{-2, 1}, {2, 3}},
|
||||
PositiveBuckets: []float64{1, 3.3, 4.2, 0.1},
|
||||
NegativeSpans: []Span{{3, 2}, {3, 2}},
|
||||
NegativeBuckets: []float64{3.1, 3, 1.234e5, 1000},
|
||||
},
|
||||
-1,
|
||||
&FloatHistogram{
|
||||
ZeroThreshold: 0.01,
|
||||
ZeroCount: -5.5,
|
||||
Count: -3493.3,
|
||||
Sum: -2349209.324,
|
||||
PositiveSpans: []Span{{-2, 1}, {2, 3}},
|
||||
PositiveBuckets: []float64{-1, -3.3, -4.2, -0.1},
|
||||
NegativeSpans: []Span{{3, 2}, {3, 2}},
|
||||
NegativeBuckets: []float64{-3.1, -3, -1.234e5, -1000},
|
||||
},
|
||||
},
|
||||
{
|
||||
"negative half",
|
||||
&FloatHistogram{
|
||||
ZeroThreshold: 0.01,
|
||||
ZeroCount: 11,
|
||||
Count: 30,
|
||||
Sum: 23,
|
||||
PositiveSpans: []Span{{-2, 2}, {1, 3}},
|
||||
PositiveBuckets: []float64{1, 0, 3, 4, 7},
|
||||
NegativeSpans: []Span{{3, 2}, {3, 2}},
|
||||
NegativeBuckets: []float64{3, 1, 5, 6},
|
||||
},
|
||||
-2,
|
||||
&FloatHistogram{
|
||||
ZeroThreshold: 0.01,
|
||||
ZeroCount: -5.5,
|
||||
Count: -15,
|
||||
Sum: -11.5,
|
||||
PositiveSpans: []Span{{-2, 2}, {1, 3}},
|
||||
PositiveBuckets: []float64{-0.5, 0, -1.5, -2, -3.5},
|
||||
NegativeSpans: []Span{{3, 2}, {3, 2}},
|
||||
NegativeBuckets: []float64{-1.5, -0.5, -2.5, -3},
|
||||
},
|
||||
},
|
||||
{
|
||||
"no-op with custom buckets",
|
||||
&FloatHistogram{
|
||||
|
|
|
@ -1815,6 +1815,9 @@ func (ev *evaluator) eval(ctx context.Context, expr parser.Expr) (parser.Value,
|
|||
for j := range mat[i].Floats {
|
||||
mat[i].Floats[j].F = -mat[i].Floats[j].F
|
||||
}
|
||||
for j := range mat[i].Histograms {
|
||||
mat[i].Histograms[j].H = mat[i].Histograms[j].H.Copy().Mul(-1)
|
||||
}
|
||||
}
|
||||
if !ev.enableDelayedNameRemoval && mat.ContainsSameLabelset() {
|
||||
ev.errorf("vector cannot contain metrics with the same labelset")
|
||||
|
|
|
@ -818,12 +818,12 @@ histogram_desc_item
|
|||
$$ = yylex.(*parser).newMap()
|
||||
$$["sum"] = $3
|
||||
}
|
||||
| COUNT_DESC COLON number
|
||||
| COUNT_DESC COLON signed_or_unsigned_number
|
||||
{
|
||||
$$ = yylex.(*parser).newMap()
|
||||
$$["count"] = $3
|
||||
}
|
||||
| ZERO_BUCKET_DESC COLON number
|
||||
| ZERO_BUCKET_DESC COLON signed_or_unsigned_number
|
||||
{
|
||||
$$ = yylex.(*parser).newMap()
|
||||
$$["z_bucket"] = $3
|
||||
|
@ -875,11 +875,11 @@ bucket_set : LEFT_BRACKET bucket_set_list SPACE RIGHT_BRACKET
|
|||
}
|
||||
;
|
||||
|
||||
bucket_set_list : bucket_set_list SPACE number
|
||||
bucket_set_list : bucket_set_list SPACE signed_or_unsigned_number
|
||||
{
|
||||
$$ = append($1, $3)
|
||||
}
|
||||
| number
|
||||
| signed_or_unsigned_number
|
||||
{
|
||||
$$ = []float64{$1}
|
||||
}
|
||||
|
|
|
@ -410,55 +410,55 @@ const yyPrivate = 57344
|
|||
const yyLast = 799
|
||||
|
||||
var yyAct = [...]int16{
|
||||
155, 334, 332, 276, 339, 152, 226, 39, 192, 44,
|
||||
291, 290, 156, 118, 82, 178, 229, 107, 106, 346,
|
||||
347, 348, 349, 109, 108, 198, 239, 199, 133, 110,
|
||||
105, 60, 245, 121, 6, 329, 325, 111, 328, 228,
|
||||
200, 201, 160, 119, 304, 267, 293, 128, 260, 160,
|
||||
151, 261, 159, 302, 358, 311, 122, 55, 89, 159,
|
||||
196, 241, 242, 259, 113, 243, 114, 54, 98, 99,
|
||||
302, 112, 101, 256, 104, 88, 230, 232, 234, 235,
|
||||
152, 334, 332, 155, 339, 226, 39, 192, 276, 44,
|
||||
291, 290, 118, 82, 178, 229, 107, 106, 346, 347,
|
||||
348, 349, 109, 108, 198, 239, 199, 156, 110, 105,
|
||||
6, 245, 200, 201, 133, 325, 111, 329, 228, 60,
|
||||
357, 293, 328, 304, 267, 160, 266, 128, 55, 151,
|
||||
302, 311, 302, 196, 340, 159, 55, 89, 54, 356,
|
||||
241, 242, 355, 113, 243, 114, 54, 98, 99, 265,
|
||||
112, 101, 256, 104, 88, 230, 232, 234, 235, 236,
|
||||
244, 246, 249, 250, 251, 252, 253, 257, 258, 105,
|
||||
333, 231, 233, 237, 238, 240, 247, 248, 103, 115,
|
||||
109, 254, 255, 324, 150, 218, 110, 264, 111, 270,
|
||||
77, 35, 7, 149, 188, 163, 322, 321, 173, 320,
|
||||
167, 170, 323, 165, 271, 166, 2, 3, 4, 5,
|
||||
263, 101, 194, 104, 180, 184, 197, 187, 186, 319,
|
||||
272, 202, 203, 204, 205, 206, 207, 208, 209, 210,
|
||||
211, 212, 213, 214, 215, 216, 195, 299, 103, 318,
|
||||
217, 36, 298, 1, 190, 219, 220, 317, 160, 160,
|
||||
316, 193, 160, 154, 182, 196, 229, 297, 159, 159,
|
||||
160, 358, 159, 268, 181, 183, 239, 260, 296, 262,
|
||||
159, 315, 245, 129, 314, 55, 225, 313, 161, 228,
|
||||
161, 161, 259, 312, 161, 54, 86, 295, 310, 288,
|
||||
289, 8, 161, 292, 162, 37, 162, 162, 49, 269,
|
||||
162, 241, 242, 309, 179, 243, 180, 127, 162, 126,
|
||||
308, 223, 294, 256, 48, 222, 230, 232, 234, 235,
|
||||
236, 244, 246, 249, 250, 251, 252, 253, 257, 258,
|
||||
160, 115, 231, 233, 237, 238, 240, 247, 248, 103,
|
||||
159, 109, 254, 255, 324, 150, 357, 110, 333, 218,
|
||||
111, 340, 310, 149, 77, 163, 7, 105, 35, 173,
|
||||
167, 170, 161, 323, 165, 356, 166, 309, 355, 194,
|
||||
2, 3, 4, 5, 308, 322, 184, 197, 162, 186,
|
||||
321, 195, 202, 203, 204, 205, 206, 207, 208, 209,
|
||||
210, 211, 212, 213, 214, 215, 216, 229, 129, 101,
|
||||
217, 104, 219, 220, 190, 266, 270, 239, 160, 121,
|
||||
268, 193, 264, 245, 55, 196, 154, 225, 159, 119,
|
||||
228, 271, 188, 160, 54, 161, 103, 117, 265, 84,
|
||||
262, 299, 122, 159, 320, 263, 298, 272, 10, 83,
|
||||
161, 162, 241, 242, 269, 187, 243, 185, 79, 288,
|
||||
289, 297, 319, 292, 256, 161, 162, 230, 232, 234,
|
||||
235, 236, 244, 246, 249, 250, 251, 252, 253, 257,
|
||||
258, 162, 294, 231, 233, 237, 238, 240, 247, 248,
|
||||
318, 317, 316, 254, 255, 180, 315, 134, 135, 136,
|
||||
137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
|
||||
147, 148, 157, 158, 169, 105, 314, 296, 300, 301,
|
||||
303, 223, 305, 313, 55, 222, 179, 168, 180, 84,
|
||||
306, 307, 177, 125, 54, 182, 295, 176, 124, 83,
|
||||
221, 312, 87, 89, 8, 181, 183, 81, 37, 86,
|
||||
175, 123, 36, 98, 99, 326, 327, 101, 102, 104,
|
||||
88, 127, 331, 126, 50, 336, 337, 338, 182, 335,
|
||||
78, 1, 342, 341, 344, 343, 49, 48, 181, 183,
|
||||
350, 351, 47, 55, 103, 352, 53, 77, 164, 56,
|
||||
46, 354, 22, 54, 59, 55, 172, 9, 9, 57,
|
||||
132, 45, 43, 130, 171, 54, 359, 42, 131, 41,
|
||||
40, 51, 191, 353, 273, 75, 85, 189, 224, 80,
|
||||
345, 18, 19, 120, 153, 20, 58, 227, 52, 116,
|
||||
221, 169, 231, 233, 237, 238, 240, 247, 248, 157,
|
||||
158, 164, 254, 255, 168, 10, 182, 300, 55, 301,
|
||||
303, 47, 305, 46, 132, 79, 181, 183, 54, 306,
|
||||
307, 45, 134, 135, 136, 137, 138, 139, 140, 141,
|
||||
142, 143, 144, 145, 146, 147, 148, 43, 59, 50,
|
||||
84, 9, 9, 121, 326, 78, 327, 130, 171, 121,
|
||||
83, 42, 131, 119, 335, 336, 337, 331, 185, 119,
|
||||
338, 261, 342, 341, 344, 343, 122, 117, 41, 177,
|
||||
350, 351, 122, 55, 176, 352, 53, 77, 40, 56,
|
||||
125, 354, 22, 54, 84, 124, 172, 175, 51, 57,
|
||||
191, 353, 273, 85, 83, 189, 359, 224, 123, 80,
|
||||
345, 120, 81, 153, 58, 75, 227, 52, 116, 0,
|
||||
0, 18, 19, 0, 0, 20, 0, 0, 0, 0,
|
||||
0, 76, 0, 0, 0, 0, 61, 62, 63, 64,
|
||||
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
|
||||
0, 0, 0, 13, 0, 0, 0, 24, 0, 30,
|
||||
0, 0, 31, 32, 55, 38, 0, 53, 77, 0,
|
||||
0, 0, 31, 32, 55, 38, 105, 53, 77, 0,
|
||||
56, 275, 0, 22, 54, 0, 0, 0, 274, 0,
|
||||
57, 0, 278, 279, 277, 284, 286, 283, 285, 280,
|
||||
281, 282, 287, 0, 0, 0, 75, 0, 0, 0,
|
||||
0, 0, 18, 19, 0, 0, 20, 0, 0, 0,
|
||||
0, 0, 76, 0, 0, 0, 0, 61, 62, 63,
|
||||
281, 282, 287, 87, 89, 0, 75, 0, 0, 0,
|
||||
0, 0, 18, 19, 98, 99, 20, 0, 101, 102,
|
||||
104, 88, 76, 0, 0, 0, 0, 61, 62, 63,
|
||||
64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
|
||||
74, 0, 0, 0, 13, 0, 0, 0, 24, 0,
|
||||
74, 0, 0, 0, 13, 103, 0, 0, 24, 0,
|
||||
30, 0, 55, 31, 32, 53, 77, 0, 56, 330,
|
||||
0, 22, 54, 0, 0, 0, 0, 0, 57, 0,
|
||||
278, 279, 277, 284, 286, 283, 285, 280, 281, 282,
|
||||
|
@ -493,51 +493,51 @@ var yyAct = [...]int16{
|
|||
}
|
||||
|
||||
var yyPact = [...]int16{
|
||||
32, 106, 569, 569, 405, 526, -1000, -1000, -1000, 105,
|
||||
28, 102, 569, 569, 405, 526, -1000, -1000, -1000, 98,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, -1000, -1000, -1000, 277, -1000, 297, -1000, 650,
|
||||
-1000, -1000, -1000, -1000, -1000, 342, -1000, 204, -1000, 650,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, 22, 95, -1000, -1000, 483, -1000, 483, 101,
|
||||
-1000, -1000, 21, 93, -1000, -1000, 483, -1000, 483, 97,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, 167, -1000, -1000,
|
||||
281, -1000, -1000, 309, -1000, 23, -1000, -50, -50, -50,
|
||||
-50, -50, -50, -50, -50, -50, -50, -50, -50, -50,
|
||||
-50, -50, -50, 48, 174, 336, 95, -56, -1000, 262,
|
||||
262, 324, -1000, 631, 103, -1000, 280, -1000, -1000, 274,
|
||||
241, -1000, -1000, -1000, 187, -1000, 180, -1000, 159, 483,
|
||||
-1000, -57, -40, -1000, 483, 483, 483, 483, 483, 483,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, 307, -1000, -1000,
|
||||
338, -1000, -1000, 225, -1000, 23, -1000, -44, -44, -44,
|
||||
-44, -44, -44, -44, -44, -44, -44, -44, -44, -44,
|
||||
-44, -44, -44, 47, 171, 259, 93, -57, -1000, 249,
|
||||
249, 324, -1000, 631, 75, -1000, 327, -1000, -1000, 222,
|
||||
130, -1000, -1000, -1000, 298, -1000, 112, -1000, 159, 483,
|
||||
-1000, -58, -48, -1000, 483, 483, 483, 483, 483, 483,
|
||||
483, 483, 483, 483, 483, 483, 483, 483, 483, -1000,
|
||||
165, -1000, -1000, 94, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, 40, 40, 269, -1000, -1000, -1000, -1000, 155, -1000,
|
||||
-1000, 41, -1000, 650, -1000, -1000, 31, -1000, 170, -1000,
|
||||
-1000, -1000, -1000, -1000, 163, -1000, -1000, -1000, -1000, -1000,
|
||||
19, 144, 140, -1000, -1000, -1000, 404, 16, 262, 262,
|
||||
262, 262, 103, 103, 251, 251, 251, 715, 696, 251,
|
||||
251, 715, 103, 103, 251, 103, 16, -1000, 24, -1000,
|
||||
-1000, -1000, 265, -1000, 189, -1000, -1000, -1000, -1000, -1000,
|
||||
39, -1000, -1000, 90, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, 36, 36, 229, -1000, -1000, -1000, -1000, 174, -1000,
|
||||
-1000, 180, -1000, 650, -1000, -1000, 301, -1000, 105, -1000,
|
||||
-1000, -1000, -1000, -1000, 44, -1000, -1000, -1000, -1000, -1000,
|
||||
18, 157, 83, -1000, -1000, -1000, 404, 15, 249, 249,
|
||||
249, 249, 75, 75, 402, 402, 402, 715, 696, 402,
|
||||
402, 715, 75, 75, 402, 75, 15, -1000, 19, -1000,
|
||||
-1000, -1000, 186, -1000, 155, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
483, -1000, -1000, -1000, -1000, -1000, -1000, 34, 34, 18,
|
||||
34, 44, 44, 110, 38, -1000, -1000, 285, 267, 260,
|
||||
240, 236, 235, 234, 206, 188, 134, 129, -1000, -1000,
|
||||
-1000, -1000, -1000, -1000, 102, -1000, -1000, -1000, 14, -1000,
|
||||
650, -1000, -1000, -1000, 34, -1000, 12, 9, 482, -1000,
|
||||
-1000, -1000, 51, 81, 40, 40, 40, 97, 97, 51,
|
||||
97, 51, -73, -1000, -1000, -1000, -1000, -1000, 34, 34,
|
||||
-1000, -1000, -1000, 34, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
40, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, -1000, 104, -1000, 33, -1000, -1000, -1000, -1000,
|
||||
483, -1000, -1000, -1000, -1000, -1000, -1000, 31, 31, 17,
|
||||
31, 37, 37, 206, 34, -1000, -1000, 197, 191, 188,
|
||||
185, 164, 161, 153, 133, 113, 111, 110, -1000, -1000,
|
||||
-1000, -1000, -1000, -1000, 101, -1000, -1000, -1000, 13, -1000,
|
||||
650, -1000, -1000, -1000, 31, -1000, 16, 11, 482, -1000,
|
||||
-1000, -1000, 33, 163, 163, 163, 36, 40, 40, 33,
|
||||
40, 33, -74, -1000, -1000, -1000, -1000, -1000, 31, 31,
|
||||
-1000, -1000, -1000, 31, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
163, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
|
||||
-1000, -1000, -1000, 38, -1000, 160, -1000, -1000, -1000, -1000,
|
||||
}
|
||||
|
||||
var yyPgo = [...]int16{
|
||||
0, 379, 13, 378, 6, 15, 377, 344, 376, 374,
|
||||
373, 370, 198, 294, 369, 14, 368, 10, 11, 367,
|
||||
366, 8, 364, 3, 4, 363, 2, 1, 0, 362,
|
||||
12, 5, 361, 360, 18, 158, 359, 358, 7, 357,
|
||||
354, 17, 353, 31, 352, 9, 351, 350, 340, 332,
|
||||
327, 326, 314, 321, 302,
|
||||
0, 368, 12, 367, 5, 14, 366, 298, 364, 363,
|
||||
361, 360, 265, 211, 359, 13, 357, 10, 11, 355,
|
||||
353, 7, 352, 8, 4, 351, 2, 1, 3, 350,
|
||||
27, 0, 348, 338, 17, 193, 328, 312, 6, 311,
|
||||
308, 16, 307, 39, 297, 9, 281, 274, 273, 271,
|
||||
234, 218, 299, 163, 161,
|
||||
}
|
||||
|
||||
var yyR1 = [...]int8{
|
||||
|
@ -630,9 +630,9 @@ var yyChk = [...]int16{
|
|||
-38, -27, 19, -27, 26, -27, -21, -21, 24, 17,
|
||||
2, 17, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
6, 6, 6, 21, 2, 22, -4, -27, 26, 26,
|
||||
17, -23, -26, 57, -27, -31, -28, -28, -28, -24,
|
||||
17, -23, -26, 57, -27, -31, -31, -31, -28, -24,
|
||||
14, -24, -26, -24, -26, -11, 92, 93, 94, 95,
|
||||
-27, -27, -27, -25, -28, 24, 21, 2, 21, -28,
|
||||
-27, -27, -27, -25, -31, 24, 21, 2, 21, -31,
|
||||
}
|
||||
|
||||
var yyDef = [...]int16{
|
||||
|
|
|
@ -610,6 +610,9 @@ func lexBuckets(l *Lexer) stateFn {
|
|||
case isSpace(r):
|
||||
l.emit(SPACE)
|
||||
return lexSpace
|
||||
case r == '-':
|
||||
l.emit(SUB)
|
||||
return lexNumber
|
||||
case isDigit(r):
|
||||
l.backup()
|
||||
return lexNumber
|
||||
|
|
|
@ -4084,17 +4084,17 @@ func TestParseHistogramSeries(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "all properties used",
|
||||
input: `{} {{schema:1 sum:-0.3 count:3.1 z_bucket:7.1 z_bucket_w:0.05 buckets:[5.1 10 7] offset:-3 n_buckets:[4.1 5] n_offset:-5 counter_reset_hint:gauge}}`,
|
||||
input: `{} {{schema:1 sum:0.3 count:3.1 z_bucket:7.1 z_bucket_w:0.05 buckets:[5.1 10 7] offset:3 n_buckets:[4.1 5] n_offset:5 counter_reset_hint:gauge}}`,
|
||||
expected: []histogram.FloatHistogram{{
|
||||
Schema: 1,
|
||||
Sum: -0.3,
|
||||
Sum: 0.3,
|
||||
Count: 3.1,
|
||||
ZeroCount: 7.1,
|
||||
ZeroThreshold: 0.05,
|
||||
PositiveBuckets: []float64{5.1, 10, 7},
|
||||
PositiveSpans: []histogram.Span{{Offset: -3, Length: 3}},
|
||||
PositiveSpans: []histogram.Span{{Offset: 3, Length: 3}},
|
||||
NegativeBuckets: []float64{4.1, 5},
|
||||
NegativeSpans: []histogram.Span{{Offset: -5, Length: 2}},
|
||||
NegativeSpans: []histogram.Span{{Offset: 5, Length: 2}},
|
||||
CounterResetHint: histogram.GaugeType,
|
||||
}},
|
||||
},
|
||||
|
@ -4114,6 +4114,22 @@ func TestParseHistogramSeries(t *testing.T) {
|
|||
CounterResetHint: histogram.GaugeType,
|
||||
}},
|
||||
},
|
||||
{
|
||||
name: "all properties used, with negative values where supported",
|
||||
input: `{} {{schema:1 sum:-0.3 count:-3.1 z_bucket:-7.1 z_bucket_w:0.05 buckets:[-5.1 -10 -7] offset:-3 n_buckets:[-4.1 -5] n_offset:-5 counter_reset_hint:gauge}}`,
|
||||
expected: []histogram.FloatHistogram{{
|
||||
Schema: 1,
|
||||
Sum: -0.3,
|
||||
Count: -3.1,
|
||||
ZeroCount: -7.1,
|
||||
ZeroThreshold: 0.05,
|
||||
PositiveBuckets: []float64{-5.1, -10, -7},
|
||||
PositiveSpans: []histogram.Span{{Offset: -3, Length: 3}},
|
||||
NegativeBuckets: []float64{-4.1, -5},
|
||||
NegativeSpans: []histogram.Span{{Offset: -5, Length: 2}},
|
||||
CounterResetHint: histogram.GaugeType,
|
||||
}},
|
||||
},
|
||||
{
|
||||
name: "static series",
|
||||
input: `{} {{buckets:[5 10 7] schema:1}}x2`,
|
||||
|
|
|
@ -720,27 +720,39 @@ eval instant at 10m histogram_sum(scalar(histogram_fraction(-Inf, +Inf, sum(hist
|
|||
|
||||
# Apply multiplication and division operator to histogram.
|
||||
load 10m
|
||||
histogram_mul_div {{schema:0 count:21 sum:33 z_bucket:3 z_bucket_w:0.001 buckets:[3 3 3] n_buckets:[3 3 3]}}x1
|
||||
histogram_mul_div {{schema:0 count:30 sum:33 z_bucket:3 z_bucket_w:0.001 buckets:[3 3 3] n_buckets:[6 6 6]}}x1
|
||||
float_series_3 3+0x1
|
||||
float_series_0 0+0x1
|
||||
|
||||
eval instant at 10m histogram_mul_div*3
|
||||
{} {{schema:0 count:63 sum:99 z_bucket:9 z_bucket_w:0.001 buckets:[9 9 9] n_buckets:[9 9 9]}}
|
||||
{} {{schema:0 count:90 sum:99 z_bucket:9 z_bucket_w:0.001 buckets:[9 9 9] n_buckets:[18 18 18]}}
|
||||
|
||||
eval instant at 10m histogram_mul_div*-1
|
||||
{} {{schema:0 count:-30 sum:-33 z_bucket:-3 z_bucket_w:0.001 buckets:[-3 -3 -3] n_buckets:[-6 -6 -6]}}
|
||||
|
||||
eval instant at 10m -histogram_mul_div
|
||||
{} {{schema:0 count:-30 sum:-33 z_bucket:-3 z_bucket_w:0.001 buckets:[-3 -3 -3] n_buckets:[-6 -6 -6]}}
|
||||
|
||||
eval instant at 10m histogram_mul_div*-3
|
||||
{} {{schema:0 count:-90 sum:-99 z_bucket:-9 z_bucket_w:0.001 buckets:[-9 -9 -9] n_buckets:[-18 -18 -18]}}
|
||||
|
||||
eval instant at 10m 3*histogram_mul_div
|
||||
{} {{schema:0 count:63 sum:99 z_bucket:9 z_bucket_w:0.001 buckets:[9 9 9] n_buckets:[9 9 9]}}
|
||||
{} {{schema:0 count:90 sum:99 z_bucket:9 z_bucket_w:0.001 buckets:[9 9 9] n_buckets:[18 18 18]}}
|
||||
|
||||
eval instant at 10m histogram_mul_div*float_series_3
|
||||
{} {{schema:0 count:63 sum:99 z_bucket:9 z_bucket_w:0.001 buckets:[9 9 9] n_buckets:[9 9 9]}}
|
||||
{} {{schema:0 count:90 sum:99 z_bucket:9 z_bucket_w:0.001 buckets:[9 9 9] n_buckets:[18 18 18]}}
|
||||
|
||||
eval instant at 10m float_series_3*histogram_mul_div
|
||||
{} {{schema:0 count:63 sum:99 z_bucket:9 z_bucket_w:0.001 buckets:[9 9 9] n_buckets:[9 9 9]}}
|
||||
{} {{schema:0 count:90 sum:99 z_bucket:9 z_bucket_w:0.001 buckets:[9 9 9] n_buckets:[18 18 18]}}
|
||||
|
||||
eval instant at 10m histogram_mul_div/3
|
||||
{} {{schema:0 count:7 sum:11 z_bucket:1 z_bucket_w:0.001 buckets:[1 1 1] n_buckets:[1 1 1]}}
|
||||
{} {{schema:0 count:10 sum:11 z_bucket:1 z_bucket_w:0.001 buckets:[1 1 1] n_buckets:[2 2 2]}}
|
||||
|
||||
eval instant at 10m histogram_mul_div/-3
|
||||
{} {{schema:0 count:-10 sum:-11 z_bucket:-1 z_bucket_w:0.001 buckets:[-1 -1 -1] n_buckets:[-2 -2 -2]}}
|
||||
|
||||
eval instant at 10m histogram_mul_div/float_series_3
|
||||
{} {{schema:0 count:7 sum:11 z_bucket:1 z_bucket_w:0.001 buckets:[1 1 1] n_buckets:[1 1 1]}}
|
||||
{} {{schema:0 count:10 sum:11 z_bucket:1 z_bucket_w:0.001 buckets:[1 1 1] n_buckets:[2 2 2]}}
|
||||
|
||||
eval instant at 10m histogram_mul_div*0
|
||||
{} {{schema:0 count:0 sum:0 z_bucket:0 z_bucket_w:0.001 buckets:[0 0 0] n_buckets:[0 0 0]}}
|
||||
|
|
Loading…
Reference in a new issue