diff --git a/lib/gitlab/usage_data.rb b/lib/gitlab/usage_data.rb index 4e2c6f7b2c27d9dbd90dff114687344c23f7f93c..069cd1f802aee5920e14a26b91e4fc8b92d380f8 100644 --- a/lib/gitlab/usage_data.rb +++ b/lib/gitlab/usage_data.rb @@ -127,7 +127,6 @@ module Gitlab # rubocop: disable CodeReuse/ActiveRecord def services_usage types = { - JiraService: :projects_jira_active, SlackService: :projects_slack_notifications_active, SlackSlashCommandsService: :projects_slack_slash_active, PrometheusService: :projects_prometheus_active @@ -135,6 +134,23 @@ module Gitlab results = count(Service.unscoped.where(type: types.keys, active: true).group(:type), fallback: Hash.new(-1)) types.each_with_object({}) { |(klass, key), response| response[key] = results[klass.to_s] || 0 } + .merge(jira_usage) + end + + def jira_usage + # Jira Cloud does not support custom domains as per https://jira.atlassian.com/browse/CLOUD-6999 + # so we can just check for subdomains of atlassian.net + services = count( + Service.unscoped.where(type: :JiraService, active: true) + .group("CASE WHEN properties LIKE '%.atlassian.net%' THEN 'cloud' ELSE 'server' END"), + fallback: Hash.new(-1) + ) + + { + projects_jira_server_active: services['server'] || 0, + projects_jira_cloud_active: services['cloud'] || 0, + projects_jira_active: services['server'] == -1 ? -1 : services.values.sum + } end def count(relation, fallback: -1) diff --git a/spec/factories/services.rb b/spec/factories/services.rb index 0d4fd49bf3ac7387da71535fa246ccba4869d2d1..5be56a499032bab62c6d405c6d2b48dbe5e01cdf 100644 --- a/spec/factories/services.rb +++ b/spec/factories/services.rb @@ -46,6 +46,17 @@ FactoryBot.define do ) end + factory :jira_cloud_service, class: JiraService do + project + active true + properties( + url: 'https://mysite.atlassian.net', + username: 'jira_user', + password: 'my-secret-password', + project_key: 'jira-key' + ) + end + factory :hipchat_service do project type 'HipchatService' diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index 76dec4a44fd2227124aae8ad9d4c6b5ad5682e9f..b212d2b05f2357593369cb784ab8969eeb92fc26 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -8,6 +8,7 @@ describe Gitlab::UsageData do before do create(:jira_service, project: projects[0]) create(:jira_service, project: projects[1]) + create(:jira_cloud_service, project: projects[2]) create(:prometheus_service, project: projects[1]) create(:service, project: projects[0], type: 'SlackSlashCommandsService', active: true) create(:service, project: projects[1], type: 'SlackService', active: true) @@ -97,6 +98,8 @@ describe Gitlab::UsageData do projects projects_imported_from_github projects_jira_active + projects_jira_server_active + projects_jira_cloud_active projects_slack_notifications_active projects_slack_slash_active projects_prometheus_active @@ -116,7 +119,9 @@ describe Gitlab::UsageData do expect(count_data[:projects]).to eq(3) expect(count_data[:projects_prometheus_active]).to eq(1) - expect(count_data[:projects_jira_active]).to eq(2) + expect(count_data[:projects_jira_active]).to eq(3) + expect(count_data[:projects_jira_server_active]).to eq(2) + expect(count_data[:projects_jira_cloud_active]).to eq(1) expect(count_data[:projects_slack_notifications_active]).to eq(2) expect(count_data[:projects_slack_slash_active]).to eq(1)