Commit 344d8187 authored by Maxime Orefice's avatar Maxime Orefice Committed by Fabio Pitino

Update ProjectStatistics with pipeline_artifact

This MR makes sure we update ProjectStatistics once
a pipeline artifact has been created.
parent d833191d
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
module Ci module Ci
class PipelineArtifact < ApplicationRecord class PipelineArtifact < ApplicationRecord
extend Gitlab::Ci::Model extend Gitlab::Ci::Model
include UpdateProjectStatistics
include Artifactable include Artifactable
include FileStoreMounter include FileStoreMounter
...@@ -30,6 +31,8 @@ module Ci ...@@ -30,6 +31,8 @@ module Ci
mount_file_store_uploader Ci::PipelineArtifactUploader mount_file_store_uploader Ci::PipelineArtifactUploader
update_project_statistics project_statistics_name: :pipeline_artifacts_size
enum file_type: { enum file_type: {
code_coverage: 1 code_coverage: 1
} }
......
...@@ -12,7 +12,12 @@ class ProjectStatistics < ApplicationRecord ...@@ -12,7 +12,12 @@ class ProjectStatistics < ApplicationRecord
before_save :update_storage_size before_save :update_storage_size
COLUMNS_TO_REFRESH = [:repository_size, :wiki_size, :lfs_objects_size, :commit_count, :snippets_size].freeze COLUMNS_TO_REFRESH = [:repository_size, :wiki_size, :lfs_objects_size, :commit_count, :snippets_size].freeze
INCREMENTABLE_COLUMNS = { build_artifacts_size: %i[storage_size], packages_size: %i[storage_size], snippets_size: %i[storage_size] }.freeze INCREMENTABLE_COLUMNS = {
build_artifacts_size: %i[storage_size],
packages_size: %i[storage_size],
pipeline_artifacts_size: %i[storage_size],
snippets_size: %i[storage_size]
}.freeze
NAMESPACE_RELATABLE_COLUMNS = [:repository_size, :wiki_size, :lfs_objects_size].freeze NAMESPACE_RELATABLE_COLUMNS = [:repository_size, :wiki_size, :lfs_objects_size].freeze
scope :for_project_ids, ->(project_ids) { where(project_id: project_ids) } scope :for_project_ids, ->(project_ids) { where(project_id: project_ids) }
...@@ -75,7 +80,7 @@ class ProjectStatistics < ApplicationRecord ...@@ -75,7 +80,7 @@ class ProjectStatistics < ApplicationRecord
end end
def update_storage_size def update_storage_size
storage_size = repository_size + wiki_size + lfs_objects_size + build_artifacts_size + packages_size storage_size = repository_size + wiki_size + lfs_objects_size + build_artifacts_size + packages_size + pipeline_artifacts_size
# The `snippets_size` column was added on 20200622095419 but db/post_migrate/20190527194900_schedule_calculate_wiki_sizes.rb # The `snippets_size` column was added on 20200622095419 but db/post_migrate/20190527194900_schedule_calculate_wiki_sizes.rb
# might try to update project statistics before the `snippets_size` column has been created. # might try to update project statistics before the `snippets_size` column has been created.
storage_size += snippets_size if self.class.column_names.include?('snippets_size') storage_size += snippets_size if self.class.column_names.include?('snippets_size')
......
...@@ -22,6 +22,7 @@ FactoryBot.define do ...@@ -22,6 +22,7 @@ FactoryBot.define do
project_statistics.build_artifacts_size = evaluator.size_multiplier * 4 project_statistics.build_artifacts_size = evaluator.size_multiplier * 4
project_statistics.packages_size = evaluator.size_multiplier * 5 project_statistics.packages_size = evaluator.size_multiplier * 5
project_statistics.snippets_size = evaluator.size_multiplier * 6 project_statistics.snippets_size = evaluator.size_multiplier * 6
project_statistics.pipeline_artifacts_size = evaluator.size_multiplier * 7
end end
end end
end end
......
...@@ -12,6 +12,10 @@ RSpec.describe Ci::PipelineArtifact, type: :model do ...@@ -12,6 +12,10 @@ RSpec.describe Ci::PipelineArtifact, type: :model do
it_behaves_like 'having unique enum values' it_behaves_like 'having unique enum values'
it_behaves_like 'UpdateProjectStatistics' do
subject { build(:ci_pipeline_artifact) }
end
describe 'validations' do describe 'validations' do
it { is_expected.to validate_presence_of(:pipeline) } it { is_expected.to validate_presence_of(:pipeline) }
it { is_expected.to validate_presence_of(:project) } it { is_expected.to validate_presence_of(:project) }
......
...@@ -32,8 +32,9 @@ RSpec.describe ProjectStatistics do ...@@ -32,8 +32,9 @@ RSpec.describe ProjectStatistics do
repository_size: 2.exabytes, repository_size: 2.exabytes,
wiki_size: 1.exabytes, wiki_size: 1.exabytes,
lfs_objects_size: 2.exabytes, lfs_objects_size: 2.exabytes,
build_artifacts_size: 2.exabytes - 1, build_artifacts_size: 1.exabyte,
snippets_size: 1.exabyte snippets_size: 1.exabyte,
pipeline_artifacts_size: 1.exabyte - 1
) )
statistics.reload statistics.reload
...@@ -42,9 +43,10 @@ RSpec.describe ProjectStatistics do ...@@ -42,9 +43,10 @@ RSpec.describe ProjectStatistics do
expect(statistics.repository_size).to eq(2.exabytes) expect(statistics.repository_size).to eq(2.exabytes)
expect(statistics.wiki_size).to eq(1.exabytes) expect(statistics.wiki_size).to eq(1.exabytes)
expect(statistics.lfs_objects_size).to eq(2.exabytes) expect(statistics.lfs_objects_size).to eq(2.exabytes)
expect(statistics.build_artifacts_size).to eq(2.exabytes - 1) expect(statistics.build_artifacts_size).to eq(1.exabyte)
expect(statistics.storage_size).to eq(8.exabytes - 1) expect(statistics.storage_size).to eq(8.exabytes - 1)
expect(statistics.snippets_size).to eq(1.exabyte) expect(statistics.snippets_size).to eq(1.exabyte)
expect(statistics.pipeline_artifacts_size).to eq(1.exabyte - 1)
end end
end end
...@@ -282,12 +284,13 @@ RSpec.describe ProjectStatistics do ...@@ -282,12 +284,13 @@ RSpec.describe ProjectStatistics do
repository_size: 2, repository_size: 2,
wiki_size: 4, wiki_size: 4,
lfs_objects_size: 3, lfs_objects_size: 3,
snippets_size: 2 snippets_size: 2,
pipeline_artifacts_size: 3
) )
statistics.reload statistics.reload
expect(statistics.storage_size).to eq 11 expect(statistics.storage_size).to eq 14
end end
it 'works during wiki_size backfill' do it 'works during wiki_size backfill' do
...@@ -339,6 +342,12 @@ RSpec.describe ProjectStatistics do ...@@ -339,6 +342,12 @@ RSpec.describe ProjectStatistics do
it_behaves_like 'a statistic that increases storage_size' it_behaves_like 'a statistic that increases storage_size'
end end
context 'when adjusting :pipeline_artifacts_size' do
let(:stat) { :pipeline_artifacts_size }
it_behaves_like 'a statistic that increases storage_size'
end
context 'when adjusting :packages_size' do context 'when adjusting :packages_size' do
let(:stat) { :packages_size } let(:stat) { :packages_size }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment