96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "erb"
 | |
| 
 | |
| module Utils
 | |
|   module Analytics
 | |
|     class << self
 | |
|       def custom_prefix_label
 | |
|         "custom-prefix".freeze
 | |
|       end
 | |
| 
 | |
|       def clear_os_prefix_ci
 | |
|         return unless instance_variable_defined?(:@os_prefix_ci)
 | |
| 
 | |
|         remove_instance_variable(:@os_prefix_ci)
 | |
|       end
 | |
| 
 | |
|       def os_prefix_ci
 | |
|         @os_prefix_ci ||= begin
 | |
|           os = OS_VERSION
 | |
|           prefix = ", #{custom_prefix_label}" unless Homebrew.default_prefix?
 | |
|           ci = ", CI" if ENV["CI"]
 | |
|           "#{os}#{prefix}#{ci}"
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       def report(type, metadata = {})
 | |
|         return if ENV["HOMEBREW_NO_ANALYTICS"] || ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"]
 | |
| 
 | |
|         args = []
 | |
| 
 | |
|         # do not load .curlrc unless requested (must be the first argument)
 | |
|         args << "-q" unless ENV["HOMEBREW_CURLRC"]
 | |
| 
 | |
|         args += %W[
 | |
|           --max-time 3
 | |
|           --user-agent #{HOMEBREW_USER_AGENT_CURL}
 | |
|           --data v=1
 | |
|           --data aip=1
 | |
|           --data t=#{type}
 | |
|           --data tid=#{ENV["HOMEBREW_ANALYTICS_ID"]}
 | |
|           --data cid=#{ENV["HOMEBREW_ANALYTICS_USER_UUID"]}
 | |
|           --data an=#{HOMEBREW_PRODUCT}
 | |
|           --data av=#{HOMEBREW_VERSION}
 | |
|         ]
 | |
|         metadata.each do |key, value|
 | |
|           next unless key
 | |
|           next unless value
 | |
| 
 | |
|           key = ERB::Util.url_encode key
 | |
|           value = ERB::Util.url_encode value
 | |
|           args << "--data" << "#{key}=#{value}"
 | |
|         end
 | |
| 
 | |
|         # Send analytics. Don't send or store any personally identifiable information.
 | |
|         # https://docs.brew.sh/Analytics
 | |
|         # https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
 | |
|         # https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters
 | |
|         if ENV["HOMEBREW_ANALYTICS_DEBUG"]
 | |
|           url = "https://www.google-analytics.com/debug/collect"
 | |
|           puts "#{ENV["HOMEBREW_CURL"]} #{args.join(" ")} #{url}"
 | |
|           puts Utils.popen_read ENV["HOMEBREW_CURL"], *args, url
 | |
|         else
 | |
|           pid = fork do
 | |
|             exec ENV["HOMEBREW_CURL"],
 | |
|               *args,
 | |
|               "--silent", "--output", "/dev/null",
 | |
|               "https://www.google-analytics.com/collect"
 | |
|           end
 | |
|           Process.detach pid
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       def report_event(category, action, label = os_prefix_ci, value = nil)
 | |
|         report(:event,
 | |
|           ec: category,
 | |
|           ea: action,
 | |
|           el: label,
 | |
|           ev: value)
 | |
|       end
 | |
| 
 | |
|       def report_build_error(exception)
 | |
|         return unless exception.formula.tap
 | |
|         return unless exception.formula.tap.installed?
 | |
|         return if exception.formula.tap.private?
 | |
| 
 | |
|         action = exception.formula.full_name
 | |
|         if (options = exception.options&.to_a&.join(" "))
 | |
|           action = "#{action} #{options}".strip
 | |
|         end
 | |
|         report_event("BuildError", action)
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| require "extend/os/analytics"
 | 
