diff --git a/app/models/issue.rb b/app/models/issue.rb index 2d32fe459c17e4fde827642e13a7d5de9faadf07..368189bbd14ef642c2a637b134d6537e43fb350d 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -84,6 +84,7 @@ def most_recent scope :preload_associated_models, -> { preload(:assignees, :labels, project: :namespace) } scope :with_api_entity_associations, -> { preload(:timelogs, :assignees, :author, :notes, :labels, project: [:route, { namespace: :route }] ) } + scope :with_label_attributes, ->(label_attributes) { joins(:labels).where(labels: label_attributes) } scope :public_only, -> { where(confidential: false) } scope :confidential_only, -> { where(confidential: true) } diff --git a/changelogs/unreleased/213894-northstar-metric-monitor-health.yml b/changelogs/unreleased/213894-northstar-metric-monitor-health.yml new file mode 100644 index 0000000000000000000000000000000000000000..ae9072bc959e33610e7ad4fa064165bb5328c91f --- /dev/null +++ b/changelogs/unreleased/213894-northstar-metric-monitor-health.yml @@ -0,0 +1,5 @@ +--- +title: Add incident_labeled_issues to usage ping +merge_request: 31406 +author: +type: added diff --git a/doc/user/admin_area/settings/usage_statistics.md b/doc/user/admin_area/settings/usage_statistics.md index c29ce9576a858b0a7231616ce0749348cefa1eee..bf1de09739d8f9038daaa77497d6656c4ea812ce 100644 --- a/doc/user/admin_area/settings/usage_statistics.md +++ b/doc/user/admin_area/settings/usage_statistics.md @@ -312,7 +312,9 @@ but commented out to help encourage others to add to it in the future. --> |epics|counts|| |feature_flags|counts|| |geo_nodes|counts|| -|incident_issues|counts|| +|incident_issues|counts|monitor|Issues created by the alert bot| +|alert_bot_incident_issues|counts|monitor|Issues created by the alert bot| +|incident_labeled_issues|counts|monitor|Issues with the incident label| |ldap_group_links|counts|| |ldap_keys|counts|| |ldap_users|counts|| diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb index fef29a2ea541c061dd2df6b463dbdf253b436931..4ca89dbaa5ee5e9e9a8fc82641f1bf3927777ac8 100644 --- a/lib/gitlab/usage_data.rb +++ b/lib/gitlab/usage_data.rb @@ -63,6 +63,8 @@ def recording_ce_finish_data # rubocop: disable Metrics/AbcSize # rubocop: disable CodeReuse/ActiveRecord def system_usage_data + alert_bot_incident_count = count(::Issue.authored(::User.alert_bot)) + { counts: { assignee_lists: count(List.assignee), @@ -112,7 +114,9 @@ def system_usage_data issues_with_associated_zoom_link: count(ZoomMeeting.added_to_issue), issues_using_zoom_quick_actions: distinct_count(ZoomMeeting, :issue_id), issues_with_embedded_grafana_charts_approx: grafana_embed_usage_data, - incident_issues: count(::Issue.authored(::User.alert_bot)), + incident_issues: alert_bot_incident_count, + alert_bot_incident_issues: alert_bot_incident_count, + incident_labeled_issues: count(::Issue.with_label_attributes(IncidentManagement::CreateIssueService::INCIDENT_LABEL)), keys: count(Key), label_lists: count(List.label), lfs_objects: count(LfsObject), diff --git a/spec/factories/usage_data.rb b/spec/factories/usage_data.rb index e75d5bd7d184383202dbe973d432fb7ec96a3bba..bdc4ca6fc6efcc1cef234432cb38138cc63bbdf9 100644 --- a/spec/factories/usage_data.rb +++ b/spec/factories/usage_data.rb @@ -40,6 +40,16 @@ create_list(:zoom_meeting, 2, project: projects[0], issue: projects[0].issues[2], issue_status: :removed) create(:sentry_issue, issue: projects[0].issues[0]) + # Incident Labeled Issues + incident_label_attrs = IncidentManagement::CreateIssueService::INCIDENT_LABEL + incident_label = create(:label, project: projects[0], **incident_label_attrs) + create(:labeled_issue, project: projects[0], labels: [incident_label]) + incident_group = create(:group) + incident_label_scoped_to_project = create(:label, project: projects[1], **incident_label_attrs) + incident_label_scoped_to_group = create(:group_label, group: incident_group, **incident_label_attrs) + create(:labeled_issue, project: projects[1], labels: [incident_label_scoped_to_project]) + create(:labeled_issue, project: projects[1], labels: [incident_label_scoped_to_group]) + # Enabled clusters gcp_cluster = create(:cluster_provider_gcp, :created).cluster create(:cluster_provider_aws, :created) diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 99bf5ebe7716257073c02c818fae8ab88bdb9dd0..cd4b14979a4a9926606e6b54586a7f78bdf0a50b 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -62,6 +62,8 @@ expect(count_data[:issues_using_zoom_quick_actions]).to eq(3) expect(count_data[:issues_with_embedded_grafana_charts_approx]).to eq(2) expect(count_data[:incident_issues]).to eq(4) + expect(count_data[:alert_bot_incident_issues]).to eq(4) + expect(count_data[:incident_labeled_issues]).to eq(3) expect(count_data[:clusters_enabled]).to eq(6) expect(count_data[:project_clusters_enabled]).to eq(4) diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index cab0d83ffd28c956eac7ff167274b0396a2090e0..858de9aca677327eb03f4a5ac0d2bccb122e769d 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -1030,4 +1030,24 @@ it { is_expected.to contain_exactly(design_a, design_c) } end end + + describe '.with_label_attributes' do + subject { described_class.with_label_attributes(label_attributes) } + + let(:label_attributes) { { title: 'hello world', description: 'hi' } } + + it 'gets issues with given label attributes' do + label = create(:label, **label_attributes) + labeled_issue = create(:labeled_issue, project: label.project, labels: [label]) + + expect(subject).to include(labeled_issue) + end + + it 'excludes issues without given label attributes' do + label = create(:label, title: 'GitLab', description: 'tanuki') + labeled_issue = create(:labeled_issue, project: label.project, labels: [label]) + + expect(subject).not_to include(labeled_issue) + end + end end