Make security related project archival features compatible with group archival
Prerequisite
Before you start, please check out the parent epic description to get the full context: Make project archival features compatible with ... (&19690)
Description
We ran a search for "archive" and "archival" in the codebase and pulled together the following relevant results for the security domain. We'd need your help with:
- Review the search results and update the code to use our new ancestor-aware methods and scopes wherever needed
- Creating new services/workers wherever they're needed
- Note: Not all "archive" mentions are about project archival – feel free to skip anything that's not relevant!
Archive/Archival Occurrences
Security / Vulnerabilities
-
ee/app/models/security/project_statistics.rb
-
ee/app/models/ee/project.rb
-
ee/app/models/ee/group.rb
-
ee/app/models/vulnerabilities/statistic.rb
-
scope :unarchived, -> { where(archived: false) } -
INSERT INTO %<table_name>s AS target (project_id, archived, traversal_ids, latest_pipeline_id, letter_grade, created_at, updated_at) -
VALUES (%{project_id}, %{archived}, %{traversal_ids}, %<latest_pipeline_id>d, %<letter_grade>d, now(), now()) -
archived: project.archived, -
INSERT INTO %<table_name>s AS target (project_id, archived, traversal_ids, latest_pipeline_id, letter_grade, created_at, updated_at) -
pipeline.project.archived,
-
-
ee/app/models/vulnerabilities/projects_grade.rb
-
ee/app/models/vulnerabilities/read.rb
-
ee/app/models/vulnerabilities/identifier.rb
-
ee/app/finders/security/vulnerability_elastic_base_finder.rb
-
ee/app/finders/security/security_policy_projects_finder.rb
-
ee/app/finders/security/vulnerability_reads_finder.rb
-
ee/app/workers/vulnerabilities/update_archived_attribute_of_vulnerability_reads_worker.rb
-
ee/app/workers/vulnerabilities/update_archived_attribute_of_vulnerability_statistics_worker.rb
-
ee/app/workers/vulnerabilities/process_archived_events_worker.rb
-
ee/app/workers/vulnerabilities/namespace_statistics/process_group_delete_events_worker.rb
-
ee/app/services/vulnerabilities/archival/restoration/tasks/adjust_traversal_ids_and_archived_attributes.rb
-
# Same applies to the archivedattribute which is also handled by this -
class AdjustTraversalIdsAndArchivedAttributes -
archived = map.archived -
(%{values}) AS map(vulnerability_id, traversal_ids, archived) -
vulnerability_reads.archived != map.archived -
project.archived -
# archivedattributes ofvulnerability_readsrecords by loading the related projects into memory. -
# To address this, we check if the traversal_idsorarchivedattributes are changed after we update -
ensure_archived_consistency -
def ensure_archived_consistency -
projects_which_archived_changed_after_update.each do |changed_project| -
Vulnerabilities::ProcessArchivedEventsWorker.perform_async( -
'Projects::ProjectArchivedEvent', -
def projects_which_archived_changed_after_update -
project_before_update.archived != project_after_update.archived
-
-
ee/app/services/vulnerability_exports/export_service.rb
-
ee/app/services/security/vulnerability_scanning/create_vulnerability_service.rb
-
schedule_updating_archived_status_if_needed -
def schedule_updating_archived_status_if_needed -
return unless map_of_projects_to_adjust[:archival_updated].present? -
Vulnerabilities::UpdateArchivedAttributeOfVulnerabilityReadsWorker.bulk_perform_async_with_contexts( -
map_of_projects_to_adjust[:archival_updated], -
add_into_archival_updated_list_if_needed(map, project, project_with_most_recent_changes) -
def add_into_archival_updated_list_if_needed(map, project, project_with_most_recent_changes) -
return if project.archived == project_with_most_recent_changes.archived -
map[:archival_updated] << project
-
-
ee/app/services/vulnerabilities/starboard_vulnerability_create_service.rb
-
ee/app/services/security/analyzers_status/update_archived_service.rb
-
ee/app/services/security/ingestion/tasks/ingest_vulnerability_statistics.rb
-
ee/app/services/security/ingestion/tasks/ingest_vulnerability_reads/upsert.rb
-
ee/app/services/security/ingestion/schedule_mark_dropped_as_resolved_service.rb
-
ee/app/services/security/ingestion/ingest_reports_service.rb
-
@original_archived_value = project.archived -
schedule_updating_archived_status_if_needed -
attr_reader :pipeline, :original_archived_value, :original_traversal_ids_value -
def schedule_updating_archived_status_if_needed -
return unless archived_value_changed? -
Vulnerabilities::UpdateArchivedAttributeOfVulnerabilityReadsWorker.perform_async(project.id) -
def archived_value_changed? -
reloaded_project.archived != original_archived_value
-
-
ee/app/services/security/ingestion/tasks/ingest_vulnerability_reads/update.rb
-
ee/app/services/security/inventory_filters/vulnerability_statistics_update_service.rb
-
ee/app/services/security/inventory_filters/analyzer_status_update_service.rb
-
ee/app/services/security/analyzer_namespace_statuses/adjustment_service.rb
-
ee/app/services/security/analyzer_namespace_statuses/find_namespaces_with_analyzer_statuses_service.rb
-
ee/app/services/vulnerabilities/statistics/update_service.rb
-
ee/app/services/vulnerabilities/statistics/adjustment_service.rb
-
(project_id, archived, traversal_ids, total, info, unknown, low, medium, high, critical, letter_grade, created_at, updated_at) -
project_attributes.archived AS archived, -
JOIN (%{project_attributes}) project_attributes(project_id, archived, traversal_ids) -
SELECT project_id, archived, traversal_ids, total, info, unknown, low, medium, high, critical, letter_grade, created_at, updated_at -
.pluck(:id, :archived, :traversal_ids, :namespace_id)
-
-
ee/app/services/vulnerabilities/create_service_base.rb
-
@original_archived_value = project.archived -
attr_reader :author, :project, :original_archived_value, :original_traversal_ids_value -
def process_archival_and_traversal_ids_changes -
schedule_updating_archived_status_if_needed -
def schedule_updating_archived_status_if_needed -
return if original_archived_value == reloaded_project.archived -
Vulnerabilities::UpdateArchivedAttributeOfVulnerabilityReadsWorker.perform_async(project.id)
-
-
ee/app/services/vulnerabilities/manually_create_service.rb
-
ee/app/services/vulnerabilities/reads/upsert_service.rb
-
ee/app/services/vulnerabilities/namespace_statistics/find_vulnerable_namespaces_service.rb
-
ee/app/services/vulnerabilities/namespace_statistics/adjustment_service.rb
-
ee/lib/quality/seeders/vulnerabilities.rb
-
ee/lib/search/elastic/vulnerability_query_builder.rb
-
ee/lib/search/elastic/types/vulnerability.rb
-
ee/lib/search/elastic/vulnerability_filters.rb
-
app/presenters/projects/security/configuration_presenter.rb
-
ee/app/models/security/analyzer_namespace_status.rb
-
ee/app/models/security/analyzer_project_status.rb
-
ee/app/models/security/inventory_filter.rb
-
ee/app/models/security/project_tracked_context.rb
-
ee/app/graphql/resolvers/security/namespace_security_projects_resolver.rb
-
ee/app/workers/security/analyzers_status/process_archived_events_worker.rb
-
ee/app/workers/security/analyzer_namespace_statuses/process_group_deleted_events_worker.rb
-
ee/app/services/concerns/security/analyzers_status/aggregated_types_handler.rb
-
ee/app/services/concerns/security/scan_result_policies/policy_violation_comment_generator.rb
-
ee/app/models/instance_security_dashboard.rb
-
ee/lib/ee/gitlab/background_migration/backfill_security_inventory_filters.rb
-
lib/gitlab/background_migration/backfill_archived_and_traversal_ids_to_vulnerability_reads.rb
-
lib/gitlab/background_migration/backfill_archived_and_traversal_ids_to_vulnerability_statistics.rb
-
class BackfillArchivedAndTraversalIdsToVulnerabilityStatistics < BatchedMigrationJob -
operation_name :backfill_archived_and_traversal_ids_in_vulnerability_statistics_table -
WITH project_to_archived_traversal_ids (project_id, archived, traversal_ids) AS ( -
traversal_ids = project_to_archived_traversal_ids.traversal_ids, -
archived = project_to_archived_traversal_ids.archived -
project_to_archived_traversal_ids -
project_to_archived_traversal_ids.project_id = vulnerability_statistics.project_id AND -
scope :archived_and_traversal_ids, ->(project_ids) { -
.pluck(:id, :archived, :traversal_ids) -
project_info = Project.archived_and_traversal_ids(project_ids)
-
-
ee/lib/ee/gitlab/background_migration/backfill_analyzer_project_statuses.rb
-
projects_info = sub_batch.pluck(:project_id, :traversal_ids, :latest_pipeline_id, :archived) -
project_info.each do |project_id, traversal_ids, pipeline_id, archived| -
statuses = process_builds(builds, project_id, traversal_ids, archived) -
def process_builds(builds, project_id, traversal_ids, archived) -
archived: archived -
%w[project_id traversal_ids analyzer_type status last_call build_id archived created_at updated_at] -
status_data[:archived],
-
SBOM
-
ee/app/models/ee/group.rb
-
ee/app/services/sbom/ingestion/tasks/ingest_occurrences.rb
-
ee/app/services/sbom/sync_archived_status_service.rb
-
ee/app/workers/sbom/sync_archived_status_worker.rb
-
ee/app/models/sbom/occurrence.rb
-
ee/app/finders/sbom/aggregations_finder.rb