Commit 19544b39 authored by Douwe Maan's avatar Douwe Maan

Merge branch 'bvl-code-owner-approval-usage-ping' into 'master'

Code owner approval usage ping

Closes #10061

See merge request gitlab-org/gitlab-ee!9858
parents 4bedbb20 4a1e8d60
......@@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20190301182457) do
ActiveRecord::Schema.define(version: 20190305162221) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
......@@ -2445,6 +2445,7 @@ ActiveRecord::Schema.define(version: 20190301182457) do
t.string "runners_token_encrypted"
t.string "bfg_object_map"
t.boolean "merge_requests_require_code_owner_approval"
t.index ["archived", "pending_delete", "merge_requests_require_code_owner_approval"], name: "projects_requiring_code_owner_approval", where: "((pending_delete = false) AND (archived = false) AND (merge_requests_require_code_owner_approval = true))", using: :btree
t.index ["ci_id"], name: "index_projects_on_ci_id", using: :btree
t.index ["created_at"], name: "index_projects_on_created_at", using: :btree
t.index ["creator_id"], name: "index_projects_on_creator_id", using: :btree
......
......@@ -93,6 +93,8 @@ module EE
scope :verification_failed_repos, -> { joins(:repository_state).merge(ProjectRepositoryState.verification_failed_repos) }
scope :verification_failed_wikis, -> { joins(:repository_state).merge(ProjectRepositoryState.verification_failed_wikis) }
scope :for_plan_name, -> (name) { joins(namespace: :plan).where(plans: { name: name }) }
scope :requiring_code_owner_approval,
-> { where(merge_requests_require_code_owner_approval: true) }
delegate :shared_runners_minutes, :shared_runners_seconds, :shared_runners_seconds_last_reset,
to: :statistics, allow_nil: true
......
# frozen_string_literal: true
class AddIndexForCountingProjectsRequiringCodeOwnerApproval < ActiveRecord::Migration[5.0]
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
INDEX = [
:projects, [:archived, :pending_delete, :merge_requests_require_code_owner_approval],
name: 'projects_requiring_code_owner_approval',
where: "pending_delete = 'f' AND archived = 'f' AND merge_requests_require_code_owner_approval = 't' "
]
disable_ddl_transaction!
def up
add_concurrent_index(*INDEX)
end
def down
remove_concurrent_index(*INDEX)
end
end
......@@ -117,7 +117,8 @@ module EE
projects_mirrored_with_pipelines_enabled: projects_mirrored_with_pipelines_enabled,
projects_with_prometheus_alerts: count(PrometheusAlert.distinct_projects),
projects_with_packages: count(::Packages::Package.select('distinct project_id')),
projects_with_tracing_enabled: count(ProjectTracingSetting)
projects_with_tracing_enabled: count(ProjectTracingSetting),
projects_enforcing_code_owner_approval: count(::Project.without_deleted.non_archived.requiring_code_owner_approval)
}).merge(service_desk_counts).merge(security_products_usage)
# MySql does not support recursive queries so we can't retrieve epics relationship depth
......
......@@ -55,5 +55,9 @@ FactoryBot.modify do
trait :random_last_repository_updated_at do
last_repository_updated_at { rand(1.year).seconds.ago }
end
trait :requiring_code_owner_approval do
merge_requests_require_code_owner_approval true
end
end
end
......@@ -192,4 +192,16 @@ describe Gitlab::UsageData do
end
end
end
describe 'code owner approval required' do
before do
create(:project, :archived, :requiring_code_owner_approval)
create(:project, :requiring_code_owner_approval, pending_delete: true)
create(:project, :requiring_code_owner_approval)
end
it 'counts the projects actively requiring code owner approval' do
expect(described_class.system_usage_data[:counts][:projects_enforcing_code_owner_approval]).to eq(1)
end
end
end
......@@ -32,6 +32,17 @@ describe Project do
it { is_expected.to have_many(:package_files).class_name('Packages::PackageFile') }
end
context 'scopes' do
describe '.requiring_code_owner_approval' do
it 'only includes the right projects' do
create(:project)
expected_project = create(:project, merge_requests_require_code_owner_approval: true)
expect(described_class.requiring_code_owner_approval).to contain_exactly(expected_project)
end
end
end
describe 'validations' do
let(:project) { build(:project) }
......
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