Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/usage/service_ping/instrumented_payload.rb')
-rw-r--r--lib/gitlab/usage/service_ping/instrumented_payload.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/gitlab/usage/service_ping/instrumented_payload.rb b/lib/gitlab/usage/service_ping/instrumented_payload.rb
new file mode 100644
index 00000000000..e04e2e589b2
--- /dev/null
+++ b/lib/gitlab/usage/service_ping/instrumented_payload.rb
@@ -0,0 +1,41 @@
+# frozen_string_literal: true
+
+# Service Ping payload build using the instrumentation classes
+# for given metrics key_paths and output method
+module Gitlab
+ module Usage
+ module ServicePing
+ class InstrumentedPayload
+ attr_reader :metrics_key_paths
+ attr_reader :output_method
+
+ def initialize(metrics_key_paths, output_method)
+ @metrics_key_paths = metrics_key_paths
+ @output_method = output_method
+ end
+
+ def build
+ metrics_key_paths.map do |key_path|
+ compute_instrumental_value(key_path, output_method)
+ end.reduce({}, :deep_merge)
+ end
+
+ private
+
+ # Not all metrics defintions have instrumentation classes
+ # The value can be computed only for those that have it
+ def instrumented_metrics_defintions
+ Gitlab::Usage::MetricDefinition.with_instrumentation_class
+ end
+
+ def compute_instrumental_value(key_path, output_method)
+ definition = instrumented_metrics_defintions.find { |df| df.key_path == key_path }
+
+ return {} unless definition.present?
+
+ Gitlab::Usage::Metric.new(definition).method(output_method).call
+ end
+ end
+ end
+ end
+end