github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/logql/syntax/extractor_test.go (about)

     1  package syntax
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  )
     8  
     9  func Test_Extractor(t *testing.T) {
    10  	t.Parallel()
    11  	for _, tc := range []string{
    12  		`rate( ( {job="mysql"} |="error" !="timeout" ) [10s] )`,
    13  		`absent_over_time( ( {job="mysql"} |="error" !="timeout" ) [10s] )`,
    14  		`absent_over_time( ( {job="mysql"} |="error" !="timeout" ) [10s] offset 30s )`,
    15  		`sum without(a) ( rate ( ( {job="mysql"} |="error" !="timeout" ) [10s] ) )`,
    16  		`sum by(a) (rate( ( {job="mysql"} |="error" !="timeout" ) [10s] ) )`,
    17  		`sum(count_over_time({job="mysql"}[5m]))`,
    18  		`sum(count_over_time({job="mysql"} | json [5m]))`,
    19  		`sum(count_over_time({job="mysql"} | logfmt [5m]))`,
    20  		`sum(count_over_time({job="mysql"} | pattern "<foo> bar <buzz>" [5m]))`,
    21  		`sum(count_over_time({job="mysql"} | regexp "(?P<foo>foo|bar)" [5m]))`,
    22  		`sum(count_over_time({job="mysql"} | regexp "(?P<foo>foo|bar)" [5m] offset 1h))`,
    23  		`topk(10,sum(rate({region="us-east1"}[5m])) by (name))`,
    24  		`topk by (name)(10,sum(rate({region="us-east1"}[5m])))`,
    25  		`avg( rate( ( {job="nginx"} |= "GET" ) [10s] ) ) by (region)`,
    26  		`avg(min_over_time({job="nginx"} |= "GET" | unwrap foo[10s])) by (region)`,
    27  		`sum by (cluster) (count_over_time({job="mysql"}[5m]))`,
    28  		`sum by (cluster) (count_over_time({job="mysql"}[5m])) / sum by (cluster) (count_over_time({job="postgres"}[5m])) `,
    29  		`
    30  			sum by (cluster) (count_over_time({job="postgres"}[5m])) /
    31  			sum by (cluster) (count_over_time({job="postgres"}[5m])) /
    32  			sum by (cluster) (count_over_time({job="postgres"}[5m]))
    33  			`,
    34  		`sum by (cluster) (count_over_time({job="mysql"}[5m])) / min(count_over_time({job="mysql"}[5m])) `,
    35  		`sum by (job) (
    36  				count_over_time({namespace="tns"} |= "level=error"[5m])
    37  			/
    38  				count_over_time({namespace="tns"}[5m])
    39  			)`,
    40  		`stdvar_over_time({app="foo"} |= "bar" | json | latency >= 250ms or ( status_code < 500 and status_code > 200)
    41  			| line_format "blip{{ .foo }}blop {{.status_code}}" | label_format foo=bar,status_code="buzz{{.bar}}" | unwrap foo [5m])`,
    42  		`sum_over_time({namespace="tns"} |= "level=error" | json |foo>=5,bar<25ms|unwrap latency [5m])`,
    43  		`sum by (job) (
    44  				sum_over_time({namespace="tns"} |= "level=error" | json | foo=5 and bar<25ms | unwrap latency[5m])
    45  			/
    46  				count_over_time({namespace="tns"} | logfmt | label_format foo=bar[5m])
    47  			)`,
    48  		`sum by (job) (
    49  				sum_over_time({namespace="tns"} |= "level=error" | json | foo=5 and bar<25ms | unwrap bytes(latency)[5m])
    50  			/
    51  				count_over_time({namespace="tns"} | logfmt | label_format foo=bar[5m])
    52  			)`,
    53  		`sum by (job) (
    54  				sum_over_time(
    55  					{namespace="tns"} |= "level=error" | json | avg=5 and bar<25ms | unwrap duration(latency) [5m]
    56  				)
    57  			/
    58  				count_over_time({namespace="tns"} | logfmt | label_format foo=bar[5m])
    59  			)`,
    60  		`sum_over_time({namespace="tns"} |= "level=error" | json |foo>=5,bar<25ms | unwrap latency | __error__!~".*" | foo >5[5m])`,
    61  		`absent_over_time({namespace="tns"} |= "level=error" | json |foo>=5,bar<25ms | unwrap latency | __error__!~".*" | foo >5[5m])`,
    62  		`absent_over_time({namespace="tns"} |= "level=error" | json [5m])`,
    63  		`sum by (job) (
    64  				sum_over_time(
    65  					{namespace="tns"} |= "level=error" | json | avg=5 and bar<25ms | unwrap duration(latency)  | __error__!~".*" [5m]
    66  				)
    67  			/
    68  				count_over_time({namespace="tns"} | logfmt | label_format foo=bar[5m])
    69  			)`,
    70  		`label_replace(
    71  				sum by (job) (
    72  					sum_over_time(
    73  						{namespace="tns"} |= "level=error" | json | avg=5 and bar<25ms | unwrap duration(latency)  | __error__!~".*" [5m]
    74  					)
    75  				/
    76  					count_over_time({namespace="tns"} | logfmt | label_format foo=bar[5m])
    77  				),
    78  				"foo",
    79  				"$1",
    80  				"service",
    81  				"(.*):.*"
    82  			)
    83  			`,
    84  		`label_replace(
    85  				sum by (job) (
    86  					sum_over_time(
    87  						{namespace="tns"} |= "level=error" | json | avg=5 and bar<25ms | unwrap duration(latency)  | __error__!~".*" [5m] offset 1h
    88  					)
    89  				/
    90  					count_over_time({namespace="tns"} | logfmt | label_format foo=bar[5m] offset 1h)
    91  				),
    92  				"foo",
    93  				"$1",
    94  				"service",
    95  				"(.*):.*"
    96  			)
    97  			`,
    98  	} {
    99  		t.Run(tc, func(t *testing.T) {
   100  			expr, err := ParseSampleExpr(tc)
   101  			require.Nil(t, err)
   102  			_, err = expr.Extractor()
   103  			require.Nil(t, err)
   104  		})
   105  	}
   106  }