@ -35,8 +35,8 @@ import (
//
var (
// m axCharsPerLine is used to qualify whether some LogQL expressions are worth `splitting` into new lines.
m axCharsPerLine = 100
// M axCharsPerLine is used to qualify whether some LogQL expressions are worth `splitting` into new lines.
M axCharsPerLine = 100
)
func Prettify ( e Expr ) string {
@ -51,8 +51,8 @@ func (e *MatchersExpr) Pretty(level int) string {
// e.g: `{foo="bar"} | logfmt | level="error"`
// Here, left = `{foo="bar"}` and multistages would collection of each stage in pipeline, here `logfmt` and `level="error"`
func ( e * PipelineExpr ) Pretty ( level int ) string {
if ! n eedSplit( e ) {
return i ndent( level ) + e . String ( )
if ! N eedSplit( e ) {
return I ndent( level ) + e . String ( )
}
s := fmt . Sprintf ( "%s\n" , e . Left . Pretty ( level ) )
@ -73,8 +73,8 @@ func (e *PipelineExpr) Pretty(level int) string {
// e.g: `|= "error" != "memcache" |= ip("192.168.0.1")`
// NOTE: here `ip` is Op in this expression.
func ( e * LineFilterExpr ) Pretty ( level int ) string {
if ! n eedSplit( e ) {
return i ndent( level ) + e . String ( )
if ! N eedSplit( e ) {
return I ndent( level ) + e . String ( )
}
var s string
@ -90,7 +90,7 @@ func (e *LineFilterExpr) Pretty(level int) string {
s += "\n"
}
s += i ndent( level )
s += I ndent( level )
// We re-use LineFilterExpr's String() implementation to avoid duplication.
// We create new LineFilterExpr without `Left`.
@ -153,7 +153,7 @@ func (e *LogfmtExpressionParser) Pretty(level int) string {
// e.g: sum_over_time({foo="bar"} | logfmt | unwrap bytes_processed [5m])
func ( e * UnwrapExpr ) Pretty ( level int ) string {
s := i ndent( level )
s := I ndent( level )
if e . Operation != "" {
s += fmt . Sprintf ( "%s %s %s(%s)" , OpPipe , OpUnwrap , e . Operation , e . Identifier )
@ -161,7 +161,7 @@ func (e *UnwrapExpr) Pretty(level int) string {
s += fmt . Sprintf ( "%s %s %s" , OpPipe , OpUnwrap , e . Identifier )
}
for _ , f := range e . PostFilters {
s += fmt . Sprintf ( "\n%s%s %s" , i ndent( level ) , OpPipe , f )
s += fmt . Sprintf ( "\n%s%s %s" , I ndent( level ) , OpPipe , f )
}
return s
}
@ -200,8 +200,8 @@ func (e *OffsetExpr) Pretty(_ int) string {
// e.g: count_over_time({foo="bar"}[5m])
func ( e * RangeAggregationExpr ) Pretty ( level int ) string {
s := i ndent( level )
if ! n eedSplit( e ) {
s := I ndent( level )
if ! N eedSplit( e ) {
return s + e . String ( )
}
@ -211,13 +211,13 @@ func (e *RangeAggregationExpr) Pretty(level int) string {
// print args to the function.
if e . Params != nil {
s = fmt . Sprintf ( "%s%s%s," , s , i ndent( level + 1 ) , fmt . Sprint ( * e . Params ) )
s = fmt . Sprintf ( "%s%s%s," , s , I ndent( level + 1 ) , fmt . Sprint ( * e . Params ) )
s += "\n"
}
s += e . Left . Pretty ( level + 1 )
s += "\n" + i ndent( level ) + ")"
s += "\n" + I ndent( level ) + ")"
if e . Grouping != nil {
s += e . Grouping . Pretty ( level )
@ -236,9 +236,9 @@ func (e *RangeAggregationExpr) Pretty(level int) string {
// <vector expression> - vector on which aggregation is done.
// [without|by (<label list)] - optional labels to aggregate either with `by` or `without` clause.
func ( e * VectorAggregationExpr ) Pretty ( level int ) string {
s := i ndent( level )
s := I ndent( level )
if ! n eedSplit( e ) {
if ! N eedSplit( e ) {
return s + e . String ( )
}
@ -249,11 +249,11 @@ func (e *VectorAggregationExpr) Pretty(level int) string {
switch e . Operation {
// e.Params default value (0) can mean a legit param for topk and bottomk
case OpTypeBottomK , OpTypeTopK :
params = [ ] string { fmt . Sprintf ( "%s%d" , i ndent( level + 1 ) , e . Params ) , left }
params = [ ] string { fmt . Sprintf ( "%s%d" , I ndent( level + 1 ) , e . Params ) , left }
default :
if e . Params != 0 {
params = [ ] string { fmt . Sprintf ( "%s%d" , i ndent( level + 1 ) , e . Params ) , left }
params = [ ] string { fmt . Sprintf ( "%s%d" , I ndent( level + 1 ) , e . Params ) , left }
} else {
params = [ ] string { left }
}
@ -274,7 +274,7 @@ func (e *VectorAggregationExpr) Pretty(level int) string {
}
s += "\n"
}
s += i ndent( level ) + ")"
s += I ndent( level ) + ")"
return s
}
@ -285,15 +285,15 @@ func (e *VectorAggregationExpr) Pretty(level int) string {
// "==", "!=", ">", ">=", "<", "<=" (comparison)
func ( e * BinOpExpr ) Pretty ( level int ) string {
s := i ndent( level )
if ! n eedSplit( e ) {
s := I ndent( level )
if ! N eedSplit( e ) {
return s + e . String ( )
}
s = e . SampleExpr . Pretty ( level + 1 ) + "\n"
op := formatBinaryOp ( e . Op , e . Opts )
s += i ndent( level ) + op + "\n"
s += I ndent( level ) + op + "\n"
s += e . RHS . Pretty ( level + 1 )
return s
@ -306,9 +306,9 @@ func (e *LiteralExpr) Pretty(level int) string {
// e.g: label_replace(rate({job="api-server",service="a:c"}[5m]), "foo", "$1", "service", "(.*):.*")
func ( e * LabelReplaceExpr ) Pretty ( level int ) string {
s := i ndent( level )
s := I ndent( level )
if ! n eedSplit( e ) {
if ! N eedSplit( e ) {
return s + e . String ( )
}
@ -318,10 +318,10 @@ func (e *LabelReplaceExpr) Pretty(level int) string {
params := [ ] string {
e . Left . Pretty ( level + 1 ) ,
i ndent( level + 1 ) + strconv . Quote ( e . Dst ) ,
i ndent( level + 1 ) + strconv . Quote ( e . Replacement ) ,
i ndent( level + 1 ) + strconv . Quote ( e . Src ) ,
i ndent( level + 1 ) + strconv . Quote ( e . Regex ) ,
I ndent( level + 1 ) + strconv . Quote ( e . Dst ) ,
I ndent( level + 1 ) + strconv . Quote ( e . Replacement ) ,
I ndent( level + 1 ) + strconv . Quote ( e . Src ) ,
I ndent( level + 1 ) + strconv . Quote ( e . Regex ) ,
}
for i , v := range params {
@ -333,7 +333,7 @@ func (e *LabelReplaceExpr) Pretty(level int) string {
s += "\n"
}
s += i ndent( level ) + ")"
s += I ndent( level ) + ")"
return s
}
@ -369,19 +369,19 @@ func (g *Grouping) Pretty(_ int) string {
// Helpers
func commonPrefixIndent ( level int , current Expr ) string {
return fmt . Sprintf ( "%s%s" , i ndent( level ) , current . String ( ) )
return fmt . Sprintf ( "%s%s" , I ndent( level ) , current . String ( ) )
}
func n eedSplit( e Expr ) bool {
func N eedSplit( e Expr ) bool {
if e == nil {
return false
}
return len ( e . String ( ) ) > m axCharsPerLine
return len ( e . String ( ) ) > M axCharsPerLine
}
const indentString = " "
func i ndent( level int ) string {
func I ndent( level int ) string {
return strings . Repeat ( indentString , level )
}