lib/dri/commands/fetch/failures.rb in dri-0.5.0 vs lib/dri/commands/fetch/failures.rb in dri-0.5.1

- old
+ new

@@ -11,30 +11,33 @@ using Refinements SORT_BY_OPTIONS = { title: 0, triaged: 1, - author: 2, - url: 3 + environment: 2, + author: 3, + url: 4 }.freeze def initialize(options) @options = options @today_iso_format = Time.now.strftime('%Y-%m-%dT00:00:00Z') end def execute(input: $stdin, output: $stdout) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength verify_config_exists + urgent_environments = %w[canary canary.staging] + title = add_color('Title', :bright_yellow) triaged = add_color('Triaged?', :bright_yellow) + environment = add_color('Environment', :bright_yellow) author = add_color('Author', :bright_yellow) url = add_color('URL', :bright_yellow) failures = [] - urgent = [] - labels = [title, triaged, author, url] + labels = [title, triaged, environment, author, url] triaged_counter = 0 logger.info "Fetching today's failures..." spinner.run do # rubocop:disable Metrics/BlockLength @@ -48,46 +51,47 @@ response.each do |failure| title = failure.title.truncate(60) author = failure.to_h.dig('author', 'username') url = failure.web_url triaged = add_color('x', :red) + envs = failure.labels.select { |l| l.include?('found:') }.map do |l| + env = l.split(':').last.gsub('.gitlab.com', '') + env == 'gitlab.com' ? 'production' : env + end + urgent = urgent_environments.all? { |env| envs.include?(env) } + emoji_awards = api_client.fetch_awarded_emojis(failure.iid).find do |e| e.name == emoji && e.to_h.dig('user', 'username') == username end if emoji_awards triaged = add_color('✓', :green) triaged_counter += 1 end if @options[:urgent] - labels = failure.labels - - labels.each do |label| - if label.include?('found:canary.gitlab.com' && 'found:canary.staging.gitlab.com') - urgent << [title, triaged, author, url] - end - end + failures << [title, triaged, envs.first, author, url] if urgent + else + failures << [title, triaged, envs.first, author, url] end - - failures << [title, triaged, author, url] - - failures.sort_by! { |e| e[SORT_BY_OPTIONS[@options[:sort_by].to_sym]] } if @options[:sort_by] end - end - if @options[:urgent] - print_table(labels, urgent, alignments: [:left, :center, :center, :left]) - output.puts(<<~MSG) - Found: #{urgent.size} urgent failures, occurring in both canary.gitlab.com and canary.staging.gitlab.com. - MSG - else - print_table(labels, failures, alignments: [:left, :center, :center, :left]) - output.puts(<<~MSG) - Found: #{failures.size} failures, of these #{triaged_counter} have been triaged with a #{emoji}. - MSG + failures.sort_by! { |failure| failure[SORT_BY_OPTIONS[@options[:sort_by]&.to_sym || :environment]] } end + + msg = if @options[:urgent] + <<~MSG + Found: #{failures.size} urgent failures, occurring in both canary.gitlab.com and canary.staging.gitlab.com. + MSG + else + <<~MSG + Found: #{failures.size} failures, of these #{triaged_counter} have been triaged with a #{emoji}. + MSG + end + + print_table(labels, failures, alignments: [:left, :center, :center, :left]) + output.puts(msg) end end end end end