MCPcopy Index your code
hub / github.com/control-theory/gonzo / QueryPatterns

Method QueryPatterns

internal/engine/engine.go:600–656  ·  view source on GitHub ↗

QueryPatterns returns drain3 patterns grouped by the specified dimension.

(_ context.Context, filters InsightsFilters)

Source from the content-addressed store, hash-verified

598
599// QueryPatterns returns drain3 patterns grouped by the specified dimension.
600func (e *Engine) QueryPatterns(_ context.Context, filters InsightsFilters) ([]PatternGroup, error) {
601 e.mu.RLock()
602 defer e.mu.RUnlock()
603
604 groupBy := filters.GroupBy
605 if groupBy == "" {
606 groupBy = "service"
607 }
608
609 limit := 20
610 if filters.Limit != nil && *filters.Limit > 0 {
611 limit = *filters.Limit
612 }
613
614 // For severity grouping, use the pre-built drain3 instances
615 if groupBy == "severity" {
616 result := make([]PatternGroup, 0)
617 for severity, dm := range e.drain3BySeverity {
618 if dm == nil {
619 continue
620 }
621 patterns := dm.GetTopPatterns(limit)
622 if len(patterns) == 0 {
623 continue
624 }
625 items := make([]PatternItem, len(patterns))
626 for i, p := range patterns {
627 items[i] = PatternItem{
628 Pattern: p.Template,
629 Count: p.Count,
630 Percentage: p.Percentage,
631 }
632 }
633 result = append(result, PatternGroup{
634 GroupValue: severity,
635 Patterns: items,
636 })
637 }
638 return result, nil
639 }
640
641 // For other groupings, use the combined drain3 and return as single group
642 patterns := e.drain3All.GetTopPatterns(limit)
643 items := make([]PatternItem, len(patterns))
644 for i, p := range patterns {
645 items[i] = PatternItem{
646 Pattern: p.Template,
647 Count: p.Count,
648 Percentage: p.Percentage,
649 }
650 }
651
652 return []PatternGroup{{
653 GroupValue: "all",
654 Patterns: items,
655 }}, nil
656}
657

Callers 1

handlePatternsMethod · 0.80

Calls 1

GetTopPatternsMethod · 0.80

Tested by

no test coverage detected