From cce5d7bd6a38bacb4538b0b8f7c28a5e7ba7edef Mon Sep 17 00:00:00 2001
From: Rajendra Kadam <rkadam@gitlab.com>
Date: Mon, 26 Jul 2021 15:03:10 +0000
Subject: [PATCH] Add License metric classes for Zuora Subscription ID and
 License MD5

---
 .../license/20210204124831_license_md5.yml    |  1 +
 ...20210204124852_license_subscription_id.yml |  1 +
 .../license_md_five_metric.rb                 | 15 +++++++++++
 .../zuora_subscription_id_metric.rb           | 15 +++++++++++
 .../license_md_five_metric_spec.rb            |  9 +++++++
 .../zuora_subscription_id_metric_spec.rb      |  9 +++++++
 ee/spec/lib/gitlab/usage_data_metrics_spec.rb | 26 +++++++++++++++++++
 7 files changed, 76 insertions(+)
 create mode 100644 ee/lib/gitlab/usage/metrics/instrumentations/license_md_five_metric.rb
 create mode 100644 ee/lib/gitlab/usage/metrics/instrumentations/zuora_subscription_id_metric.rb
 create mode 100644 ee/spec/lib/gitlab/usage/metrics/instrumentations/license_md_five_metric_spec.rb
 create mode 100644 ee/spec/lib/gitlab/usage/metrics/instrumentations/zuora_subscription_id_metric_spec.rb
 create mode 100644 ee/spec/lib/gitlab/usage_data_metrics_spec.rb

diff --git a/ee/config/metrics/license/20210204124831_license_md5.yml b/ee/config/metrics/license/20210204124831_license_md5.yml
index 85c1c9c302d01..8b02a917fd1ac 100644
--- a/ee/config/metrics/license/20210204124831_license_md5.yml
+++ b/ee/config/metrics/license/20210204124831_license_md5.yml
@@ -9,6 +9,7 @@ value_type: string
 status: data_available
 time_frame: none
 data_source: license
+instrumentation_class: 'LicenseMdFiveMetric'
 data_category: Standard
 distribution:
 - ee
diff --git a/ee/config/metrics/license/20210204124852_license_subscription_id.yml b/ee/config/metrics/license/20210204124852_license_subscription_id.yml
index 463a8a2fc231d..3a1cf89a65eee 100644
--- a/ee/config/metrics/license/20210204124852_license_subscription_id.yml
+++ b/ee/config/metrics/license/20210204124852_license_subscription_id.yml
@@ -9,6 +9,7 @@ value_type: string
 status: data_available
 time_frame: none
 data_source: license
+instrumentation_class: 'ZuoraSubscriptionIdMetric'
 data_category: Standard
 distribution:
 - ee
diff --git a/ee/lib/gitlab/usage/metrics/instrumentations/license_md_five_metric.rb b/ee/lib/gitlab/usage/metrics/instrumentations/license_md_five_metric.rb
new file mode 100644
index 0000000000000..ee601f180e3bc
--- /dev/null
+++ b/ee/lib/gitlab/usage/metrics/instrumentations/license_md_five_metric.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Gitlab
+  module Usage
+    module Metrics
+      module Instrumentations
+        class LicenseMdFiveMetric < ::Gitlab::Usage::Metrics::Instrumentations::GenericMetric
+          value do
+            ::License.current.md5
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/ee/lib/gitlab/usage/metrics/instrumentations/zuora_subscription_id_metric.rb b/ee/lib/gitlab/usage/metrics/instrumentations/zuora_subscription_id_metric.rb
new file mode 100644
index 0000000000000..ba6c310e59eef
--- /dev/null
+++ b/ee/lib/gitlab/usage/metrics/instrumentations/zuora_subscription_id_metric.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Gitlab
+  module Usage
+    module Metrics
+      module Instrumentations
+        class ZuoraSubscriptionIdMetric < ::Gitlab::Usage::Metrics::Instrumentations::GenericMetric
+          value do
+            ::License.current.subscription_id
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/ee/spec/lib/gitlab/usage/metrics/instrumentations/license_md_five_metric_spec.rb b/ee/spec/lib/gitlab/usage/metrics/instrumentations/license_md_five_metric_spec.rb
new file mode 100644
index 0000000000000..2d95a47ac45d4
--- /dev/null
+++ b/ee/spec/lib/gitlab/usage/metrics/instrumentations/license_md_five_metric_spec.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::Usage::Metrics::Instrumentations::LicenseMdFiveMetric do
+  it_behaves_like 'a correct instrumented metric value', { time_frame: 'none', data_source: 'ruby' } do
+    let(:expected_value) { Digest::MD5.hexdigest(::License.current.data) }
+  end
+end
diff --git a/ee/spec/lib/gitlab/usage/metrics/instrumentations/zuora_subscription_id_metric_spec.rb b/ee/spec/lib/gitlab/usage/metrics/instrumentations/zuora_subscription_id_metric_spec.rb
new file mode 100644
index 0000000000000..29d658593c1ef
--- /dev/null
+++ b/ee/spec/lib/gitlab/usage/metrics/instrumentations/zuora_subscription_id_metric_spec.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::Usage::Metrics::Instrumentations::ZuoraSubscriptionIdMetric do
+  it_behaves_like 'a correct instrumented metric value', { time_frame: 'none', data_source: 'ruby' } do
+    let(:expected_value) { ::License.current.subscription_id }
+  end
+end
diff --git a/ee/spec/lib/gitlab/usage_data_metrics_spec.rb b/ee/spec/lib/gitlab/usage_data_metrics_spec.rb
new file mode 100644
index 0000000000000..2b7ee015190d0
--- /dev/null
+++ b/ee/spec/lib/gitlab/usage_data_metrics_spec.rb
@@ -0,0 +1,26 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::UsageDataMetrics do
+  describe '.uncached_data' do
+    subject { described_class.uncached_data }
+
+    around do |example|
+      described_class.instance_variable_set(:@definitions, nil)
+      example.run
+      described_class.instance_variable_set(:@definitions, nil)
+    end
+
+    before do
+      allow(ActiveRecord::Base.connection).to receive(:transaction_open?).and_return(false) # rubocop:disable Database/MultipleDatabases
+    end
+
+    context 'with instrumentation_class' do
+      it 'includes top level keys' do
+        expect(subject).to include(:license_md5)
+        expect(subject).to include(:license_subscription_id)
+      end
+    end
+  end
+end
-- 
GitLab