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 }