From c40a57419797faceb549c0fe4af76a77708afc0f Mon Sep 17 00:00:00 2001 From: Julien Pivotto <291750+roidelapluie@users.noreply.github.com> Date: Fri, 17 Oct 2025 14:16:49 +0200 Subject: [PATCH 01/10] discovery/ec2: Fix AWS SDK v2 credentials handling for EC2 and Lightsail discovery After the upgrade to AWS SDK v2, the EC2 and Lightsail service discovery stopped working when using the default AWS credential chain (environment variables, IAM roles, EC2 instance metadata, etc.). The issue was that the code unconditionally created a StaticCredentialsProvider with empty credentials when access_key and secret_key were not configured. In AWS SDK v2, this causes a "static credentials are empty" error and prevents the SDK from falling back to its default credential chain. Signed-off-by: Julien Pivotto <291750+roidelapluie@users.noreply.github.com> --- discovery/aws/ec2.go | 24 +++++++++++++++++------- discovery/aws/lightsail.go | 25 +++++++++++++++++-------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/discovery/aws/ec2.go b/discovery/aws/ec2.go index 539cd84c4f..5fb92559ba 100644 --- a/discovery/aws/ec2.go +++ b/discovery/aws/ec2.go @@ -197,7 +197,6 @@ func (d *EC2Discovery) ec2Client(ctx context.Context) (ec2Client, error) { if d.ec2 != nil { return d.ec2, nil } - credProvider := credentials.NewStaticCredentialsProvider(d.cfg.AccessKey, string(d.cfg.SecretKey), "") // Build the HTTP client from the provided HTTPClientConfig. httpClient, err := config.NewClientFromConfig(d.cfg.HTTPClientConfig, "ec2_sd") @@ -205,14 +204,25 @@ func (d *EC2Discovery) ec2Client(ctx context.Context) (ec2Client, error) { return nil, err } - // Build the AWS config with the provided region and credentials. - cfg, err := awsConfig.LoadDefaultConfig( - ctx, + // Build the AWS config with the provided region. + configOptions := []func(*awsConfig.LoadOptions) error{ awsConfig.WithRegion(d.cfg.Region), - awsConfig.WithCredentialsProvider(credProvider), - awsConfig.WithSharedConfigProfile(d.cfg.Profile), awsConfig.WithHTTPClient(httpClient), - ) + } + + // Only set static credentials if both access key and secret key are provided. + // Otherwise, let the AWS SDK use its default credential chain (environment variables, IAM role, etc.). + if d.cfg.AccessKey != "" && d.cfg.SecretKey != "" { + credProvider := credentials.NewStaticCredentialsProvider(d.cfg.AccessKey, string(d.cfg.SecretKey), "") + configOptions = append(configOptions, awsConfig.WithCredentialsProvider(credProvider)) + } + + // Set the profile if provided. + if d.cfg.Profile != "" { + configOptions = append(configOptions, awsConfig.WithSharedConfigProfile(d.cfg.Profile)) + } + + cfg, err := awsConfig.LoadDefaultConfig(ctx, configOptions...) if err != nil { return nil, fmt.Errorf("could not create aws config: %w", err) } diff --git a/discovery/aws/lightsail.go b/discovery/aws/lightsail.go index 5c356c8c45..0220c0ef24 100644 --- a/discovery/aws/lightsail.go +++ b/discovery/aws/lightsail.go @@ -161,22 +161,31 @@ func (d *LightsailDiscovery) lightsailClient(ctx context.Context) (*lightsail.Cl return d.lightsail, nil } - credProvider := credentials.NewStaticCredentialsProvider(d.cfg.AccessKey, string(d.cfg.SecretKey), "") - // Build the HTTP client from the provided HTTPClientConfig. httpClient, err := config.NewClientFromConfig(d.cfg.HTTPClientConfig, "lightsail_sd") if err != nil { return nil, err } - // Build the AWS config with the provided region and credentials. - cfg, err := awsConfig.LoadDefaultConfig( - ctx, + // Build the AWS config with the provided region. + configOptions := []func(*awsConfig.LoadOptions) error{ awsConfig.WithRegion(d.cfg.Region), - awsConfig.WithCredentialsProvider(credProvider), - awsConfig.WithSharedConfigProfile(d.cfg.Profile), awsConfig.WithHTTPClient(httpClient), - ) + } + + // Only set static credentials if both access key and secret key are provided. + // Otherwise, let the AWS SDK use its default credential chain (environment variables, IAM role, etc.). + if d.cfg.AccessKey != "" && d.cfg.SecretKey != "" { + credProvider := credentials.NewStaticCredentialsProvider(d.cfg.AccessKey, string(d.cfg.SecretKey), "") + configOptions = append(configOptions, awsConfig.WithCredentialsProvider(credProvider)) + } + + // Set the profile if provided. + if d.cfg.Profile != "" { + configOptions = append(configOptions, awsConfig.WithSharedConfigProfile(d.cfg.Profile)) + } + + cfg, err := awsConfig.LoadDefaultConfig(ctx, configOptions...) if err != nil { return nil, fmt.Errorf("could not create aws config: %w", err) } From 3107bdc2ea581f5f99d36efc74178e5b4f9ae213 Mon Sep 17 00:00:00 2001 From: Akshat Sinha <113134119+akshatsinha0@users.noreply.github.com> Date: Mon, 20 Oct 2025 09:59:26 +0530 Subject: [PATCH 02/10] docs(changelog): fix typo in 3.7.0 release notes (#17368) Corrects BUGIFX to BUGFIX for remote-write panic fix entry. Signed-off-by: Akshat Sinha --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe61290ca2..e3ab9cb1c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,7 +46,7 @@ * [BUGFIX] TSDB: Avoid misleading `Failed to calculate size of \"wal\" dir` error logs during WAL clean-up. #17006 * [BUGFIX] TSDB: Prevent erroneously dropping series records during WAL checkpoints. #17029 * [BUGFIX] UI: Fix redirect to path of `-web.external-url` if `-web.route-prefix` is configured. #17240 -* [BUGIFX] Remote-write: Do not panic on invalid symbol table in remote-write 2.0. #17160 +* [BUGFIX] Remote-write: Do not panic on invalid symbol table in remote-write 2.0. #17160 ## 3.6.0 / 2025-09-17 From 7a29bd2cb4e4dfc6407fbfaa255f465088b5c4db Mon Sep 17 00:00:00 2001 From: Joe Adams Date: Mon, 20 Oct 2025 22:47:07 -0400 Subject: [PATCH 03/10] discovery/aws: Fix region load from IMDS Loading the local region from the Instance MetaData Service broke in v3.7. This adds the IMDS call back in order to load the local region when no other method has set the region. fixes #17375 Signed-off-by: Joe Adams --- discovery/aws/ec2.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/discovery/aws/ec2.go b/discovery/aws/ec2.go index 539cd84c4f..d6e0fd012d 100644 --- a/discovery/aws/ec2.go +++ b/discovery/aws/ec2.go @@ -27,6 +27,7 @@ import ( awsConfig "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/credentials/stscreds" + "github.com/aws/aws-sdk-go-v2/feature/ec2/imds" "github.com/aws/aws-sdk-go-v2/service/ec2" ec2Types "github.com/aws/aws-sdk-go-v2/service/ec2/types" "github.com/aws/aws-sdk-go-v2/service/sts" @@ -123,6 +124,7 @@ func (c *EC2SDConfig) UnmarshalYAML(unmarshal func(any) error) error { if err != nil { return err } + if c.Region == "" { cfg, err := awsConfig.LoadDefaultConfig(context.Background()) if err != nil { @@ -134,6 +136,16 @@ func (c *EC2SDConfig) UnmarshalYAML(unmarshal func(any) error) error { // This can happen if the user has set the region in the AWS config file or environment variables. c.Region = cfg.Region } + + if c.Region == "" { + // Try to get the region from the instance metadata service (IMDS). + imdsClient := imds.NewFromConfig(cfg) + region, err := imdsClient.GetRegion(context.Background(), &imds.GetRegionInput{}) + if err != nil { + return err + } + c.Region = region.Region + } } if c.Region == "" { From a425442c1c864c74c9657929b9ac4624a2200344 Mon Sep 17 00:00:00 2001 From: Joe Adams Date: Mon, 20 Oct 2025 22:51:14 -0400 Subject: [PATCH 04/10] Add IMDS go dep Signed-off-by: Joe Adams --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index b3793ba033..02ec483ff7 100644 --- a/go.mod +++ b/go.mod @@ -114,7 +114,7 @@ require ( github.com/Microsoft/go-winio v0.6.1 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.9 github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.9 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.9 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect From 6f9af6651ee24f4053a85ac9af92a6c7cc864adc Mon Sep 17 00:00:00 2001 From: Joe Adams Date: Tue, 21 Oct 2025 20:31:55 -0400 Subject: [PATCH 05/10] Update lightsail to use IMDS for region Signed-off-by: Joe Adams --- discovery/aws/lightsail.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/discovery/aws/lightsail.go b/discovery/aws/lightsail.go index 5c356c8c45..2bfc9c2eae 100644 --- a/discovery/aws/lightsail.go +++ b/discovery/aws/lightsail.go @@ -27,6 +27,7 @@ import ( awsConfig "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/aws/aws-sdk-go-v2/credentials/stscreds" + "github.com/aws/aws-sdk-go-v2/feature/ec2/imds" "github.com/aws/aws-sdk-go-v2/service/lightsail" "github.com/aws/aws-sdk-go-v2/service/sts" "github.com/aws/smithy-go" @@ -105,14 +106,27 @@ func (c *LightsailSDConfig) UnmarshalYAML(unmarshal func(any) error) error { if err != nil { return err } + if c.Region == "" { cfg, err := awsConfig.LoadDefaultConfig(context.Background()) if err != nil { return err } - // Use the region from the AWS config. It will load environment variables and shared config files. - c.Region = cfg.Region + if cfg.Region != "" { + // Use the region from the AWS config. It will load environment variables and shared config files. + c.Region = cfg.Region + } + + if c.Region == "" { + // Try to get the region from the instance metadata service (IMDS). + imdsClient := imds.NewFromConfig(cfg) + region, err := imdsClient.GetRegion(context.Background(), &imds.GetRegionInput{}) + if err != nil { + return err + } + c.Region = region.Region + } } if c.Region == "" { From 0fa1e00dad37bd0caf3c860408ab96cc9a147844 Mon Sep 17 00:00:00 2001 From: Julien Pivotto <291750+roidelapluie@users.noreply.github.com> Date: Fri, 17 Oct 2025 12:10:30 +0200 Subject: [PATCH 06/10] promql: allow 'anchored' and 'smoothed' as metric and label names Add ANCHORED and SMOOTHED keywords to the maybe_label and metric_identifier rules in the parser grammar, allowing them to be used as metric names and label names, similar to other keywords like 'offset', 'step', and 'bool'. This fixes an issue where expressions like `anchored{job="test"}` and `sum by (smoothed) (some_metric)` would fail to parse. Signed-off-by: Julien Pivotto <291750+roidelapluie@users.noreply.github.com> --- promql/parser/generated_parser.y | 4 +- promql/parser/generated_parser.y.go | 899 ++++++++++++++-------------- promql/parser/parse_test.go | 52 ++ 3 files changed, 509 insertions(+), 446 deletions(-) diff --git a/promql/parser/generated_parser.y b/promql/parser/generated_parser.y index 3e2f13d872..d9bbb10b28 100644 --- a/promql/parser/generated_parser.y +++ b/promql/parser/generated_parser.y @@ -696,7 +696,7 @@ metric : metric_identifier label_set ; -metric_identifier: AVG | BOTTOMK | BY | COUNT | COUNT_VALUES | GROUP | IDENTIFIER | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | QUANTILE | STDDEV | STDVAR | SUM | TOPK | WITHOUT | START | END | LIMITK | LIMIT_RATIO | STEP; +metric_identifier: AVG | BOTTOMK | BY | COUNT | COUNT_VALUES | GROUP | IDENTIFIER | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | QUANTILE | STDDEV | STDVAR | SUM | TOPK | WITHOUT | START | END | LIMITK | LIMIT_RATIO | STEP | ANCHORED | SMOOTHED; label_set : LEFT_BRACE label_set_list RIGHT_BRACE { $$ = labels.New($2...) } @@ -953,7 +953,7 @@ counter_reset_hint : UNKNOWN_COUNTER_RESET | COUNTER_RESET | NOT_COUNTER_RESET | aggregate_op : AVG | BOTTOMK | COUNT | COUNT_VALUES | GROUP | MAX | MIN | QUANTILE | STDDEV | STDVAR | SUM | TOPK | LIMITK | LIMIT_RATIO; // Inside of grouping options label names can be recognized as keywords by the lexer. This is a list of keywords that could also be a label name. -maybe_label : AVG | BOOL | BOTTOMK | BY | COUNT | COUNT_VALUES | GROUP | GROUP_LEFT | GROUP_RIGHT | IDENTIFIER | IGNORING | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | ON | QUANTILE | STDDEV | STDVAR | SUM | TOPK | START | END | ATAN2 | LIMITK | LIMIT_RATIO | STEP; +maybe_label : AVG | BOOL | BOTTOMK | BY | COUNT | COUNT_VALUES | GROUP | GROUP_LEFT | GROUP_RIGHT | IDENTIFIER | IGNORING | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | ON | QUANTILE | STDDEV | STDVAR | SUM | TOPK | START | END | ATAN2 | LIMITK | LIMIT_RATIO | STEP | ANCHORED | SMOOTHED; unary_op : ADD | SUB; diff --git a/promql/parser/generated_parser.y.go b/promql/parser/generated_parser.y.go index df4611892a..eb4b32129a 100644 --- a/promql/parser/generated_parser.y.go +++ b/promql/parser/generated_parser.y.go @@ -256,337 +256,344 @@ var yyExca = [...]int16{ -1, 1, 1, -1, -2, 0, - -1, 38, - 1, 147, - 10, 147, - 24, 147, + -1, 40, + 1, 149, + 10, 149, + 24, 149, -2, 0, - -1, 68, - 2, 190, - 15, 190, - 79, 190, - 87, 190, - -2, 107, - -1, 69, - 2, 191, - 15, 191, - 79, 191, - 87, 191, - -2, 108, -1, 70, 2, 192, 15, 192, 79, 192, 87, 192, - -2, 110, + -2, 107, -1, 71, 2, 193, 15, 193, 79, 193, 87, 193, - -2, 111, + -2, 108, -1, 72, 2, 194, 15, 194, 79, 194, 87, 194, - -2, 112, + -2, 110, -1, 73, 2, 195, 15, 195, 79, 195, 87, 195, - -2, 117, + -2, 111, -1, 74, 2, 196, 15, 196, 79, 196, 87, 196, - -2, 119, + -2, 112, -1, 75, 2, 197, 15, 197, 79, 197, 87, 197, - -2, 121, + -2, 117, -1, 76, 2, 198, 15, 198, 79, 198, 87, 198, - -2, 122, + -2, 119, -1, 77, 2, 199, 15, 199, 79, 199, 87, 199, - -2, 123, + -2, 121, -1, 78, 2, 200, 15, 200, 79, 200, 87, 200, - -2, 124, + -2, 122, -1, 79, 2, 201, 15, 201, 79, 201, 87, 201, - -2, 125, + -2, 123, -1, 80, 2, 202, 15, 202, 79, 202, 87, 202, - -2, 129, + -2, 124, -1, 81, 2, 203, 15, 203, 79, 203, 87, 203, + -2, 125, + -1, 82, + 2, 204, + 15, 204, + 79, 204, + 87, 204, + -2, 129, + -1, 83, + 2, 205, + 15, 205, + 79, 205, + 87, 205, -2, 130, - -1, 133, - 41, 266, - 42, 266, - 52, 266, - 53, 266, - 57, 266, + -1, 135, + 41, 270, + 42, 270, + 52, 270, + 53, 270, + 57, 270, -2, 22, - -1, 243, - 9, 253, - 12, 253, - 13, 253, - 18, 253, - 19, 253, - 25, 253, - 41, 253, - 47, 253, - 48, 253, - 51, 253, - 57, 253, - 62, 253, - 63, 253, - 64, 253, - 65, 253, - 66, 253, - 67, 253, - 68, 253, - 69, 253, - 70, 253, - 71, 253, - 72, 253, - 73, 253, - 74, 253, - 75, 253, - 79, 253, - 83, 253, - 87, 253, - 90, 253, - 91, 253, - 92, 253, + -1, 245, + 9, 257, + 12, 257, + 13, 257, + 18, 257, + 19, 257, + 25, 257, + 41, 257, + 47, 257, + 48, 257, + 51, 257, + 57, 257, + 62, 257, + 63, 257, + 64, 257, + 65, 257, + 66, 257, + 67, 257, + 68, 257, + 69, 257, + 70, 257, + 71, 257, + 72, 257, + 73, 257, + 74, 257, + 75, 257, + 79, 257, + 83, 257, + 84, 257, + 85, 257, + 87, 257, + 90, 257, + 91, 257, + 92, 257, -2, 0, - -1, 244, - 9, 253, - 12, 253, - 13, 253, - 18, 253, - 19, 253, - 25, 253, - 41, 253, - 47, 253, - 48, 253, - 51, 253, - 57, 253, - 62, 253, - 63, 253, - 64, 253, - 65, 253, - 66, 253, - 67, 253, - 68, 253, - 69, 253, - 70, 253, - 71, 253, - 72, 253, - 73, 253, - 74, 253, - 75, 253, - 79, 253, - 83, 253, - 87, 253, - 90, 253, - 91, 253, - 92, 253, + -1, 246, + 9, 257, + 12, 257, + 13, 257, + 18, 257, + 19, 257, + 25, 257, + 41, 257, + 47, 257, + 48, 257, + 51, 257, + 57, 257, + 62, 257, + 63, 257, + 64, 257, + 65, 257, + 66, 257, + 67, 257, + 68, 257, + 69, 257, + 70, 257, + 71, 257, + 72, 257, + 73, 257, + 74, 257, + 75, 257, + 79, 257, + 83, 257, + 84, 257, + 85, 257, + 87, 257, + 90, 257, + 91, 257, + 92, 257, -2, 0, } const yyPrivate = 57344 -const yyLast = 1052 +const yyLast = 1071 var yyAct = [...]int16{ - 55, 180, 397, 395, 183, 402, 276, 235, 191, 328, - 91, 45, 342, 139, 66, 219, 89, 241, 17, 84, - 154, 242, 125, 62, 22, 184, 124, 123, 343, 409, - 410, 411, 412, 126, 120, 128, 243, 244, 64, 122, - 392, 127, 391, 362, 121, 119, 149, 319, 122, 192, - 381, 350, 360, 18, 19, 188, 59, 20, 220, 318, - 221, 131, 179, 133, 6, 187, 58, 426, 11, 12, - 14, 15, 16, 21, 23, 25, 26, 27, 28, 29, - 33, 34, 317, 316, 129, 13, 40, 189, 82, 24, - 396, 348, 214, 30, 322, 141, 31, 32, 35, 126, - 223, 360, 134, 190, 83, 369, 315, 127, 239, 323, - 222, 224, 346, 176, 178, 177, 424, 193, 197, 198, - 199, 200, 201, 202, 172, 324, 345, 175, 194, 194, - 194, 194, 194, 194, 194, 423, 173, 215, 422, 196, - 195, 195, 195, 195, 195, 195, 195, 130, 194, 132, - 203, 182, 204, 386, 237, 205, 208, 225, 188, 135, - 195, 227, 320, 2, 3, 4, 5, 268, 187, 171, - 266, 207, 385, 188, 264, 238, 59, 189, 231, 403, - 267, 229, 179, 187, 206, 260, 58, 368, 262, 265, - 189, 194, 425, 190, 269, 270, 264, 195, 311, 150, - 84, 230, 367, 195, 228, 189, 190, 194, 82, 366, - 273, 117, 120, 310, 272, 211, 128, 136, 221, 195, - 218, 190, 121, 119, 83, 217, 122, 118, 141, 271, - 36, 314, 7, 380, 178, 177, 379, 240, 216, 185, - 186, 378, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 344, 223, 174, - 321, 145, 188, 377, 347, 148, 144, 349, 222, 224, - 340, 341, 187, 193, 376, 194, 375, 374, 194, 143, - 373, 351, 95, 10, 194, 59, 116, 195, 372, 371, - 195, 179, 413, 86, 370, 58, 195, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 53, 358, 147, 421, 146, 82, 85, 37, - 1, 170, 359, 361, 194, 363, 117, 120, 110, 67, - 115, 364, 365, 83, 117, 120, 195, 121, 119, 52, - 51, 122, 118, 178, 177, 121, 119, 382, 63, 122, - 118, 9, 9, 50, 142, 112, 114, 113, 194, 8, - 49, 153, 388, 38, 140, 390, 356, 48, 196, 47, - 195, 355, 313, 398, 399, 400, 394, 93, 46, 401, - 44, 405, 404, 407, 406, 414, 354, 279, 151, 209, - 43, 152, 389, 42, 415, 416, 194, 289, 357, 417, - 383, 41, 54, 295, 234, 419, 418, 387, 195, 325, - 278, 117, 120, 94, 420, 232, 274, 87, 408, 117, - 120, 181, 121, 119, 427, 194, 122, 118, 277, 56, - 121, 119, 291, 292, 122, 118, 293, 195, 137, 0, - 0, 0, 0, 0, 306, 0, 0, 280, 282, 284, - 285, 286, 294, 296, 299, 300, 301, 302, 303, 307, - 308, 0, 279, 281, 283, 287, 288, 290, 297, 92, - 142, 298, 289, 0, 0, 304, 305, 309, 295, 90, - 140, 0, 275, 213, 0, 278, 92, 226, 138, 59, - 0, 0, 93, 93, 0, 263, 90, 0, 0, 58, - 0, 0, 117, 120, 88, 0, 0, 291, 292, 93, - 0, 293, 0, 121, 119, 0, 0, 122, 118, 306, - 0, 82, 280, 282, 284, 285, 286, 294, 296, 299, - 300, 301, 302, 303, 307, 308, 0, 83, 281, 283, - 287, 288, 290, 297, 0, 0, 298, 178, 177, 0, - 304, 305, 309, 59, 0, 116, 57, 84, 0, 60, - 0, 0, 22, 58, 117, 120, 210, 0, 0, 61, - 0, 0, 261, 0, 0, 121, 119, 0, 0, 122, - 118, 0, 96, 98, 0, 82, 0, 0, 0, 0, - 0, 18, 19, 107, 108, 20, 0, 110, 111, 115, - 97, 83, 0, 0, 0, 0, 68, 69, 70, 71, + 57, 182, 401, 399, 185, 406, 278, 237, 193, 332, + 93, 47, 346, 141, 68, 221, 91, 413, 414, 415, + 416, 127, 128, 64, 156, 186, 66, 126, 347, 326, + 129, 243, 122, 125, 130, 244, 245, 246, 119, 122, + 118, 124, 123, 121, 327, 151, 124, 118, 214, 123, + 121, 396, 373, 124, 120, 364, 395, 366, 323, 385, + 328, 354, 352, 133, 216, 135, 6, 98, 100, 101, + 364, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 324, 112, 113, 117, 99, 42, 131, 315, 112, + 144, 117, 136, 400, 241, 350, 191, 143, 128, 349, + 142, 137, 270, 314, 322, 320, 129, 268, 317, 114, + 116, 115, 192, 95, 233, 178, 114, 116, 115, 195, + 199, 200, 201, 202, 203, 204, 174, 321, 319, 177, + 196, 196, 196, 196, 196, 196, 196, 232, 175, 217, + 267, 130, 197, 197, 197, 197, 197, 197, 197, 132, + 196, 134, 138, 205, 390, 407, 239, 207, 210, 227, + 206, 223, 197, 229, 428, 2, 3, 4, 5, 360, + 190, 194, 429, 389, 359, 7, 266, 240, 61, 86, + 189, 231, 269, 427, 181, 150, 426, 262, 60, 358, + 264, 119, 122, 196, 425, 209, 271, 272, 266, 197, + 152, 225, 123, 121, 230, 197, 124, 120, 208, 196, + 84, 224, 226, 119, 122, 38, 384, 213, 222, 383, + 223, 197, 10, 382, 123, 121, 85, 235, 124, 120, + 143, 190, 88, 318, 238, 381, 180, 179, 241, 242, + 380, 189, 379, 378, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 348, + 225, 198, 325, 191, 94, 377, 351, 376, 97, 353, + 224, 226, 344, 345, 92, 195, 375, 196, 374, 192, + 196, 39, 228, 355, 61, 55, 196, 95, 1, 197, + 181, 87, 197, 149, 60, 148, 172, 69, 197, 54, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 417, 84, 362, 65, 53, + 190, 9, 9, 144, 52, 51, 363, 365, 196, 367, + 189, 155, 85, 142, 275, 368, 369, 184, 274, 50, + 197, 140, 180, 179, 190, 49, 95, 48, 372, 119, + 122, 386, 191, 273, 189, 8, 46, 153, 211, 40, + 123, 121, 196, 371, 124, 120, 392, 198, 192, 394, + 370, 388, 94, 45, 197, 154, 191, 402, 403, 404, + 398, 44, 92, 405, 43, 409, 408, 411, 410, 418, + 90, 281, 192, 56, 236, 95, 422, 316, 419, 420, + 196, 291, 361, 421, 393, 119, 122, 297, 329, 423, + 96, 391, 197, 234, 280, 276, 123, 121, 424, 89, + 124, 120, 412, 119, 122, 187, 188, 183, 431, 196, + 279, 119, 122, 58, 123, 121, 293, 294, 124, 120, + 295, 197, 123, 121, 139, 0, 124, 120, 308, 0, + 0, 282, 284, 286, 287, 288, 296, 298, 301, 302, + 303, 304, 305, 309, 310, 0, 281, 283, 285, 289, + 290, 292, 299, 313, 312, 300, 291, 0, 220, 306, + 307, 311, 297, 219, 0, 0, 277, 387, 0, 280, + 147, 0, 190, 61, 0, 146, 218, 0, 0, 265, + 0, 0, 189, 60, 430, 0, 119, 122, 145, 0, + 0, 293, 294, 0, 0, 295, 0, 123, 121, 0, + 0, 124, 120, 308, 191, 84, 282, 284, 286, 287, + 288, 296, 298, 301, 302, 303, 304, 305, 309, 310, + 192, 85, 283, 285, 289, 290, 292, 299, 313, 312, + 300, 180, 179, 0, 306, 307, 311, 61, 0, 118, + 59, 86, 0, 62, 0, 0, 22, 60, 0, 0, + 212, 0, 0, 63, 0, 0, 263, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 98, 100, 0, 84, + 0, 0, 0, 0, 0, 18, 19, 109, 110, 20, + 0, 112, 113, 117, 99, 85, 0, 0, 0, 0, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 0, 0, 0, 13, 114, 116, + 115, 24, 37, 36, 215, 30, 0, 0, 31, 32, + 67, 61, 41, 0, 59, 86, 0, 62, 0, 0, + 22, 60, 0, 119, 122, 0, 0, 63, 0, 0, + 0, 0, 0, 0, 123, 121, 0, 0, 124, 120, + 0, 357, 0, 84, 0, 0, 0, 0, 61, 18, + 19, 0, 0, 20, 181, 0, 0, 0, 60, 85, + 356, 0, 0, 0, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 0, 0, + 84, 13, 0, 0, 0, 24, 37, 36, 0, 30, + 0, 0, 31, 32, 67, 61, 85, 0, 59, 86, + 0, 62, 331, 0, 22, 60, 180, 179, 0, 330, + 0, 63, 0, 334, 335, 333, 340, 342, 339, 341, + 336, 337, 338, 343, 0, 0, 0, 84, 0, 0, + 0, 198, 0, 18, 19, 0, 0, 20, 0, 0, + 0, 0, 0, 85, 0, 0, 0, 0, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 0, 0, 0, 13, 112, 114, 113, 24, 0, 0, - 0, 30, 0, 0, 31, 32, 65, 59, 39, 0, - 57, 84, 0, 60, 0, 0, 22, 58, 0, 0, - 0, 0, 233, 61, 0, 0, 188, 0, 0, 236, - 0, 0, 0, 239, 0, 0, 187, 353, 0, 82, - 0, 0, 0, 0, 59, 18, 19, 0, 0, 20, - 179, 0, 0, 0, 58, 83, 352, 0, 189, 0, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 190, 384, 82, 13, 0, 0, - 0, 24, 0, 0, 0, 30, 0, 0, 31, 32, - 65, 59, 83, 0, 57, 84, 0, 60, 0, 0, - 22, 58, 178, 177, 0, 0, 0, 61, 0, 117, - 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 119, 0, 82, 122, 118, 0, 196, 0, 18, - 19, 17, 36, 20, 0, 0, 0, 22, 0, 83, - 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 0, 0, - 0, 13, 0, 0, 0, 24, 18, 19, 0, 30, - 20, 0, 31, 32, 65, 0, 0, 0, 0, 0, - 0, 11, 12, 14, 15, 16, 21, 23, 25, 26, - 27, 28, 29, 33, 34, 116, 0, 0, 13, 0, - 0, 0, 24, 212, 0, 0, 30, 0, 0, 31, - 32, 35, 0, 0, 116, 0, 0, 0, 0, 0, - 0, 0, 96, 98, 99, 0, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 0, 110, 111, 115, - 97, 96, 98, 99, 0, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 0, 110, 111, 115, 97, - 116, 0, 0, 0, 112, 114, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, - 0, 0, 0, 112, 114, 113, 0, 96, 98, 99, - 0, 100, 101, 102, 0, 104, 105, 106, 107, 108, - 109, 0, 110, 111, 115, 97, 96, 98, 99, 0, - 100, 101, 0, 116, 104, 105, 0, 107, 108, 109, - 0, 110, 111, 115, 97, 312, 0, 0, 0, 112, - 114, 113, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 98, 0, 0, 0, 0, 0, 0, 112, 114, - 113, 107, 108, 0, 0, 110, 0, 115, 97, 117, - 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 121, 119, 0, 0, 122, 118, 0, 0, 327, 0, - 0, 0, 112, 114, 113, 326, 0, 0, 0, 330, - 331, 329, 336, 338, 335, 337, 332, 333, 334, 339, - 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 330, 331, 329, 336, 338, 335, 337, 332, 333, - 334, 339, + 82, 83, 17, 86, 0, 13, 0, 0, 22, 24, + 37, 36, 397, 30, 0, 0, 31, 32, 67, 0, + 0, 0, 0, 334, 335, 333, 340, 342, 339, 341, + 336, 337, 338, 343, 0, 0, 0, 18, 19, 0, + 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 11, 12, 14, 15, 16, 21, 23, 25, + 26, 27, 28, 29, 33, 34, 17, 38, 0, 13, + 0, 0, 22, 24, 37, 36, 0, 30, 0, 0, + 31, 32, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 18, 19, 0, 0, 20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 11, 12, 14, 15, + 16, 21, 23, 25, 26, 27, 28, 29, 33, 34, + 118, 0, 0, 13, 0, 0, 0, 24, 37, 36, + 0, 30, 0, 0, 31, 32, 35, 0, 0, 118, + 0, 0, 0, 0, 0, 0, 0, 98, 100, 101, + 0, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 0, 112, 113, 117, 99, 98, 100, 101, 0, + 102, 103, 104, 0, 106, 107, 108, 109, 110, 111, + 173, 112, 113, 117, 99, 118, 0, 61, 0, 114, + 116, 115, 0, 181, 118, 0, 0, 60, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 114, 116, + 115, 0, 98, 100, 101, 0, 102, 103, 0, 84, + 106, 107, 100, 109, 110, 111, 0, 112, 113, 117, + 99, 0, 109, 110, 0, 85, 112, 0, 117, 99, + 0, 0, 0, 0, 0, 180, 179, 0, 0, 0, + 0, 0, 0, 0, 114, 116, 115, 0, 0, 0, + 0, 0, 0, 114, 116, 115, 0, 0, 0, 0, + 176, } var yyPact = [...]int16{ - 62, 222, 749, 749, 628, 6, -1000, -1000, -1000, 217, + 64, 165, 844, 844, 632, 780, -1000, -1000, -1000, 202, -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, 484, -1000, 280, -1000, - 830, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 523, 20, 201, -1000, -1000, - 712, -1000, 712, 187, -1000, 144, 202, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 370, -1000, + 266, -1000, 906, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -3, 19, 126, + -1000, -1000, 716, -1000, 716, 166, -1000, 86, 137, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 468, -1000, -1000, 259, -1000, -1000, - 312, 261, -1000, -1000, 22, -1000, -58, -58, -58, -58, - -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, - -58, -58, 167, -1000, -1000, 149, 47, 276, 276, 276, - 276, 276, 276, 201, -46, -1000, 169, 169, 544, -1000, - 811, 461, 272, -17, -1000, 70, 276, 218, -1000, -1000, - 56, 214, -1000, -1000, 467, -1000, 179, -1000, 176, 647, - 712, -1000, -65, -44, -1000, 712, 712, 712, 712, 712, - 712, 712, 712, 712, 712, 712, 712, 712, 712, 712, - -1000, -1000, -1000, 480, 174, 155, 523, -1000, -1000, 276, - -1000, 152, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 253, - 253, 208, -1000, 523, -1000, 276, 144, -8, -8, -17, - -17, -17, -17, -1000, -1000, -1000, 460, -1000, -1000, 191, - -1000, 830, -1000, -1000, -1000, 948, -1000, 352, -1000, 81, - -1000, -1000, -1000, -1000, -1000, 57, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 21, 136, 68, -1000, -1000, -1000, 991, - 929, 169, 169, 169, 169, 272, 272, 541, 541, 541, - 895, 876, 541, 541, 895, 272, 272, 541, 272, 929, - -1000, 111, 97, 276, -17, 69, 276, 461, 29, -1000, - -1000, -1000, 665, -1000, 364, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 321, -1000, -1000, 488, + -1000, -1000, 291, 181, -1000, -1000, 21, -1000, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, 978, -1000, -1000, 335, 169, 275, + 275, 275, 275, 275, 275, 126, -57, -1000, 193, 193, + 548, -1000, 26, 612, 33, -15, -1000, 42, 275, 476, + -1000, -1000, 216, 157, -1000, -1000, 262, -1000, 179, -1000, + 112, 222, 716, -1000, -51, -44, -1000, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, -1000, -1000, -1000, 484, 125, 92, -3, -1000, + -1000, 275, -1000, 87, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 161, 161, 332, -1000, -3, -1000, 275, 86, -10, + -10, -15, -15, -15, -15, -1000, -1000, -1000, 464, -1000, + -1000, 81, -1000, 906, -1000, -1000, -1000, 390, -1000, 88, + -1000, 103, -1000, -1000, -1000, -1000, -1000, 102, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 32, 55, 3, -1000, -1000, + -1000, 715, 980, 193, 193, 193, 193, 33, 33, 545, + 545, 545, 971, 925, 545, 545, 971, 33, 33, 545, + 33, 980, -1000, 84, 80, 275, -15, 40, 275, 612, + 39, -1000, -1000, -1000, 669, -1000, 167, -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, 712, 276, -1000, -1000, -1000, -1000, -1000, -1000, 82, - 82, 17, 82, 92, 92, 185, 88, -1000, -1000, 288, - 283, 282, 274, 271, 270, 268, 257, 235, 230, 227, - -1000, -1000, -1000, -1000, -1000, 28, 276, 378, -1000, 698, - -1000, 151, -1000, -1000, -1000, 385, -1000, 830, 370, -1000, - -1000, -1000, 82, -1000, 16, 14, 1013, -1000, -1000, -1000, - 33, 164, 164, 164, 253, 165, 165, 33, 165, 33, - -66, -1000, 285, -1000, 276, -1000, -1000, -1000, -1000, -1000, - -1000, 82, 82, -1000, -1000, -1000, 82, -1000, -1000, -1000, - -1000, -1000, -1000, 164, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 276, 293, -1000, -1000, -1000, 114, -1000, - 170, -1000, 46, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 716, 275, -1000, -1000, -1000, + -1000, -1000, -1000, 51, 51, 31, 51, 78, 78, 346, + 35, -1000, -1000, 272, 270, 261, 259, 237, 236, 234, + 229, 217, 213, 210, -1000, -1000, -1000, -1000, -1000, 37, + 275, 465, -1000, 364, -1000, 152, -1000, -1000, -1000, 389, + -1000, 906, 382, -1000, -1000, -1000, 51, -1000, 30, 25, + 785, -1000, -1000, -1000, 36, 311, 311, 311, 161, 141, + 141, 36, 141, 36, -78, -1000, 308, -1000, 275, -1000, + -1000, -1000, -1000, -1000, -1000, 51, 51, -1000, -1000, -1000, + 51, -1000, -1000, -1000, -1000, -1000, -1000, 311, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 275, 172, -1000, + -1000, -1000, 162, -1000, 150, -1000, 483, -1000, -1000, -1000, + -1000, -1000, } var yyPgo = [...]int16{ - 0, 438, 13, 429, 6, 15, 428, 348, 23, 421, - 10, 418, 14, 283, 359, 417, 16, 416, 28, 12, - 415, 413, 7, 409, 9, 5, 406, 3, 2, 4, - 404, 25, 1, 402, 401, 27, 199, 393, 391, 86, - 390, 389, 26, 388, 38, 380, 11, 378, 369, 367, - 361, 360, 353, 340, 339, 312, 0, 329, 8, 321, - 320, 319, + 0, 444, 13, 433, 6, 15, 430, 318, 23, 427, + 10, 422, 14, 222, 355, 419, 16, 415, 28, 12, + 413, 410, 7, 408, 9, 5, 396, 3, 2, 4, + 394, 25, 1, 393, 384, 33, 200, 381, 375, 86, + 373, 358, 27, 357, 26, 356, 11, 347, 345, 339, + 331, 325, 324, 319, 299, 285, 0, 297, 8, 296, + 288, 281, } var yyR1 = [...]int8{ @@ -603,21 +610,22 @@ var yyR1 = [...]int8{ 2, 2, 2, 2, 2, 14, 14, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 13, 13, 13, 13, 15, 15, 15, 16, - 16, 16, 16, 16, 16, 16, 61, 21, 21, 21, - 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 30, 30, 30, 22, 22, 22, 22, 23, 23, 23, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 25, 25, 26, 26, 26, 11, 11, 11, 11, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, + 7, 7, 7, 7, 13, 13, 13, 13, 15, 15, + 15, 16, 16, 16, 16, 16, 16, 16, 61, 21, + 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 30, 30, 30, 22, 22, 22, 22, 23, + 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 25, 25, 26, 26, 26, 11, 11, + 11, 11, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 8, 8, 5, 5, 5, 5, - 46, 46, 29, 29, 31, 31, 32, 32, 28, 27, - 27, 52, 10, 19, 19, 59, 59, 59, 59, 59, - 59, 59, 59, 12, 12, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 57, + 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, + 5, 5, 5, 5, 46, 46, 29, 29, 31, 31, + 32, 32, 28, 27, 27, 52, 10, 19, 19, 59, + 59, 59, 59, 59, 59, 59, 59, 12, 12, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 57, } var yyR2 = [...]int8{ @@ -634,113 +642,116 @@ var yyR2 = [...]int8{ 1, 3, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 4, 2, 0, 3, 1, 2, 3, - 3, 1, 3, 3, 2, 1, 2, 0, 3, 2, - 1, 1, 3, 1, 3, 4, 1, 3, 5, 5, - 1, 1, 1, 4, 3, 3, 2, 3, 1, 2, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 4, 3, 3, 1, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 3, 4, 2, 0, 3, 1, + 2, 3, 3, 1, 3, 3, 2, 1, 2, 0, + 3, 2, 1, 1, 3, 1, 3, 4, 1, 3, + 5, 5, 1, 1, 1, 4, 3, 3, 2, 3, + 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 4, 3, 3, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, - 1, 1, 1, 0, 1, 1, 2, 3, 4, 6, - 7, 4, 1, 1, 1, 1, 2, 3, 3, 3, - 3, 3, 3, 3, 6, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 1, 1, 1, 2, 1, 1, 1, 0, 1, 1, + 2, 3, 4, 6, 7, 4, 1, 1, 1, 1, + 2, 3, 3, 3, 3, 3, 3, 3, 6, 1, + 3, } var yyChk = [...]int16{ -1000, -60, 101, 102, 103, 104, 2, 10, -14, -7, -13, 62, 63, 79, 64, 65, 66, 12, 47, 48, 51, 67, 18, 68, 83, 69, 70, 71, 72, 73, - 87, 90, 91, 74, 75, 92, 13, -61, -14, 10, - -39, -34, -37, -40, -45, -46, -47, -48, -49, -51, - -52, -53, -54, -55, -33, -56, -3, 12, 19, 9, - 15, 25, -8, -7, -44, 92, -12, -57, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 41, 57, 13, -55, -13, -15, 20, -16, - 12, -10, 2, 25, -21, 2, 41, 59, 42, 43, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 56, 57, 83, 85, 84, 58, 14, 41, 57, 53, - 42, 52, 56, -35, -42, 2, 79, 87, 15, -42, - -39, -56, -39, -56, -44, 15, 15, -1, 20, -2, - 12, -10, 2, 20, 7, 2, 4, 2, 4, 24, - -36, -43, -38, -50, 78, -36, -36, -36, -36, -36, + 87, 90, 91, 74, 75, 92, 85, 84, 13, -61, + -14, 10, -39, -34, -37, -40, -45, -46, -47, -48, + -49, -51, -52, -53, -54, -55, -33, -56, -3, 12, + 19, 9, 15, 25, -8, -7, -44, 92, -12, -57, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 41, 57, 13, -55, -13, -15, + 20, -16, 12, -10, 2, 25, -21, 2, 41, 59, + 42, 43, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 56, 57, 83, 85, 84, 58, 14, 41, + 57, 53, 42, 52, 56, -35, -42, 2, 79, 87, + 15, -42, -39, -56, -39, -56, -44, 15, 15, -1, + 20, -2, 12, -10, 2, 20, 7, 2, 4, 2, + 4, 24, -36, -43, -38, -50, 78, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, - -59, 2, -46, -8, 92, -12, -56, 68, 67, 15, - -32, -9, 2, -29, -31, 90, 91, 19, 9, 41, - 57, -58, 2, -56, -46, -8, 92, -56, -56, -56, - -56, -56, -56, -42, -35, -18, 15, 2, -18, -41, - 22, -39, 22, 22, 22, -56, 20, 7, 2, -5, - 2, 4, 54, 44, 55, -5, 20, -16, 25, 2, - 25, 2, -20, 5, -30, -22, 12, -29, -31, 16, - -39, 82, 86, 80, 81, -39, -39, -39, -39, -39, + -36, -36, -59, 2, -46, -8, 92, -12, -56, 68, + 67, 15, -32, -9, 2, -29, -31, 90, 91, 19, + 9, 41, 57, -58, 2, -56, -46, -8, 92, -56, + -56, -56, -56, -56, -56, -42, -35, -18, 15, 2, + -18, -41, 22, -39, 22, 22, 22, -56, 20, 7, + 2, -5, 2, 4, 54, 44, 55, -5, 20, -16, + 25, 2, 25, 2, -20, 5, -30, -22, 12, -29, + -31, 16, -39, 82, 86, 80, 81, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, - -46, 92, -12, 15, -56, 15, 15, -56, 15, -29, - -29, 21, 6, 2, -17, 22, -4, -6, 25, 2, - 62, 78, 63, 79, 64, 65, 66, 80, 81, 12, - 82, 47, 48, 51, 67, 18, 68, 83, 86, 69, - 70, 71, 72, 73, 90, 91, 59, 74, 75, 92, - 22, 7, 7, 20, -2, 25, 2, 25, 2, 26, - 26, -31, 26, 41, 57, -23, 24, 17, -24, 30, - 28, 29, 35, 36, 37, 33, 31, 34, 32, 38, - -18, -18, -19, -18, -19, 15, 15, -56, 22, -56, - 22, -58, 21, 2, 22, 7, 2, -39, -56, -28, - 19, -28, 26, -28, -22, -22, 24, 17, 2, 17, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 22, -56, 22, 7, 21, 2, 22, -4, 22, - -28, 26, 26, 17, -24, -27, 57, -28, -32, -32, - -32, -29, -25, 14, -25, -27, -25, -27, -11, 95, - 96, 97, 98, 7, -56, -28, -28, -28, -26, -32, - -56, 22, 24, 21, 2, 22, 21, -32, + -39, -39, -46, 92, -12, 15, -56, 15, 15, -56, + 15, -29, -29, 21, 6, 2, -17, 22, -4, -6, + 25, 2, 62, 78, 63, 79, 64, 65, 66, 80, + 81, 12, 82, 47, 48, 51, 67, 18, 68, 83, + 86, 69, 70, 71, 72, 73, 90, 91, 59, 74, + 75, 92, 85, 84, 22, 7, 7, 20, -2, 25, + 2, 25, 2, 26, 26, -31, 26, 41, 57, -23, + 24, 17, -24, 30, 28, 29, 35, 36, 37, 33, + 31, 34, 32, 38, -18, -18, -19, -18, -19, 15, + 15, -56, 22, -56, 22, -58, 21, 2, 22, 7, + 2, -39, -56, -28, 19, -28, 26, -28, -22, -22, + 24, 17, 2, 17, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 22, -56, 22, 7, 21, + 2, 22, -4, 22, -28, 26, 26, 17, -24, -27, + 57, -28, -32, -32, -32, -29, -25, 14, -25, -27, + -25, -27, -11, 95, 96, 97, 98, 7, -56, -28, + -28, -28, -26, -32, -56, 22, 24, 21, 2, 22, + 21, -32, } var yyDef = [...]int16{ - 0, -2, 135, 135, 0, 0, 7, 6, 1, 135, + 0, -2, 137, 137, 0, 0, 7, 6, 1, 137, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 0, 2, -2, 3, - 4, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 0, 113, 240, 241, - 0, 251, 0, 90, 91, 131, 0, 275, -2, -2, + 126, 127, 128, 129, 130, 131, 132, 133, 0, 2, + -2, 3, 4, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 0, 113, + 244, 245, 0, 255, 0, 90, 91, 131, 0, 279, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, - -2, -2, 234, 235, 0, 5, 105, 0, 134, 137, - 0, 141, 145, 252, 146, 150, 46, 46, 46, 46, + -2, -2, -2, -2, 238, 239, 0, 5, 105, 0, + 136, 139, 0, 143, 147, 256, 148, 152, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 0, 74, 75, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 26, 0, 0, 0, 64, - 0, 22, 88, -2, 89, 0, 0, 0, 94, 96, - 0, 100, 104, 132, 0, 138, 0, 144, 0, 149, - 0, 45, 50, 51, 47, 0, 0, 0, 0, 0, + 46, 46, 46, 46, 0, 74, 75, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 26, 0, 0, + 0, 64, 0, 22, 88, -2, 89, 0, 0, 0, + 94, 96, 0, 100, 104, 134, 0, 140, 0, 146, + 0, 151, 0, 45, 50, 51, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 72, 73, 255, 0, 0, 0, 262, 263, 264, 0, - 76, 0, 78, 246, 247, 79, 80, 242, 243, 0, - 0, 0, 87, 71, 265, 0, 0, 267, 268, 269, - 270, 271, 272, 23, 24, 27, 0, 57, 28, 0, - 66, 68, 70, 276, 273, 0, 92, 0, 97, 0, - 103, 236, 237, 238, 239, 0, 133, 136, 139, 142, - 140, 143, 148, 151, 153, 156, 160, 161, 162, 0, - 29, 0, 0, -2, -2, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 256, 0, 0, 0, 266, 0, 0, 0, 0, 244, - 245, 81, 0, 86, 0, 56, 59, 61, 62, 63, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 0, 0, 72, 73, 259, 0, 0, 0, 266, 267, + 268, 0, 76, 0, 78, 250, 251, 79, 80, 246, + 247, 0, 0, 0, 87, 71, 269, 0, 0, 271, + 272, 273, 274, 275, 276, 23, 24, 27, 0, 57, + 28, 0, 66, 68, 70, 280, 277, 0, 92, 0, + 97, 0, 103, 240, 241, 242, 243, 0, 135, 138, + 141, 144, 142, 145, 150, 153, 155, 158, 162, 163, + 164, 0, 29, 0, 0, -2, -2, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 260, 0, 0, 0, 270, 0, 0, 0, + 0, 248, 249, 81, 0, 86, 0, 56, 59, 61, + 62, 63, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 65, 69, 0, 93, 95, 98, 102, 99, 101, 0, - 0, 0, 0, 0, 0, 0, 0, 166, 168, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 48, 49, 52, 254, 53, 0, 0, 0, 257, 0, - 77, 0, 83, 85, 54, 0, 60, 67, 0, 152, - 248, 154, 0, 157, 0, 0, 0, 164, 169, 165, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 258, 0, 261, 0, 82, 84, 55, 58, 274, - 155, 0, 0, 163, 167, 170, 0, 250, 171, 172, - 173, 174, 175, 0, 176, 177, 178, 179, 180, 186, - 187, 188, 189, 0, 0, 158, 159, 249, 0, 184, - 0, 259, 0, 182, 185, 260, 181, 183, + 234, 235, 236, 237, 65, 69, 0, 93, 95, 98, + 102, 99, 101, 0, 0, 0, 0, 0, 0, 0, + 0, 168, 170, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 49, 52, 258, 53, 0, + 0, 0, 261, 0, 77, 0, 83, 85, 54, 0, + 60, 67, 0, 154, 252, 156, 0, 159, 0, 0, + 0, 166, 171, 167, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 262, 0, 265, 0, 82, + 84, 55, 58, 278, 157, 0, 0, 165, 169, 172, + 0, 254, 173, 174, 175, 176, 177, 0, 178, 179, + 180, 181, 182, 188, 189, 190, 191, 0, 0, 160, + 161, 253, 0, 186, 0, 263, 0, 184, 187, 264, + 183, 185, } var yyTok1 = [...]int8{ @@ -1680,82 +1691,82 @@ yydefault: { yyVAL.labels = yyDollar[1].labels } - case 132: + case 134: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.labels = labels.New(yyDollar[2].lblList...) } - case 133: + case 135: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.labels = labels.New(yyDollar[2].lblList...) } - case 134: + case 136: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.labels = labels.New() } - case 135: + case 137: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.labels = labels.New() } - case 136: + case 138: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.lblList = append(yyDollar[1].lblList, yyDollar[3].label) } - case 137: + case 139: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.lblList = []labels.Label{yyDollar[1].label} } - case 138: + case 140: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).unexpected("label set", "\",\" or \"}\"") yyVAL.lblList = yyDollar[1].lblList } - case 139: - yyDollar = yyS[yypt-3 : yypt+1] - { - yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)} - } - case 140: - yyDollar = yyS[yypt-3 : yypt+1] - { - yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)} - } case 141: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] { - yyVAL.label = labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val} + yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)} } case 142: yyDollar = yyS[yypt-3 : yypt+1] { - yylex.(*parser).unexpected("label set", "string") - yyVAL.label = labels.Label{} + yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)} } case 143: + yyDollar = yyS[yypt-1 : yypt+1] + { + yyVAL.label = labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val} + } + case 144: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).unexpected("label set", "string") yyVAL.label = labels.Label{} } - case 144: + case 145: + yyDollar = yyS[yypt-3 : yypt+1] + { + yylex.(*parser).unexpected("label set", "string") + yyVAL.label = labels.Label{} + } + case 146: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).unexpected("label set", "\"=\"") yyVAL.label = labels.Label{} } - case 145: + case 147: yyDollar = yyS[yypt-1 : yypt+1] { yylex.(*parser).unexpected("label set", "identifier or \"}\"") yyVAL.label = labels.Label{} } - case 146: + case 148: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).generatedParserResult = &seriesDescription{ @@ -1763,33 +1774,33 @@ yydefault: values: yyDollar[2].series, } } - case 147: + case 149: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.series = []SequenceValue{} } - case 148: + case 150: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.series = append(yyDollar[1].series, yyDollar[3].series...) } - case 149: + case 151: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.series = yyDollar[1].series } - case 150: + case 152: yyDollar = yyS[yypt-1 : yypt+1] { yylex.(*parser).unexpected("series values", "") yyVAL.series = nil } - case 151: + case 153: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.series = []SequenceValue{{Omitted: true}} } - case 152: + case 154: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.series = []SequenceValue{} @@ -1797,12 +1808,12 @@ yydefault: yyVAL.series = append(yyVAL.series, SequenceValue{Omitted: true}) } } - case 153: + case 155: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.series = []SequenceValue{{Value: yyDollar[1].float}} } - case 154: + case 156: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.series = []SequenceValue{} @@ -1811,7 +1822,7 @@ yydefault: yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float}) } } - case 155: + case 157: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.series = []SequenceValue{} @@ -1821,12 +1832,12 @@ yydefault: yyDollar[1].float += yyDollar[2].float } } - case 156: + case 158: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.series = []SequenceValue{{Histogram: yyDollar[1].histogram}} } - case 157: + case 159: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.series = []SequenceValue{} @@ -1836,7 +1847,7 @@ yydefault: //$1 += $2 } } - case 158: + case 160: yyDollar = yyS[yypt-5 : yypt+1] { val, err := yylex.(*parser).histogramsIncreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint) @@ -1845,7 +1856,7 @@ yydefault: } yyVAL.series = val } - case 159: + case 161: yyDollar = yyS[yypt-5 : yypt+1] { val, err := yylex.(*parser).histogramsDecreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint) @@ -1854,7 +1865,7 @@ yydefault: } yyVAL.series = val } - case 160: + case 162: yyDollar = yyS[yypt-1 : yypt+1] { if yyDollar[1].item.Val != "stale" { @@ -1862,130 +1873,130 @@ yydefault: } yyVAL.float = math.Float64frombits(value.StaleNaN) } - case 163: + case 165: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors) } - case 164: + case 166: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors) } - case 165: + case 167: yyDollar = yyS[yypt-3 : yypt+1] { m := yylex.(*parser).newMap() yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m) } - case 166: + case 168: yyDollar = yyS[yypt-2 : yypt+1] { m := yylex.(*parser).newMap() yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m) } - case 167: + case 169: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors)) } - case 168: + case 170: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.descriptors = yyDollar[1].descriptors } - case 169: + case 171: yyDollar = yyS[yypt-2 : yypt+1] { yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]") } - case 170: - yyDollar = yyS[yypt-3 : yypt+1] - { - yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["schema"] = yyDollar[3].int - } - case 171: - yyDollar = yyS[yypt-3 : yypt+1] - { - yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["sum"] = yyDollar[3].float - } case 172: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["count"] = yyDollar[3].float + yyVAL.descriptors["schema"] = yyDollar[3].int } case 173: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["z_bucket"] = yyDollar[3].float + yyVAL.descriptors["sum"] = yyDollar[3].float } case 174: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float + yyVAL.descriptors["count"] = yyDollar[3].float } case 175: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set + yyVAL.descriptors["z_bucket"] = yyDollar[3].float } case 176: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set + yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float } case 177: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["offset"] = yyDollar[3].int + yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set } case 178: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set + yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set } case 179: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["n_offset"] = yyDollar[3].int + yyVAL.descriptors["offset"] = yyDollar[3].int } case 180: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.descriptors = yylex.(*parser).newMap() - yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item + yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set } case 181: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] { - yyVAL.bucket_set = yyDollar[2].bucket_set + yyVAL.descriptors = yylex.(*parser).newMap() + yyVAL.descriptors["n_offset"] = yyDollar[3].int } case 182: yyDollar = yyS[yypt-3 : yypt+1] { - yyVAL.bucket_set = yyDollar[2].bucket_set + yyVAL.descriptors = yylex.(*parser).newMap() + yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item } case 183: + yyDollar = yyS[yypt-4 : yypt+1] + { + yyVAL.bucket_set = yyDollar[2].bucket_set + } + case 184: + yyDollar = yyS[yypt-3 : yypt+1] + { + yyVAL.bucket_set = yyDollar[2].bucket_set + } + case 185: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float) } - case 184: + case 186: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.bucket_set = []float64{yyDollar[1].float} } - case 240: + case 244: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.node = &NumberLiteral{ @@ -1993,7 +2004,7 @@ yydefault: PosRange: yyDollar[1].item.PositionRange(), } } - case 241: + case 245: yyDollar = yyS[yypt-1 : yypt+1] { var err error @@ -2008,12 +2019,12 @@ yydefault: Duration: true, } } - case 242: + case 246: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val) } - case 243: + case 247: yyDollar = yyS[yypt-1 : yypt+1] { var err error @@ -2024,17 +2035,17 @@ yydefault: } yyVAL.float = dur.Seconds() } - case 244: + case 248: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.float = yyDollar[2].float } - case 245: + case 249: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.float = -yyDollar[2].float } - case 248: + case 252: yyDollar = yyS[yypt-1 : yypt+1] { var err error @@ -2043,17 +2054,17 @@ yydefault: yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid repetition in series values: %s", err) } } - case 249: + case 253: yyDollar = yyS[yypt-2 : yypt+1] { yyVAL.int = -int64(yyDollar[2].uint) } - case 250: + case 254: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.int = int64(yyDollar[1].uint) } - case 251: + case 255: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.node = &StringLiteral{ @@ -2061,7 +2072,7 @@ yydefault: PosRange: yyDollar[1].item.PositionRange(), } } - case 252: + case 256: yyDollar = yyS[yypt-1 : yypt+1] { yyVAL.item = Item{ @@ -2070,12 +2081,12 @@ yydefault: Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val), } } - case 253: + case 257: yyDollar = yyS[yypt-0 : yypt+1] { yyVAL.strings = nil } - case 255: + case 259: yyDollar = yyS[yypt-1 : yypt+1] { nl := yyDollar[1].node.(*NumberLiteral) @@ -2086,7 +2097,7 @@ yydefault: } yyVAL.node = nl } - case 256: + case 260: yyDollar = yyS[yypt-2 : yypt+1] { nl := yyDollar[2].node.(*NumberLiteral) @@ -2101,7 +2112,7 @@ yydefault: nl.PosRange.Start = yyDollar[1].item.Pos yyVAL.node = nl } - case 257: + case 261: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2110,7 +2121,7 @@ yydefault: EndPos: yyDollar[3].item.PositionRange().End, } } - case 258: + case 262: yyDollar = yyS[yypt-4 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2123,7 +2134,7 @@ yydefault: StartPos: yyDollar[1].item.Pos, } } - case 259: + case 263: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2134,7 +2145,7 @@ yydefault: RHS: yyDollar[5].node.(Expr), } } - case 260: + case 264: yyDollar = yyS[yypt-7 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2150,7 +2161,7 @@ yydefault: }, } } - case 261: + case 265: yyDollar = yyS[yypt-4 : yypt+1] { de := yyDollar[3].node.(*DurationExpr) @@ -2165,7 +2176,7 @@ yydefault: } yyVAL.node = yyDollar[3].node } - case 265: + case 269: yyDollar = yyS[yypt-1 : yypt+1] { nl := yyDollar[1].node.(*NumberLiteral) @@ -2176,7 +2187,7 @@ yydefault: } yyVAL.node = nl } - case 266: + case 270: yyDollar = yyS[yypt-2 : yypt+1] { switch expr := yyDollar[2].node.(type) { @@ -2209,25 +2220,25 @@ yydefault: break } } - case 267: + case 271: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr)) yyVAL.node = &DurationExpr{Op: ADD, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)} } - case 268: + case 272: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr)) yyVAL.node = &DurationExpr{Op: SUB, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)} } - case 269: + case 273: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr)) yyVAL.node = &DurationExpr{Op: MUL, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)} } - case 270: + case 274: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr)) @@ -2238,7 +2249,7 @@ yydefault: } yyVAL.node = &DurationExpr{Op: DIV, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)} } - case 271: + case 275: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr)) @@ -2249,13 +2260,13 @@ yydefault: } yyVAL.node = &DurationExpr{Op: MOD, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)} } - case 272: + case 276: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr)) yyVAL.node = &DurationExpr{Op: POW, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)} } - case 273: + case 277: yyDollar = yyS[yypt-3 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2264,7 +2275,7 @@ yydefault: EndPos: yyDollar[3].item.PositionRange().End, } } - case 274: + case 278: yyDollar = yyS[yypt-6 : yypt+1] { yyVAL.node = &DurationExpr{ @@ -2275,7 +2286,7 @@ yydefault: RHS: yyDollar[5].node.(Expr), } } - case 276: + case 280: yyDollar = yyS[yypt-3 : yypt+1] { yylex.(*parser).experimentalDurationExpr(yyDollar[2].node.(Expr)) diff --git a/promql/parser/parse_test.go b/promql/parser/parse_test.go index d310984fa8..9926db59fa 100644 --- a/promql/parser/parse_test.go +++ b/promql/parser/parse_test.go @@ -798,6 +798,28 @@ var testExpr = []struct { EndPos: 21, }, }, + { + input: `anchored{job="test"}`, + expected: &VectorSelector{ + Name: "anchored", + LabelMatchers: []*labels.Matcher{ + MustLabelMatcher(labels.MatchEqual, "job", "test"), + MustLabelMatcher(labels.MatchEqual, model.MetricNameLabel, "anchored"), + }, + PosRange: posrange.PositionRange{Start: 0, End: 20}, + }, + }, + { + input: `smoothed{job="test"}`, + expected: &VectorSelector{ + Name: "smoothed", + LabelMatchers: []*labels.Matcher{ + MustLabelMatcher(labels.MatchEqual, "job", "test"), + MustLabelMatcher(labels.MatchEqual, model.MetricNameLabel, "smoothed"), + }, + PosRange: posrange.PositionRange{Start: 0, End: 20}, + }, + }, // Vector binary operations. { input: "foo * bar", @@ -2773,6 +2795,36 @@ var testExpr = []struct { PosRange: posrange.PositionRange{Start: 0, End: 25}, }, }, + { + input: "sum by (anchored)(some_metric)", + expected: &AggregateExpr{ + Op: SUM, + Expr: &VectorSelector{ + Name: "some_metric", + LabelMatchers: []*labels.Matcher{ + MustLabelMatcher(labels.MatchEqual, model.MetricNameLabel, "some_metric"), + }, + PosRange: posrange.PositionRange{Start: 18, End: 29}, + }, + Grouping: []string{"anchored"}, + PosRange: posrange.PositionRange{Start: 0, End: 30}, + }, + }, + { + input: "sum by (smoothed)(some_metric)", + expected: &AggregateExpr{ + Op: SUM, + Expr: &VectorSelector{ + Name: "some_metric", + LabelMatchers: []*labels.Matcher{ + MustLabelMatcher(labels.MatchEqual, model.MetricNameLabel, "some_metric"), + }, + PosRange: posrange.PositionRange{Start: 18, End: 29}, + }, + Grouping: []string{"smoothed"}, + PosRange: posrange.PositionRange{Start: 0, End: 30}, + }, + }, { input: `sum by ("foo bar")({"some.metric"})`, expected: &AggregateExpr{ From c9d4689e0b943b9cd6984844e88c4c7abcac175d Mon Sep 17 00:00:00 2001 From: Julien Pivotto <291750+roidelapluie@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:54:31 +0200 Subject: [PATCH 07/10] relabeling: Fix labelmap action validation with legacy metric name scheme Fixes #17370 In Prometheus v3.7.0, using labelmap actions with replacement patterns containing regex variables (e.g., `$1`, `${1}`) would fail validation when `metric_name_validation_scheme` was set to `legacy`, causing Prometheus to fail at startup with: "$1" is invalid 'replacement' for labelmap action This was a regression as the same configuration worked in v3.6.0. The issue was in the validation logic: while UTF-8 validation correctly allowed `$` characters, legacy validation incorrectly used `IsValidLabelName` which rejects `$` characters. The fix ensures legacy validation uses `relabelTargetLegacy` regex which explicitly supports regex template variables. Added test cases to verify labelmap validation works with both `$1` and `${1}` replacement patterns under legacy validation scheme. Signed-off-by: Julien Pivotto <291750+roidelapluie@users.noreply.github.com> --- model/relabel/relabel.go | 8 +++++++- model/relabel/relabel_test.go | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/model/relabel/relabel.go b/model/relabel/relabel.go index c7c5439d54..c15049b2b0 100644 --- a/model/relabel/relabel.go +++ b/model/relabel/relabel.go @@ -145,7 +145,13 @@ func (c *Config) Validate(nameValidationScheme model.ValidationScheme) error { // UTF-8 allows ${} characters, so standard validation allow $variables by default. // TODO(bwplotka): Relabelling users cannot put $ and ${<...>} characters in metric names or values. // Design escaping mechanism to allow that, once valid use case appears. - return c.NameValidationScheme.IsValidLabelName(value) + switch c.NameValidationScheme { + case model.UTF8Validation: + return c.NameValidationScheme.IsValidLabelName(value) + default: + // For legacy validation, use the legacy regex that allows $variables. + return relabelTargetLegacy.MatchString(value) + } } if c.Action == Replace && varInRegexTemplate(c.TargetLabel) && !isValidLabelNameWithRegexVarFn(c.TargetLabel) { return fmt.Errorf("%q is invalid 'target_label' for %s action", c.TargetLabel, c.Action) diff --git a/model/relabel/relabel_test.go b/model/relabel/relabel_test.go index 79730055cb..99a4e09f56 100644 --- a/model/relabel/relabel_test.go +++ b/model/relabel/relabel_test.go @@ -831,6 +831,22 @@ func TestRelabelValidate(t *testing.T) { NameValidationScheme: model.UTF8Validation, }, }, + { + config: Config{ + Regex: MustNewRegexp("__meta_kubernetes_pod_label_(strimzi_io_.+)"), + Action: LabelMap, + Replacement: "$1", + NameValidationScheme: model.LegacyValidation, + }, + }, + { + config: Config{ + Regex: MustNewRegexp("__meta_(.+)"), + Action: LabelMap, + Replacement: "${1}", + NameValidationScheme: model.LegacyValidation, + }, + }, } for i, test := range tests { t.Run(strconv.Itoa(i), func(t *testing.T) { From a1000efe55929435311cdad9981977b52c5d995c Mon Sep 17 00:00:00 2001 From: Julius Volz Date: Fri, 17 Oct 2025 12:17:32 +0200 Subject: [PATCH 08/10] Fix formatting of range vector selectors with smoothed/anchored modifier The modifiers were already printed as part of the VectorSelector, so for: `foo[5m] anchored` ...the output was: `foo anchored[5m] anchored` Similar to how it was already done for `@` and `offset`, I now removed these modifiers in the copy of the vector selector that is used to print the matrix selector. I also removed some unused code that restored the copy of the vector selector after overwriting its fields. AFAICS there was no use in doing that, since it was a copy already that would just be thrown away after printing, and the original selector wasn't affected. I also removed an erroneous comment in `atOffset()` where no actual copying took place and no fields were overwritten. Signed-off-by: Julius Volz --- promql/parser/printer.go | 14 ++++++-------- promql/parser/printer_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/promql/parser/printer.go b/promql/parser/printer.go index 6bfc8d41e9..a562b88044 100644 --- a/promql/parser/printer.go +++ b/promql/parser/printer.go @@ -229,7 +229,6 @@ func (node *Call) ShortString() string { } func (node *MatrixSelector) atOffset() (string, string) { - // Copy the Vector selector before changing the offset vecSelector := node.VectorSelector.(*VectorSelector) offset := "" switch { @@ -254,20 +253,21 @@ func (node *MatrixSelector) atOffset() (string, string) { func (node *MatrixSelector) String() string { at, offset := node.atOffset() - // Copy the Vector selector before changing the offset + // Copy the Vector selector so we can modify it to not print @, offset, and other modifiers twice. vecSelector := *node.VectorSelector.(*VectorSelector) - // Do not print the @ and offset twice. - offsetVal, offsetExprVal, atVal, preproc := vecSelector.OriginalOffset, vecSelector.OriginalOffsetExpr, vecSelector.Timestamp, vecSelector.StartOrEnd + anchored, smoothed := vecSelector.Anchored, vecSelector.Smoothed vecSelector.OriginalOffset = 0 vecSelector.OriginalOffsetExpr = nil vecSelector.Timestamp = nil vecSelector.StartOrEnd = 0 + vecSelector.Anchored = false + vecSelector.Smoothed = false extendedAttribute := "" switch { - case vecSelector.Anchored: + case anchored: extendedAttribute = " anchored" - case vecSelector.Smoothed: + case smoothed: extendedAttribute = " smoothed" } rangeStr := model.Duration(node.Range).String() @@ -276,8 +276,6 @@ func (node *MatrixSelector) String() string { } str := fmt.Sprintf("%s[%s]%s%s%s", vecSelector.String(), rangeStr, extendedAttribute, at, offset) - vecSelector.OriginalOffset, vecSelector.OriginalOffsetExpr, vecSelector.Timestamp, vecSelector.StartOrEnd = offsetVal, offsetExprVal, atVal, preproc - return str } diff --git a/promql/parser/printer_test.go b/promql/parser/printer_test.go index 0248d280d4..c9febc61fc 100644 --- a/promql/parser/printer_test.go +++ b/promql/parser/printer_test.go @@ -115,6 +115,36 @@ func TestExprString(t *testing.T) { { in: `a[1h:5m] offset 1m`, }, + { + in: `a anchored`, + }, + { + in: `a[5m] anchored`, + }, + { + in: `a{b="c"}[5m] anchored`, + }, + { + in: `a{b="c"}[5m] anchored offset 1m`, + }, + { + in: `a{b="c"}[5m] anchored @ start() offset 1m`, + }, + { + in: `a smoothed`, + }, + { + in: `a[5m] smoothed`, + }, + { + in: `a{b="c"}[5m] smoothed`, + }, + { + in: `a{b="c"}[5m] smoothed offset 1m`, + }, + { + in: `a{b="c"}[5m] smoothed @ start() offset 1m`, + }, { in: `{__name__="a"}`, }, @@ -222,6 +252,8 @@ func TestExprString(t *testing.T) { }, } + EnableExtendedRangeSelectors = true + for _, test := range inputs { t.Run(test.in, func(t *testing.T) { expr, err := ParseExpr(test.in) From 88b009f8a063ba3f7ebcbb60c65b5a3847226fdf Mon Sep 17 00:00:00 2001 From: Julius Volz Date: Fri, 17 Oct 2025 12:30:57 +0200 Subject: [PATCH 09/10] Disable extended range selector modifiers again after test run Signed-off-by: Julius Volz --- promql/parser/printer_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/promql/parser/printer_test.go b/promql/parser/printer_test.go index c9febc61fc..06ecbf175f 100644 --- a/promql/parser/printer_test.go +++ b/promql/parser/printer_test.go @@ -253,6 +253,9 @@ func TestExprString(t *testing.T) { } EnableExtendedRangeSelectors = true + t.Cleanup(func() { + EnableExtendedRangeSelectors = false + }) for _, test := range inputs { t.Run(test.in, func(t *testing.T) { From 7f2e7c86f800230ce13ce022cddaeba7cd2a9cc1 Mon Sep 17 00:00:00 2001 From: George Krajcsovits Date: Wed, 22 Oct 2025 14:31:56 +0200 Subject: [PATCH 10/10] prepare release 3.7.2 (#17385) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * prepare release 3.7.2 Signed-off-by: György Krajcsovits * Update CHANGELOG.md Co-authored-by: Julien <291750+roidelapluie@users.noreply.github.com> Signed-off-by: George Krajcsovits --------- Signed-off-by: György Krajcsovits Signed-off-by: George Krajcsovits Co-authored-by: Julien <291750+roidelapluie@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ VERSION | 2 +- web/ui/mantine-ui/package.json | 4 ++-- web/ui/module/codemirror-promql/package.json | 4 ++-- web/ui/module/lezer-promql/package.json | 2 +- web/ui/package-lock.json | 14 +++++++------- web/ui/package.json | 2 +- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e3ab9cb1c6..a59fb8d595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 3.7.2 / 2025-10-22 + +* [BUGFIX] AWS SD: Fix AWS SDK v2 credentials handling for EC2 and Lightsail discovery. #17355 +* [BUGFIX] AWS SD: Load AWS region from IMDS when not set. #17376 +* [BUGFIX] Relabeling: Fix `labelmap` action validation with the legacy metric name validation scheme. #17372 +* [BUGFIX] PromQL: Fix parsing failure when `anchored` and `smoothed` are used as metric names and label names. #17353 +* [BUGFIX] PromQL: Fix formatting of range vector selectors with `smoothed`/`anchored` modifier. #17354 + ## 3.7.1 / 2025-10-16 * [BUGFIX] OTLP: Prefix `key_` to label name when translating an OTel attribute name starting with a single underscore, and keep multiple consecutive underscores in label name when translating an OTel attribute name. This reverts the breaking changes introduced in 3.7.0. #17344 diff --git a/VERSION b/VERSION index a76ccff2a6..0b2eb36f50 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.7.1 +3.7.2 diff --git a/web/ui/mantine-ui/package.json b/web/ui/mantine-ui/package.json index 6144afa70d..e0996503fd 100644 --- a/web/ui/mantine-ui/package.json +++ b/web/ui/mantine-ui/package.json @@ -1,7 +1,7 @@ { "name": "@prometheus-io/mantine-ui", "private": true, - "version": "0.307.1", + "version": "0.307.2", "type": "module", "scripts": { "start": "vite", @@ -28,7 +28,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "@nexucis/fuzzy": "^0.5.1", "@nexucis/kvsearch": "^0.9.1", - "@prometheus-io/codemirror-promql": "0.307.1", + "@prometheus-io/codemirror-promql": "0.307.2", "@reduxjs/toolkit": "^2.9.0", "@tabler/icons-react": "^3.35.0", "@tanstack/react-query": "^5.90.2", diff --git a/web/ui/module/codemirror-promql/package.json b/web/ui/module/codemirror-promql/package.json index 3c8f6fd58c..f3da54efc9 100644 --- a/web/ui/module/codemirror-promql/package.json +++ b/web/ui/module/codemirror-promql/package.json @@ -1,6 +1,6 @@ { "name": "@prometheus-io/codemirror-promql", - "version": "0.307.1", + "version": "0.307.2", "description": "a CodeMirror mode for the PromQL language", "types": "dist/esm/index.d.ts", "module": "dist/esm/index.js", @@ -29,7 +29,7 @@ }, "homepage": "https://github.com/prometheus/prometheus/blob/main/web/ui/module/codemirror-promql/README.md", "dependencies": { - "@prometheus-io/lezer-promql": "0.307.1", + "@prometheus-io/lezer-promql": "0.307.2", "lru-cache": "^11.2.2" }, "devDependencies": { diff --git a/web/ui/module/lezer-promql/package.json b/web/ui/module/lezer-promql/package.json index 951955cd53..93a4026630 100644 --- a/web/ui/module/lezer-promql/package.json +++ b/web/ui/module/lezer-promql/package.json @@ -1,6 +1,6 @@ { "name": "@prometheus-io/lezer-promql", - "version": "0.307.1", + "version": "0.307.2", "description": "lezer-based PromQL grammar", "main": "dist/index.cjs", "type": "module", diff --git a/web/ui/package-lock.json b/web/ui/package-lock.json index 6eafc4f156..4c83492629 100644 --- a/web/ui/package-lock.json +++ b/web/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "prometheus-io", - "version": "0.307.1", + "version": "0.307.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "prometheus-io", - "version": "0.307.1", + "version": "0.307.2", "workspaces": [ "mantine-ui", "module/*" @@ -24,7 +24,7 @@ }, "mantine-ui": { "name": "@prometheus-io/mantine-ui", - "version": "0.307.1", + "version": "0.307.2", "dependencies": { "@codemirror/autocomplete": "^6.19.0", "@codemirror/language": "^6.11.3", @@ -42,7 +42,7 @@ "@microsoft/fetch-event-source": "^2.0.1", "@nexucis/fuzzy": "^0.5.1", "@nexucis/kvsearch": "^0.9.1", - "@prometheus-io/codemirror-promql": "0.307.1", + "@prometheus-io/codemirror-promql": "0.307.2", "@reduxjs/toolkit": "^2.9.0", "@tabler/icons-react": "^3.35.0", "@tanstack/react-query": "^5.90.2", @@ -87,10 +87,10 @@ }, "module/codemirror-promql": { "name": "@prometheus-io/codemirror-promql", - "version": "0.307.1", + "version": "0.307.2", "license": "Apache-2.0", "dependencies": { - "@prometheus-io/lezer-promql": "0.307.1", + "@prometheus-io/lezer-promql": "0.307.2", "lru-cache": "^11.2.2" }, "devDependencies": { @@ -120,7 +120,7 @@ }, "module/lezer-promql": { "name": "@prometheus-io/lezer-promql", - "version": "0.307.1", + "version": "0.307.2", "license": "Apache-2.0", "devDependencies": { "@lezer/generator": "^1.8.0", diff --git a/web/ui/package.json b/web/ui/package.json index be701b3577..fb77e73485 100644 --- a/web/ui/package.json +++ b/web/ui/package.json @@ -1,7 +1,7 @@ { "name": "prometheus-io", "description": "Monorepo for the Prometheus UI", - "version": "0.307.1", + "version": "0.307.2", "private": true, "scripts": { "build": "bash build_ui.sh --all",