github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/util/deletion/deletion.go (about)

     1  package deletion
     2  
     3  import (
     4  	"github.com/grafana/loki/pkg/logproto"
     5  	"github.com/grafana/loki/pkg/logql"
     6  	"github.com/grafana/loki/pkg/logql/log"
     7  	"github.com/grafana/loki/pkg/logql/syntax"
     8  )
     9  
    10  func SetupPipeline(req logql.SelectLogParams, p log.Pipeline) (log.Pipeline, error) {
    11  	if len(req.Deletes) == 0 {
    12  		return p, nil
    13  	}
    14  
    15  	filters, err := deleteFilters(req.Deletes)
    16  	if err != nil {
    17  		return nil, err
    18  	}
    19  
    20  	return log.NewFilteringPipeline(filters, p), nil
    21  }
    22  
    23  func SetupExtractor(req logql.SelectSampleParams, se log.SampleExtractor) (log.SampleExtractor, error) {
    24  	if len(req.Deletes) == 0 {
    25  		return se, nil
    26  	}
    27  
    28  	filters, err := deleteFilters(req.Deletes)
    29  	if err != nil {
    30  		return nil, err
    31  	}
    32  
    33  	return log.NewFilteringSampleExtractor(filters, se), nil
    34  }
    35  
    36  func deleteFilters(deletes []*logproto.Delete) ([]log.PipelineFilter, error) {
    37  	var filters []log.PipelineFilter
    38  	for _, d := range deletes {
    39  		expr, err := syntax.ParseLogSelector(d.Selector, true)
    40  		if err != nil {
    41  			return nil, err
    42  		}
    43  
    44  		pipeline, err := expr.Pipeline()
    45  		if err != nil {
    46  			return nil, err
    47  		}
    48  
    49  		filters = append(filters, log.PipelineFilter{
    50  			Start:    d.Start,
    51  			End:      d.End,
    52  			Matchers: expr.Matchers(),
    53  			Pipeline: pipeline,
    54  		})
    55  	}
    56  
    57  	return filters, nil
    58  }