mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
55 lines
1.7 KiB
Ruby
55 lines
1.7 KiB
Ruby
![]() |
|
||
|
def analytics_anonymous_prefix_and_os
|
||
|
@analytics_anonymous_prefix_and_os ||= begin
|
||
|
"#{OS_VERSION}, #{HOMEBREW_PREFIX.to_s.gsub(ENV["HOME"], "~")}"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def report_analytics(type, metadata={})
|
||
|
return unless ENV["HOMEBREW_ANALYTICS"]
|
||
|
|
||
|
metadata_args = metadata.map do |key, value|
|
||
|
["-d", "#{key}=#{value}"] if key && value
|
||
|
end.compact.flatten
|
||
|
|
||
|
# Send analytics. Anonymise the IP address (aip=1) and don't send or store
|
||
|
# any personally identifiable information.
|
||
|
# https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
|
||
|
# https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters
|
||
|
system "curl", "https://www.google-analytics.com/collect", "-d", "v=1",
|
||
|
"--silent", "--max-time", "3", "--output", "/dev/null",
|
||
|
"--user-agent", "#{HOMEBREW_USER_AGENT_CURL}",
|
||
|
"-d", "tid=#{ENV["HOMEBREW_ANALYTICS_ID"]}",
|
||
|
"-d", "cid=#{ENV["HOMEBREW_ANALYTICS_USER_UUID"]}",
|
||
|
"-d", "aip=1",
|
||
|
"-d", "an=Homebrew",
|
||
|
"-d", "av=#{HOMEBREW_VERSION}",
|
||
|
"-d", "t=#{type}",
|
||
|
*metadata_args
|
||
|
end
|
||
|
|
||
|
def report_analytics_event(category, action, label=analytics_anonymous_prefix_and_os, value=nil)
|
||
|
report_analytics(:event, {
|
||
|
:ec => category,
|
||
|
:ea => action,
|
||
|
:el => label,
|
||
|
:ev => value,
|
||
|
})
|
||
|
end
|
||
|
|
||
|
def report_analytics_exception(exception, options={})
|
||
|
if exception.is_a? BuildError
|
||
|
report_analytics_event("BuildError", e.formula.full_name)
|
||
|
end
|
||
|
|
||
|
fatal = options.fetch(:fatal, true) ? "1" : "0"
|
||
|
report_analytics(:exception, {
|
||
|
:exd => exception.class.name,
|
||
|
:exf => fatal,
|
||
|
})
|
||
|
end
|
||
|
|
||
|
def report_analytics_screenview(screen_name)
|
||
|
report_analytics(:screenview, :cd => screen_name)
|
||
|
end
|