diff options
author | Peter Marko <peter.marko@siemens.com> | 2019-02-14 01:38:11 +0300 |
---|---|---|
committer | Peter Marko <peter.marko@siemens.com> | 2019-05-29 17:08:25 +0300 |
commit | 40490cc4922fedbf4512109429cdc2c5aed65ded (patch) | |
tree | bb2be4aa53b223c2031c3accd4b5398ab90b7598 /app | |
parent | 106f449d6938280452c52e1ee86461e5ceed685e (diff) |
Add wiki size to project statistics
Diffstat (limited to 'app')
-rw-r--r-- | app/helpers/storage_helper.rb | 3 | ||||
-rw-r--r-- | app/models/namespace.rb | 1 | ||||
-rw-r--r-- | app/models/project_statistics.rb | 16 | ||||
-rw-r--r-- | app/services/projects/update_statistics_service.rb | 2 | ||||
-rw-r--r-- | app/workers/post_receive.rb | 2 | ||||
-rw-r--r-- | app/workers/project_cache_worker.rb | 4 |
6 files changed, 22 insertions, 6 deletions
diff --git a/app/helpers/storage_helper.rb b/app/helpers/storage_helper.rb index e80b3f2b54a..ecf37bae6b3 100644 --- a/app/helpers/storage_helper.rb +++ b/app/helpers/storage_helper.rb @@ -12,10 +12,11 @@ module StorageHelper def storage_counters_details(statistics) counters = { counter_repositories: storage_counter(statistics.repository_size), + counter_wikis: storage_counter(statistics.wiki_size), counter_build_artifacts: storage_counter(statistics.build_artifacts_size), counter_lfs_objects: storage_counter(statistics.lfs_objects_size) } - _("%{counter_repositories} repositories, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS") % counters + _("%{counter_repositories} repositories, %{counter_wikis} wikis, %{counter_build_artifacts} build artifacts, %{counter_lfs_objects} LFS") % counters end end diff --git a/app/models/namespace.rb b/app/models/namespace.rb index 7393ef4b05c..f7c31890198 100644 --- a/app/models/namespace.rb +++ b/app/models/namespace.rb @@ -76,6 +76,7 @@ class Namespace < ApplicationRecord 'namespaces.*', 'COALESCE(SUM(ps.storage_size), 0) AS storage_size', 'COALESCE(SUM(ps.repository_size), 0) AS repository_size', + 'COALESCE(SUM(ps.wiki_size), 0) AS wiki_size', 'COALESCE(SUM(ps.lfs_objects_size), 0) AS lfs_objects_size', 'COALESCE(SUM(ps.build_artifacts_size), 0) AS build_artifacts_size', 'COALESCE(SUM(ps.packages_size), 0) AS packages_size' diff --git a/app/models/project_statistics.rb b/app/models/project_statistics.rb index 6fe8cb40d25..832c8417b5b 100644 --- a/app/models/project_statistics.rb +++ b/app/models/project_statistics.rb @@ -4,9 +4,16 @@ class ProjectStatistics < ApplicationRecord belongs_to :project belongs_to :namespace + default_value_for :wiki_size, 0 + + # older migrations fail due to non-existent attribute without this + def wiki_size + has_attribute?(:wiki_size) ? super : 0 + end + before_save :update_storage_size - COLUMNS_TO_REFRESH = [:repository_size, :lfs_objects_size, :commit_count].freeze + COLUMNS_TO_REFRESH = [:repository_size, :wiki_size, :lfs_objects_size, :commit_count].freeze INCREMENTABLE_COLUMNS = { build_artifacts_size: %i[storage_size], packages_size: %i[storage_size] }.freeze def total_repository_size @@ -27,11 +34,14 @@ class ProjectStatistics < ApplicationRecord self.commit_count = project.repository.commit_count end - # Repository#size needs to be converted from MB to Byte. def update_repository_size self.repository_size = project.repository.size * 1.megabyte end + def update_wiki_size + self.wiki_size = project.wiki.repository.size * 1.megabyte + end + def update_lfs_objects_size self.lfs_objects_size = project.lfs_objects.sum(:size) end @@ -42,7 +52,7 @@ class ProjectStatistics < ApplicationRecord end def update_storage_size - self.storage_size = repository_size + lfs_objects_size + build_artifacts_size + packages_size + self.storage_size = repository_size + wiki_size + lfs_objects_size + build_artifacts_size + packages_size end # Since this incremental update method does not call update_storage_size above, diff --git a/app/services/projects/update_statistics_service.rb b/app/services/projects/update_statistics_service.rb index f32a779fab0..28677a398f3 100644 --- a/app/services/projects/update_statistics_service.rb +++ b/app/services/projects/update_statistics_service.rb @@ -3,7 +3,7 @@ module Projects class UpdateStatisticsService < BaseService def execute - return unless project && project.repository.exists? + return unless project Rails.logger.info("Updating statistics for project #{project.id}") diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb index 9a9c0c9d803..3f1639ec2ed 100644 --- a/app/workers/post_receive.rb +++ b/app/workers/post_receive.rb @@ -74,6 +74,8 @@ class PostReceive def process_wiki_changes(post_received) post_received.project.touch(:last_activity_at, :last_repository_updated_at) + post_received.project.wiki.repository.expire_statistics_caches + ProjectCacheWorker.perform_async(post_received.project.id, [], [:wiki_size]) end def log(message) diff --git a/app/workers/project_cache_worker.rb b/app/workers/project_cache_worker.rb index b2e0701008a..4e8ea903139 100644 --- a/app/workers/project_cache_worker.rb +++ b/app/workers/project_cache_worker.rb @@ -16,10 +16,12 @@ class ProjectCacheWorker def perform(project_id, files = [], statistics = []) project = Project.find_by(id: project_id) - return unless project && project.repository.exists? + return unless project update_statistics(project, statistics) + return unless project.repository.exists? + project.repository.refresh_method_caches(files.map(&:to_sym)) project.cleanup |