diff options
author | Rémy Coutable <remy@rymai.me> | 2016-09-26 20:12:16 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-09-30 13:02:54 +0300 |
commit | 383dafdf31adaded392664cba9ba8b7262505dc6 (patch) | |
tree | 639d391b5c5d6dc1fbe44cb2c158fcf05d81b464 /app/helpers | |
parent | 9b361a3f44eec7a301565318ce86742f2f139a9d (diff) |
Cache the issuable counters for 2 minutes
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'app/helpers')
-rw-r--r-- | app/helpers/application_helper.rb | 23 | ||||
-rw-r--r-- | app/helpers/issuables_helper.rb | 36 |
2 files changed, 36 insertions, 23 deletions
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index bbc037288db..ebd78bf9888 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -280,29 +280,6 @@ module ApplicationHelper end end - def issuables_state_counter_text(state, issuables) - titles = { - opened: "Open" - } - - state_title = titles[state] || state.to_s.humanize - - count = - if @issues || @merge_requests - issuables_finder = @issues ? issues_finder : merge_requests_finder - issuables_finder.params[:state] = state - issuables_finder.execute.page(1).total_count - end - - html = content_tag(:span, state_title) - - if count.present? - html << " " << content_tag(:span, number_with_delimiter(count), class: 'badge') - end - - html.html_safe - end - def truncate_first_line(message, length = 50) truncate(message.each_line.first.chomp, length: length) if message end diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb index 5c04bba323f..8aa1ece017c 100644 --- a/app/helpers/issuables_helper.rb +++ b/app/helpers/issuables_helper.rb @@ -94,6 +94,24 @@ module IssuablesHelper label_names.join(', ') end + def issuables_state_counter_text(issuable_type, state) + titles = { + opened: "Open" + } + + state_title = titles[state] || state.to_s.humanize + + count = + Rails.cache.fetch(issuables_state_counter_cache_key(issuable_type, state), expires_in: 2.minutes) do + issuables_count_for_state(issuable_type, state) + end + + html = content_tag(:span, state_title) + html << " " << content_tag(:span, number_with_delimiter(count), class: 'badge') + + html.html_safe + end + private def sidebar_gutter_collapsed? @@ -111,4 +129,22 @@ module IssuablesHelper issuable.open? ? :opened : :closed end end + + def issuables_count_for_state(issuable_type, state) + issuables_finder = public_send("#{issuable_type}_finder") + issuables_finder.params[:state] = state + + issuables_finder.execute.page(1).total_count + end + + IRRELEVANT_PARAMS_FOR_CACHE_KEY = %w[utf8 sort page] + private_constant :IRRELEVANT_PARAMS_FOR_CACHE_KEY + + def issuables_state_counter_cache_key(issuable_type, state) + opts = params.dup + opts['state'] = state + opts.delete_if { |k, v| IRRELEVANT_PARAMS_FOR_CACHE_KEY.include?(k) } + + hexdigest(['issuables_count', issuable_type, opts.sort].flatten.join('-')) + end end |