Class: GitlabQuality::TestTooling::Report::GroupIssues::FailureProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab_quality/test_tooling/report/group_issues/failure_processor.rb

Constant Summary collapse

DEFAULT_MIN_FAILURES =
2

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ FailureProcessor

Returns a new instance of FailureProcessor.



10
11
12
13
14
15
# File 'lib/gitlab_quality/test_tooling/report/group_issues/failure_processor.rb', line 10

def initialize(options = {})
  @options = options
  @pattern_matcher = options[:pattern_matcher] || ErrorPatternMatcher.new
  @normalizer = options[:normalizer] || ErrorMessageNormalizer.new
  @config = options[:config] || {}
end

Instance Method Details

#filter_groups_by_threshold(grouped_failures) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/gitlab_quality/test_tooling/report/group_issues/failure_processor.rb', line 29

def filter_groups_by_threshold(grouped_failures)
  min_failures = @config.dig(:thresholds, :min_failures_to_group) || DEFAULT_MIN_FAILURES

  grouped_failures.select! do |_fingerprint, grouped_failure|
    grouped_failure[:failures].size >= min_failures
  end

  Runtime::Logger.info "Found #{grouped_failures.size} groups after filtering"
end

#process_failures(failures) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/gitlab_quality/test_tooling/report/group_issues/failure_processor.rb', line 17

def process_failures(failures, &)
  Runtime::Logger.info "Processing #{failures.size} failures for grouping..."
  grouped_failures = {}

  failures.each do |failure|
    process_single_failure(failure, grouped_failures)
  end

  Runtime::Logger.info "Found #{grouped_failures.size} groups before filtering"
  grouped_failures.each_value(&)
end