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