Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/querier/pattern/querier.go

59 lines
1.3 KiB

package pattern
import (
"context"
"sort"
"github.com/grafana/loki/v3/pkg/logproto"
)
type PatterQuerier interface {
Patterns(ctx context.Context, req *logproto.QueryPatternsRequest) (*logproto.QueryPatternsResponse, error)
}
func MergePatternResponses(responses []*logproto.QueryPatternsResponse) *logproto.QueryPatternsResponse {
if len(responses) == 0 {
return &logproto.QueryPatternsResponse{
Series: []*logproto.PatternSeries{},
}
}
if len(responses) == 1 {
return responses[0]
}
// Merge patterns by pattern string
patternMap := make(map[string]*logproto.PatternSeries)
for _, resp := range responses {
if resp == nil {
continue
}
for _, series := range resp.Series {
existing, exists := patternMap[series.Pattern]
if !exists {
patternMap[series.Pattern] = series
continue
}
// Merge samples
existing.Samples = append(existing.Samples, series.Samples...)
}
}
// Sort samples within each series by timestamp
result := &logproto.QueryPatternsResponse{
Series: make([]*logproto.PatternSeries, 0, len(patternMap)),
}
for _, series := range patternMap {
// Sort samples by timestamp
sort.Slice(series.Samples, func(i, j int) bool {
return series.Samples[i].Timestamp < series.Samples[j].Timestamp
})
result.Series = append(result.Series, series)
}
return result
}