Class: Projects::BatchForksCountService
- Inherits:
-
BatchCountService
- Object
- BatchCountService
- Projects::BatchForksCountService
- Defined in:
- app/services/projects/batch_forks_count_service.rb
Instance Method Summary collapse
-
#count_service ⇒ Object
rubocop: enable CodeReuse/ActiveRecord.
-
#global_count ⇒ Object
rubocop: disable CodeReuse/ActiveRecord.
- #recreate_cache(projects_to_refresh) ⇒ Object
- #refresh_cache_and_retrieve_data ⇒ Object
Methods inherited from BatchCountService
#initialize, #project_ids, #refresh_cache
Constructor Details
This class inherits a constructor from Projects::BatchCountService
Instance Method Details
#count_service ⇒ Object
rubocop: enable CodeReuse/ActiveRecord
33 34 35 |
# File 'app/services/projects/batch_forks_count_service.rb', line 33 def count_service ::Projects::ForksCountService end |
#global_count ⇒ Object
rubocop: disable CodeReuse/ActiveRecord
24 25 26 27 28 29 30 |
# File 'app/services/projects/batch_forks_count_service.rb', line 24 def global_count @global_count ||= begin count_service.query(project_ids) .group(:forked_from_project_id) .count end end |
#recreate_cache(projects_to_refresh) ⇒ Object
37 38 39 40 41 42 43 |
# File 'app/services/projects/batch_forks_count_service.rb', line 37 def recreate_cache(projects_to_refresh) projects_to_refresh.each_with_object({}) do |(service, _v), hash| count = global_count[service.project.id].to_i service.refresh_cache { count } hash[service] = count end end |
#refresh_cache_and_retrieve_data ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'app/services/projects/batch_forks_count_service.rb', line 8 def refresh_cache_and_retrieve_data count_services = @projects.map { |project| count_service.new(project) } values = Gitlab::Instrumentation::RedisClusterValidator.allow_cross_slot_commands do Rails.cache.fetch_multi(*(count_services.map { |ser| ser.cache_key } )) { |key| nil } end results_per_service = Hash[count_services.zip(values.values)] projects_to_refresh = results_per_service.select { |_k, value| value.nil? } projects_to_refresh = recreate_cache(projects_to_refresh) results_per_service.update(projects_to_refresh) results_per_service.transform_keys { |k| k.project } end |