Commit ad287243 authored by Robert Speicher's avatar Robert Speicher

Merge branch '270107-add-script-fenerate-new-metric-file' into 'master'

Add usage_metric_definition generator to generate new yaml metric file

See merge request gitlab-org/gitlab!51201
parents bd9a21c3 fc099c90
# See Usage Ping metrics dictionary docs https://docs.gitlab.com/ee/development/usage_ping/metrics_dictionary.html
key_path: <%= key_path %>
value_type:
product_category:
stage:
status:
milestone:
introduced_by_url:
group:
time_frame: <%= time_frame %>
data_source:
distribution: <%= distribution %>
# tier: ['free', 'starter', 'premium', 'ultimate', 'bronze', 'silver', 'gold']
tier:
# frozen_string_literal: true
require 'rails/generators'
module Gitlab
class UsageMetricDefinitionGenerator < Rails::Generators::Base
Directory = Struct.new(:name, :time_frame) do
def match?(str)
(name == str || time_frame == str) && str != 'none'
end
end
TIME_FRAME_DIRS = [
Directory.new('counts_7d', '7d'),
Directory.new('counts_28d', '28d'),
Directory.new('counts_all', 'all'),
Directory.new('settings', 'none'),
Directory.new('license', 'none')
].freeze
VALID_INPUT_DIRS = (TIME_FRAME_DIRS.flat_map { |d| [d.name, d.time_frame] } - %w(none)).freeze
source_root File.expand_path('../../../generator_templates/usage_metric_definition', __dir__)
desc 'Generates a metric definition yml file'
class_option :ee, type: :boolean, optional: true, default: false, desc: 'Indicates if metric is for ee'
class_option :dir,
type: :string, desc: "Indicates the metric location. It must be one of: #{VALID_INPUT_DIRS.join(', ')}"
argument :key_path, type: :string, desc: 'Unique JSON key path for the metric'
def create_metric_file
validate!
template "metric_definition.yml", file_path
end
def time_frame
directory&.time_frame
end
def distribution
value = ['ce']
value << 'ee' if ee?
value
end
private
def file_path
path = File.join('config', 'metrics', directory&.name, "#{file_name}.yml")
path = File.join('ee', path) if ee?
path
end
def validate!
raise "--dir option is required" unless input_dir.present?
raise "Invalid dir #{input_dir}, allowed options are #{VALID_INPUT_DIRS.join(', ')}" unless directory.present?
end
def ee?
options[:ee]
end
def input_dir
options[:dir]
end
def file_name
key_path.split('.').last
end
def directory
@directory ||= TIME_FRAME_DIRS.find { |d| d.match?(input_dir) }
end
end
end
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