diff --git a/.rubocop_todo/gitlab/namespaced_class.yml b/.rubocop_todo/gitlab/namespaced_class.yml index 0f974bc5002..dd9742d40f2 100644 --- a/.rubocop_todo/gitlab/namespaced_class.yml +++ b/.rubocop_todo/gitlab/namespaced_class.yml @@ -1089,7 +1089,6 @@ Gitlab/NamespacedClass: - 'ee/app/workers/project_import_schedule_worker.rb' - 'ee/app/workers/project_template_export_worker.rb' - 'ee/app/workers/refresh_license_compliance_checks_worker.rb' - - 'ee/app/workers/repository_push_audit_event_worker.rb' - 'ee/app/workers/repository_update_mirror_worker.rb' - 'ee/app/workers/scan_security_report_secrets_worker.rb' - 'ee/app/workers/set_user_status_based_on_user_cap_setting_worker.rb' diff --git a/.rubocop_todo/style/symbol_proc.yml b/.rubocop_todo/style/symbol_proc.yml index 12e20553e1a..5e3aa10d9e5 100644 --- a/.rubocop_todo/style/symbol_proc.yml +++ b/.rubocop_todo/style/symbol_proc.yml @@ -113,7 +113,6 @@ Style/SymbolProc: - 'ee/app/workers/geo/batch/project_registry_worker.rb' - 'ee/app/workers/geo/sync_timeout_cron_worker.rb' - 'ee/app/workers/geo/verification_cron_worker.rb' - - 'ee/app/workers/repository_push_audit_event_worker.rb' - 'ee/lib/api/entities/pending_member.rb' - 'ee/lib/api/related_epic_links.rb' - 'ee/lib/ee/api/entities/audit_event.rb' diff --git a/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue b/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue index 2eec65457c7..768cd005727 100644 --- a/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue +++ b/app/assets/javascripts/vue_shared/components/user_popover/user_popover.vue @@ -140,8 +140,9 @@ export default { diff --git a/app/views/projects/merge_requests/_mr_title.html.haml b/app/views/projects/merge_requests/_mr_title.html.haml index b79366f6344..2d4d4f038e7 100644 --- a/app/views/projects/merge_requests/_mr_title.html.haml +++ b/app/views/projects/merge_requests/_mr_title.html.haml @@ -3,7 +3,7 @@ - can_reopen_merge_request = can?(current_user, :reopen_merge_request, @merge_request) - are_close_and_open_buttons_hidden = merge_request_button_hidden?(@merge_request, true) && merge_request_button_hidden?(@merge_request, false) - updated_mr_header_enabled = Feature.enabled?(:updated_mr_header, @project) -- cache_key = [@project, @merge_request, can_update_merge_request, can_reopen_merge_request, are_close_and_open_buttons_hidden, current_user&.preferred_language, "1.1-#{updated_mr_header_enabled}"] +- cache_key = [@project, @merge_request, can_update_merge_request, can_reopen_merge_request, are_close_and_open_buttons_hidden, current_user&.preferred_language, "1.1-#{updated_mr_header_enabled}", moved_mr_sidebar_enabled?] = cache(cache_key, expires_in: 1.day) do - if @merge_request.closed_or_merged_without_fork? @@ -13,7 +13,7 @@ = c.body do = _('The source project of this merge request has been removed.') - .detail-page-header.border-bottom-0.pt-0.pb-0{ class: "#{'gl-display-block gl-md-display-flex!' if updated_mr_header_enabled} #{'is-merge-request' if updated_mr_header_enabled && !fluid_layout}" } + .detail-page-header.border-bottom-0.pt-0.pb-0{ class: "#{'gl-display-block gl-md-display-flex!' if updated_mr_header_enabled} #{'is-merge-request' if moved_mr_sidebar_enabled? && !fluid_layout}" } .detail-page-header-body - unless updated_mr_header_enabled = render "shared/issuable/status_box", issuable: @merge_request diff --git a/config/feature_flags/development/route_hll_to_snowplow_phase2.yml b/config/feature_flags/development/route_hll_to_snowplow_phase2.yml new file mode 100644 index 00000000000..cbbd2a35737 --- /dev/null +++ b/config/feature_flags/development/route_hll_to_snowplow_phase2.yml @@ -0,0 +1,8 @@ +--- +name: route_hll_to_snowplow_phase2 +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/88482 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/363562 +milestone: '15.1' +type: development +group: group::product intelligence +default_enabled: false diff --git a/config/sidekiq_queues.yml b/config/sidekiq_queues.yml index 28f5eaf92d7..0bb38e46aa6 100644 --- a/config/sidekiq_queues.yml +++ b/config/sidekiq_queues.yml @@ -395,8 +395,6 @@ - 1 - - repository_import - 1 -- - repository_push_audit_event - - 1 - - repository_update_mirror - 1 - - repository_update_remote_mirror diff --git a/db/post_migrate/20220524132416_prepare_job_artifact_project_id_index.rb b/db/post_migrate/20220524132416_prepare_job_artifact_project_id_index.rb new file mode 100644 index 00000000000..4e27e7f0624 --- /dev/null +++ b/db/post_migrate/20220524132416_prepare_job_artifact_project_id_index.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class PrepareJobArtifactProjectIdIndex < Gitlab::Database::Migration[2.0] + INDEX_NAME = 'index_ci_job_artifacts_on_project_id_and_id' + + def up + prepare_async_index :ci_job_artifacts, [:project_id, :id], name: INDEX_NAME + end + + def down + unprepare_async_index :notes, [:project_id, :id], name: INDEX_NAME + end +end diff --git a/db/schema_migrations/20220524132416 b/db/schema_migrations/20220524132416 new file mode 100644 index 00000000000..b9e08078784 --- /dev/null +++ b/db/schema_migrations/20220524132416 @@ -0,0 +1 @@ +e4b944d4b2107b203593187e8cefc89df276ce01a93e6b0795c0d710e8f81da2 \ No newline at end of file diff --git a/doc/development/uploads/working_with_uploads.md b/doc/development/uploads/working_with_uploads.md index 4e907530a9f..9bc503e1fda 100644 --- a/doc/development/uploads/working_with_uploads.md +++ b/doc/development/uploads/working_with_uploads.md @@ -103,21 +103,22 @@ Therefore, document new uploads here by slotting them into the following tables: | Job traces archive | `carrierwave` | `sidekiq` | `/artifacts/////job.log` | | Autoscale runner caching | N/A | `gitlab-runner` | `/gitlab-com-[platform-]runners-cache/???` | | Backups | N/A | `s3cmd`, `awscli`, or `gcs` | `/gitlab-backups/???` | -| Git LFS | `direct upload` | `workhorse` | `/lsf-objects//` | +| Git LFS | `direct upload` | `workhorse` | `/lfs-objects//` | | Design management files | `disk buffering` | `rails controller` | `/lsf-objects//` | -| Design management thumbnails | `carrierwave` | `sidekiq` | `/uploads/design_management/action/image_v432x230/` | +| Design management thumbnails | `carrierwave` | `sidekiq` | `/uploads/design_management/action/image_v432x230////file` | | Generic file uploads - personal snippets | `direct upload` | `workhorse` | `/uploads/personal_snippet//` | | Global appearance settings | `disk buffering` | `rails controller` | `/uploads/appearance/...` | | Topics | `disk buffering` | `rails controller` | `/uploads/projects/topic/...` | | Avatar images | `direct upload` | `workhorse` | `/uploads/[user,group,project]/avatar/` | -| Import/export | `direct upload` | `workhorse` | `/uploads/import_export_upload/???` | +| Import | `direct upload` | `workhorse` | `/uploads/import_export_upload/import_file//` | +| Export | `carrierwave` | `sidekiq` | `/uploads/import_export_upload/export_file//_-_export.tag.gz` | | GitLab Migration | `carrierwave` | `sidekiq` | `/uploads/bulk_imports/???` | | MR diffs | `carrierwave` | `sidekiq` | `/external-diffs/merge_request_diffs/mr-/diff-` | -| Package manager archives | `direct upload` | `sidekiq` | `/packages//packages//files/` | -| Package manager archives | `direct upload` | `sidekiq` | `/packages//debian_*_component_file/` | -| Package manager archives | `direct upload` | `sidekiq` | `/packages//debian_*_distribution/` | -| Container image cache (?) | `direct upload` | `workhorse` | `/dependency-proxy//dependency_proxy//files//` | +| [Package manager assets (except for NPM)](../../user/packages/package_registry/index.md) | `direct upload` | `workhorse` | `/packages//packages//files/` | +| [NPM Package manager assets](../../user/packages/npm_registry/index.md) | `carrierwave` | `grape API` | `/packages//packages//files/` | +| [Debian Package manager assets](../../user/packages/debian_repository/index.md) | `direct upload` | `workhorse` | `/packages//debian_*/` | +| [Dependency Proxy cache](../../user/packages/dependency_proxy/index.md) | [`send_dependency`](https://gitlab.com/gitlab-org/gitlab/-/blob/6ed73615ff1261e6ed85c8f57181a65f5b4ffada/workhorse/internal/dependencyproxy/dependencyproxy.go) | `workhorse` | `/dependency-proxy//dependency_proxy//files/` | | Terraform state files | `carrierwave` | `rails controller` | `/terraform//` | | Pages content archives | `carrierwave` | `sidekiq` | `/gitlab-gprd-pages//pages_deployments//` | | Secure Files | `carrierwave` | `sidekiq` | `/ci-secure-files//secure_files//` | diff --git a/lib/api/terraform/state.rb b/lib/api/terraform/state.rb index 7b111451b9f..35716fb0fae 100644 --- a/lib/api/terraform/state.rb +++ b/lib/api/terraform/state.rb @@ -24,6 +24,11 @@ module API authorize! :read_terraform_state, user_project increment_unique_values('p_terraform_state_api_unique_users', current_user.id) + + if Feature.enabled?(:route_hll_to_snowplow_phase2, user_project&.namespace) + Gitlab::Tracking.event('API::Terraform::State', 'p_terraform_state_api_unique_users', + namespace: user_project&.namespace, user: current_user) + end end params do diff --git a/spec/requests/api/terraform/state_spec.rb b/spec/requests/api/terraform/state_spec.rb index ae1e461d433..f49e799cf5d 100644 --- a/spec/requests/api/terraform/state_spec.rb +++ b/spec/requests/api/terraform/state_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe API::Terraform::State do +RSpec.describe API::Terraform::State, :snowplow do include HttpBasicAuthHelpers let_it_be(:project) { create(:project) } @@ -25,11 +25,17 @@ RSpec.describe API::Terraform::State do context 'without authentication' do let(:auth_header) { basic_auth_header('bad', 'token') } - it 'does not track unique event' do + it 'does not track unique hll event' do expect(Gitlab::UsageDataCounters::HLLRedisCounter).not_to receive(:track_event) request end + + it 'does not track Snowplow event' do + request + + expect_no_snowplow_event + end end context 'with maintainer permissions' do @@ -39,6 +45,29 @@ RSpec.describe API::Terraform::State do let(:target_event) { 'p_terraform_state_api_unique_users' } let(:expected_value) { instance_of(Integer) } end + + it 'tracks Snowplow event' do + request + + expect_snowplow_event( + category: described_class.to_s, + action: 'p_terraform_state_api_unique_users', + namespace: project.namespace.reload, + user: current_user + ) + end + + context 'when route_hll_to_snowplow_phase2 FF is disabled' do + before do + stub_feature_flags(route_hll_to_snowplow_phase2: false) + end + + it 'does not track Snowplow event' do + request + + expect_no_snowplow_event + end + end end end diff --git a/spec/support/helpers/callouts_test_helper.rb b/spec/support/helpers/callouts_test_helper.rb new file mode 100644 index 00000000000..8c7faa71d9f --- /dev/null +++ b/spec/support/helpers/callouts_test_helper.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module CalloutsTestHelper + def callouts_trials_link_path + '/-/trial_registrations/new?glm_content=gold-callout&glm_source=gitlab.com' + end +end + +CalloutsTestHelper.prepend_mod diff --git a/spec/workers/every_sidekiq_worker_spec.rb b/spec/workers/every_sidekiq_worker_spec.rb index b1532b01d3f..ea8b37b59c4 100644 --- a/spec/workers/every_sidekiq_worker_spec.rb +++ b/spec/workers/every_sidekiq_worker_spec.rb @@ -405,7 +405,6 @@ RSpec.describe 'Every Sidekiq worker' do 'RepositoryForkWorker' => 5, 'RepositoryImportWorker' => false, 'RepositoryUpdateMirrorWorker' => false, - 'RepositoryPushAuditEventWorker' => 3, 'RepositoryUpdateRemoteMirrorWorker' => 3, 'RequirementsManagement::ImportRequirementsCsvWorker' => 3, 'RequirementsManagement::ProcessRequirementsReportsWorker' => 3,