Commit 7c19a242 authored by Reuben Pereira's avatar Reuben Pereira Committed by Sean McGivern

Add metric to track projects with atleast 1 alert to usage ping data

parent a62e2103
...@@ -23,6 +23,11 @@ class PrometheusAlert < ActiveRecord::Base ...@@ -23,6 +23,11 @@ class PrometheusAlert < ActiveRecord::Base
scope :for_metric, -> (metric) { where(prometheus_metric: metric) } scope :for_metric, -> (metric) { where(prometheus_metric: metric) }
def self.distinct_projects
sub_query = self.group(:project_id).select(1)
self.from(sub_query)
end
def self.operator_to_enum(op) def self.operator_to_enum(op)
OPERATORS_MAP.invert.fetch(op) OPERATORS_MAP.invert.fetch(op)
end end
......
---
title: Add a metric to the usage ping data to track the number of projects with at least one alert
merge_request: 8058
author:
type: other
...@@ -99,7 +99,8 @@ module EE ...@@ -99,7 +99,8 @@ module EE
ldap_keys: count(::LDAPKey), ldap_keys: count(::LDAPKey),
ldap_users: count(::User.ldap), ldap_users: count(::User.ldap),
projects_reporting_ci_cd_back_to_github: count(::GithubService.without_defaults.active), projects_reporting_ci_cd_back_to_github: count(::GithubService.without_defaults.active),
projects_mirrored_with_pipelines_enabled: projects_mirrored_with_pipelines_enabled projects_mirrored_with_pipelines_enabled: projects_mirrored_with_pipelines_enabled,
projects_with_prometheus_alerts: count(PrometheusAlert.distinct_projects)
}).merge(service_desk_counts).merge(security_products_usage) }).merge(service_desk_counts).merge(security_products_usage)
usage_data usage_data
......
...@@ -14,6 +14,10 @@ describe Gitlab::UsageData do ...@@ -14,6 +14,10 @@ describe Gitlab::UsageData do
create(:ci_build, name: 'dependency_scanning', pipeline: pipeline) create(:ci_build, name: 'dependency_scanning', pipeline: pipeline)
create(:ci_build, name: 'license_management', pipeline: pipeline) create(:ci_build, name: 'license_management', pipeline: pipeline)
create(:ci_build, name: 'sast', pipeline: pipeline) create(:ci_build, name: 'sast', pipeline: pipeline)
create(:prometheus_alert, project: projects[0])
create(:prometheus_alert, project: projects[0])
create(:prometheus_alert, project: projects[1])
end end
subject { described_class.data } subject { described_class.data }
...@@ -54,7 +58,10 @@ describe Gitlab::UsageData do ...@@ -54,7 +58,10 @@ describe Gitlab::UsageData do
dependency_scanning_jobs dependency_scanning_jobs
license_management_jobs license_management_jobs
sast_jobs sast_jobs
projects_with_prometheus_alerts
)) ))
expect(count_data[:projects_with_prometheus_alerts]).to eq(2)
end end
it 'gathers security products usage data' do it 'gathers security products usage data' do
......
...@@ -6,6 +6,23 @@ describe PrometheusAlert do ...@@ -6,6 +6,23 @@ describe PrometheusAlert do
set(:project) { build(:project) } set(:project) { build(:project) }
let(:metric) { build(:prometheus_metric) } let(:metric) { build(:prometheus_metric) }
describe '.distinct_projects' do
let(:project1) { create(:project) }
let(:project2) { create(:project) }
before do
create(:prometheus_alert, project: project1)
create(:prometheus_alert, project: project1)
create(:prometheus_alert, project: project2)
end
subject { described_class.distinct_projects.count }
it 'returns a count of all distinct projects which have an alert' do
expect(subject).to eq(2)
end
end
describe 'associations' do describe 'associations' do
it { is_expected.to belong_to(:project) } it { is_expected.to belong_to(:project) }
it { is_expected.to belong_to(:environment) } it { is_expected.to belong_to(:environment) }
......
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