mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-07-25 16:03:48 +00:00
93 lines
2.5 KiB
Ruby
Executable File
93 lines
2.5 KiB
Ruby
Executable File
#!/usr/bin/env ruby
|
|
# frozen_string_literal: true
|
|
|
|
# Generate a metric/event files in the correct locations.
|
|
|
|
require 'tty-prompt'
|
|
require 'net/http'
|
|
require 'yaml'
|
|
require 'json_schemer'
|
|
require 'delegate'
|
|
|
|
require_relative './cli/helpers'
|
|
require_relative './cli/flows/event_definer'
|
|
require_relative './cli/flows/flow_advisor'
|
|
require_relative './cli/flows/metric_definer'
|
|
require_relative './cli/flows/usage_viewer'
|
|
require_relative './cli/global_state'
|
|
require_relative './cli/time_framed_key_path'
|
|
require_relative './cli/metric'
|
|
require_relative './cli/event'
|
|
|
|
class Cli
|
|
include ::InternalEventsCli::Helpers
|
|
|
|
attr_reader :cli
|
|
|
|
def initialize(cli)
|
|
@cli = cli
|
|
end
|
|
|
|
def run
|
|
cli.say feedback_notice
|
|
cli.say instructions
|
|
|
|
task = cli.select("What would you like to do?", **select_opts) do |menu|
|
|
menu.enum "."
|
|
|
|
menu.choice "New Event -- track when a specific scenario occurs on gitlab instances\n " \
|
|
"ex) a user applies a label to an issue", :new_event
|
|
menu.choice "New Metric -- track the count of existing events over time\n " \
|
|
"ex) count unique users who assign labels to issues per month", :new_metric
|
|
menu.choice 'View Usage -- look at code and testing examples for existing events & metrics', :view_usage
|
|
menu.choice '...am I in the right place?', :help_decide
|
|
end
|
|
|
|
case task
|
|
when :new_event
|
|
InternalEventsCli::Flows::EventDefiner.new(cli).run
|
|
when :new_metric
|
|
InternalEventsCli::Flows::MetricDefiner.new(cli).run
|
|
when :view_usage
|
|
InternalEventsCli::Flows::UsageViewer.new(cli).run
|
|
when :help_decide
|
|
InternalEventsCli::Flows::FlowAdvisor.new(cli).run
|
|
end
|
|
end
|
|
|
|
def instructions
|
|
cli.say <<~TEXT.freeze
|
|
#{format_info('INSTRUCTIONS:')}
|
|
To start tracking usage of a feature...
|
|
|
|
1) Define event (using CLI)
|
|
2) Trigger event (from code)
|
|
3) Define metric (using CLI)
|
|
4) View data in Tableau (after merge & deploy)
|
|
|
|
This CLI will help you create the correct definition files, then provide code examples for instrumentation and testing.
|
|
|
|
Learn more: https://docs.gitlab.com/ee/development/internal_analytics/#fundamental-concepts
|
|
|
|
TEXT
|
|
end
|
|
end
|
|
|
|
class GitlabPrompt < SimpleDelegator
|
|
def global
|
|
@global ||= InternalEventsCli::GlobalState.new
|
|
end
|
|
end
|
|
|
|
if $PROGRAM_NAME == __FILE__
|
|
begin
|
|
prompt = GitlabPrompt.new(TTY::Prompt.new)
|
|
|
|
Cli.new(prompt).run
|
|
rescue Interrupt
|
|
puts "\n"
|
|
end
|
|
end
|
|
|
|
# vim: ft=ruby
|