From 8e7163a91c8d897b6b011cc79a778a5d14bf37d1 Mon Sep 17 00:00:00 2001 From: Mehmet Emin INAC <minac@gitlab.com> Date: Mon, 30 Sep 2024 18:16:34 +0000 Subject: [PATCH] Switch using project#security_statistics instead of project_statistics --- .../security/ingestion/ingest_slice_base_service.rb | 3 ++- .../security/ingestion/tasks/increase_counters_task.rb | 2 +- ee/app/services/vulnerabilities/create_service_base.rb | 4 ++++ .../services/vulnerabilities/manually_create_service.rb | 7 +++---- .../removal/remove_from_project_service.rb | 6 +++--- .../starboard_vulnerability_create_service.rb | 3 +-- .../ingestion/tasks/increase_counters_task_spec.rb | 8 ++++---- .../vulnerabilities/manually_create_service_spec.rb | 6 +----- .../removal/remove_from_project_service_spec.rb | 8 ++++---- .../starboard_vulnerability_create_service_spec.rb | 2 +- 10 files changed, 24 insertions(+), 25 deletions(-) diff --git a/ee/app/services/security/ingestion/ingest_slice_base_service.rb b/ee/app/services/security/ingestion/ingest_slice_base_service.rb index ef8ade79efcff..227b9e414043e 100644 --- a/ee/app/services/security/ingestion/ingest_slice_base_service.rb +++ b/ee/app/services/security/ingestion/ingest_slice_base_service.rb @@ -15,7 +15,8 @@ def initialize(pipeline, finding_maps) def execute Gitlab::Database::QueryAnalyzers::PreventCrossDatabaseModification.temporary_ignore_tables_in_transaction( %w[ - project_statistics + project_security_statistics + project_settings security_findings vulnerabilities vulnerability_flags diff --git a/ee/app/services/security/ingestion/tasks/increase_counters_task.rb b/ee/app/services/security/ingestion/tasks/increase_counters_task.rb index bcbfaf410d845..3db57f9d20657 100644 --- a/ee/app/services/security/ingestion/tasks/increase_counters_task.rb +++ b/ee/app/services/security/ingestion/tasks/increase_counters_task.rb @@ -6,7 +6,7 @@ module Tasks class IncreaseCountersTask < AbstractTask def execute counts_by_projects.each do |project, new_vulnerability_count| - project.statistics.increase_vulnerability_counter!(new_vulnerability_count) + project.security_statistics.increase_vulnerability_counter!(new_vulnerability_count) end end diff --git a/ee/app/services/vulnerabilities/create_service_base.rb b/ee/app/services/vulnerabilities/create_service_base.rb index fb5ac2d5d729c..fe299fa634229 100644 --- a/ee/app/services/vulnerabilities/create_service_base.rb +++ b/ee/app/services/vulnerabilities/create_service_base.rb @@ -165,5 +165,9 @@ def schedule_updating_traversal_ids_if_needed def reloaded_project @reloaded_project ||= project.reset end + + def update_security_statistics! + project.security_statistics.increase_vulnerability_counter!(1) + end end end diff --git a/ee/app/services/vulnerabilities/manually_create_service.rb b/ee/app/services/vulnerabilities/manually_create_service.rb index eecd633bc6fee..0b4bd66ad72a1 100644 --- a/ee/app/services/vulnerabilities/manually_create_service.rb +++ b/ee/app/services/vulnerabilities/manually_create_service.rb @@ -41,15 +41,14 @@ def execute vulnerability.vulnerability_read.update!(traversal_ids: project.namespace.traversal_ids) + update_security_statistics! + Statistics::UpdateService.update_for(vulnerability) ServiceResponse.success(payload: { vulnerability: vulnerability }) end - Project.transaction do - project.mark_as_vulnerable! - project.statistics.increase_vulnerability_counter!(1) - end + project.mark_as_vulnerable! process_archival_and_traversal_ids_changes if response.success? diff --git a/ee/app/services/vulnerabilities/removal/remove_from_project_service.rb b/ee/app/services/vulnerabilities/removal/remove_from_project_service.rb index e98956cf20d72..f5037568e28f2 100644 --- a/ee/app/services/vulnerabilities/removal/remove_from_project_service.rb +++ b/ee/app/services/vulnerabilities/removal/remove_from_project_service.rb @@ -42,9 +42,9 @@ def execute delete_resources_by_vulnerabilities delete_vulnerabilities delete_findings - end - update_project_vulnerabilities_count if update_counts + update_project_vulnerabilities_count if update_counts + end true end @@ -70,7 +70,7 @@ def delete_findings end def update_project_vulnerabilities_count - project.statistics.decrease_vulnerability_counter!(batch_size) + project.security_statistics.decrease_vulnerability_counter!(batch_size) end def batch_size diff --git a/ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb b/ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb index 58eb5a9c085ca..53d58bf63c592 100644 --- a/ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb +++ b/ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb @@ -51,7 +51,6 @@ def execute vulnerability_scanners cluster_agents project_settings - project_statistics ], url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/476584' ) do response = Vulnerability.transaction do @@ -63,7 +62,7 @@ def execute vulnerability.vulnerability_read.update!(traversal_ids: project.namespace.traversal_ids) project.mark_as_vulnerable! - project.statistics.increase_vulnerability_counter!(1) + update_security_statistics! Statistics::UpdateService.update_for(vulnerability) diff --git a/ee/spec/services/security/ingestion/tasks/increase_counters_task_spec.rb b/ee/spec/services/security/ingestion/tasks/increase_counters_task_spec.rb index 4999b083f7284..66a54955962d5 100644 --- a/ee/spec/services/security/ingestion/tasks/increase_counters_task_spec.rb +++ b/ee/spec/services/security/ingestion/tasks/increase_counters_task_spec.rb @@ -9,13 +9,13 @@ let(:finding_map_1) { create(:finding_map, pipeline: pipeline, new_record: true) } let(:finding_map_2) { create(:finding_map, pipeline: pipeline, new_record: false) } - let(:project_statistics) { pipeline.project.statistics } + let(:security_statistics) { pipeline.project.security_statistics } let(:service_object) { described_class.new(pipeline, [finding_map_1, finding_map_2]) } subject(:execute_task) { service_object.execute } it 'increases vulnerability count' do - expect { execute_task }.to change { project_statistics.reload.vulnerability_count }.by(1) + expect { execute_task }.to change { security_statistics.reload.vulnerability_count }.by(1) end end @@ -34,8 +34,8 @@ subject(:execute_task) { service_object.execute } it 'increases the vulnerability count for projects' do - expect { execute_task }.to change { pipeline_1.project.statistics.reload.vulnerability_count }.by(1) - .and change { pipeline_2.project.statistics.reload.vulnerability_count }.by(1) + expect { execute_task }.to change { pipeline_1.project.security_statistics.reload.vulnerability_count }.by(1) + .and change { pipeline_2.project.security_statistics.reload.vulnerability_count }.by(1) end end end diff --git a/ee/spec/services/vulnerabilities/manually_create_service_spec.rb b/ee/spec/services/vulnerabilities/manually_create_service_spec.rb index a9ea9872e04c0..6fc0c25ed2fbd 100644 --- a/ee/spec/services/vulnerabilities/manually_create_service_spec.rb +++ b/ee/spec/services/vulnerabilities/manually_create_service_spec.rb @@ -86,12 +86,8 @@ end end - it 'does not exceed query limit' do - expect { subject }.not_to exceed_query_limit(32) - end - it 'increases vulnerability count by 1' do - expect { subject }.to change { project.reload.statistics.vulnerability_count }.by(1) + expect { subject }.to change { project.reload.security_statistics.vulnerability_count }.by(1) end it 'creates a new Vulnerability' do diff --git a/ee/spec/services/vulnerabilities/removal/remove_from_project_service_spec.rb b/ee/spec/services/vulnerabilities/removal/remove_from_project_service_spec.rb index 92a79fee90417..b6526b2a5c491 100644 --- a/ee/spec/services/vulnerabilities/removal/remove_from_project_service_spec.rb +++ b/ee/spec/services/vulnerabilities/removal/remove_from_project_service_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Vulnerabilities::Removal::RemoveFromProjectService, feature_category: :vulnerability_management do describe '#execute' do let_it_be(:project) { create(:project) } - let_it_be(:project_statistics) { project.statistics } + let_it_be(:security_statistics) { project.security_statistics } let_it_be(:vulnerabilities) do create_list( :vulnerability, @@ -93,7 +93,7 @@ .and change { Vulnerabilities::ExternalIssueLink.count }.by(-1) .and change { Vulnerabilities::FindingRemediation.count }.by(-1) .and change { Vulnerabilities::HistoricalStatistic.count }.by(-1) - .and change { project_statistics.reload.vulnerability_count }.by(-3) + .and change { security_statistics.reload.vulnerability_count }.by(-3) expect(Vulnerabilities::Statistics::AdjustmentWorker).to have_received(:perform_async).with([project.id]) end @@ -107,7 +107,7 @@ .and change { Vulnerabilities::Read.count }.by(-1) .and change { Vulnerabilities::Finding.count }.by(-1) .and change { Vulnerabilities::FindingIdentifier.count }.by(-1) - .and change { project_statistics.reload.vulnerability_count }.by(-1) + .and change { security_statistics.reload.vulnerability_count }.by(-1) .and not_change { Vulnerabilities::Flag.count } .and not_change { VulnerabilityUserMention.count } .and not_change { Vulnerabilities::Feedback.count } @@ -146,7 +146,7 @@ .and change { Vulnerabilities::Finding::Evidence.count }.by(-1) .and change { Vulnerabilities::ExternalIssueLink.count }.by(-1) .and change { Vulnerabilities::FindingRemediation.count }.by(-1) - .and change { project_statistics.reload.vulnerability_count }.by(-2) + .and change { security_statistics.reload.vulnerability_count }.by(-2) .and not_change { Vulnerabilities::Feedback.count } .and not_change { Vulnerabilities::Identifier.count } .and not_change { Vulnerabilities::HistoricalStatistic.count } diff --git a/ee/spec/services/vulnerabilities/starboard_vulnerability_create_service_spec.rb b/ee/spec/services/vulnerabilities/starboard_vulnerability_create_service_spec.rb index 1578cf3c2f32b..a1462cb688cd7 100644 --- a/ee/spec/services/vulnerabilities/starboard_vulnerability_create_service_spec.rb +++ b/ee/spec/services/vulnerabilities/starboard_vulnerability_create_service_spec.rb @@ -103,7 +103,7 @@ end it 'increases vulnerability_count by 1' do - expect { subject }.to change { project.reload.statistics.vulnerability_count }.by(1) + expect { subject }.to change { project.reload.security_statistics.vulnerability_count }.by(1) end it 'sets the `traversal_ids` of the `vulnerability_reads` record' do -- GitLab