analytics: move to a class.
Global namespaces are good to avoid when possible.
This commit is contained in:
parent
798c342f4e
commit
0ef21ddf87
@ -204,7 +204,7 @@ class FormulaInstaller
|
|||||||
|
|
||||||
if formula.tap && !formula.tap.private?
|
if formula.tap && !formula.tap.private?
|
||||||
options = effective_build_options_for(formula).used_options.to_a.join(" ")
|
options = effective_build_options_for(formula).used_options.to_a.join(" ")
|
||||||
report_analytics_event("install", "#{formula.full_name} #{options}".strip)
|
Utils::Analytics.report_event("install", "#{formula.full_name} #{options}".strip)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@attempted << formula
|
@@attempted << formula
|
||||||
|
|||||||
@ -1,67 +1,73 @@
|
|||||||
def analytics_label
|
module Utils
|
||||||
@analytics_anonymous_prefix_and_os ||= begin
|
module Analytics
|
||||||
os = OS_VERSION
|
class << self
|
||||||
prefix = ", non-/usr/local" if HOMEBREW_PREFIX.to_s != "/usr/local"
|
def os_prefix_ci
|
||||||
ci = ", CI" if ENV["CI"]
|
@anonymous_os_prefix_ci ||= begin
|
||||||
"#{os}#{prefix}#{ci}"
|
os = OS_VERSION
|
||||||
end
|
prefix = ", non-/usr/local" if HOMEBREW_PREFIX.to_s != "/usr/local"
|
||||||
end
|
ci = ", CI" if ENV["CI"]
|
||||||
|
"#{os}#{prefix}#{ci}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def report_analytics(type, metadata = {})
|
def report(type, metadata = {})
|
||||||
return if ENV["HOMEBREW_NO_ANALYTICS"] || ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"]
|
return if ENV["HOMEBREW_NO_ANALYTICS"] || ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"]
|
||||||
|
|
||||||
args = %W[
|
args = %W[
|
||||||
--max-time 3
|
--max-time 3
|
||||||
--user-agent #{HOMEBREW_USER_AGENT_CURL}
|
--user-agent #{HOMEBREW_USER_AGENT_CURL}
|
||||||
-d v=1
|
-d v=1
|
||||||
-d tid=#{ENV["HOMEBREW_ANALYTICS_ID"]}
|
-d tid=#{ENV["HOMEBREW_ANALYTICS_ID"]}
|
||||||
-d cid=#{ENV["HOMEBREW_ANALYTICS_USER_UUID"]}
|
-d cid=#{ENV["HOMEBREW_ANALYTICS_USER_UUID"]}
|
||||||
-d aip=1
|
-d aip=1
|
||||||
-d an=#{HOMEBREW_PRODUCT}
|
-d an=#{HOMEBREW_PRODUCT}
|
||||||
-d av=#{HOMEBREW_VERSION}
|
-d av=#{HOMEBREW_VERSION}
|
||||||
-d t=#{type}
|
-d t=#{type}
|
||||||
]
|
]
|
||||||
metadata.each { |k, v| args << "-d" << "#{k}=#{v}" if k && v }
|
metadata.each { |k, v| args << "-d" << "#{k}=#{v}" if k && v }
|
||||||
|
|
||||||
# Send analytics. Don't send or store any personally identifiable information.
|
# Send analytics. Don't send or store any personally identifiable information.
|
||||||
# https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Analytics.md
|
# https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Analytics.md
|
||||||
# https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
|
# https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
|
||||||
# https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters
|
# https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters
|
||||||
if ENV["HOMEBREW_ANALYTICS_DEBUG"]
|
if ENV["HOMEBREW_ANALYTICS_DEBUG"]
|
||||||
puts Utils.popen_read ENV["HOMEBREW_CURL"],
|
puts Utils.popen_read ENV["HOMEBREW_CURL"],
|
||||||
"https://www.google-analytics.com/debug/collect",
|
"https://www.google-analytics.com/debug/collect",
|
||||||
*args
|
*args
|
||||||
else
|
else
|
||||||
pid = fork do
|
pid = fork do
|
||||||
exec ENV["HOMEBREW_CURL"],
|
exec ENV["HOMEBREW_CURL"],
|
||||||
"https://www.google-analytics.com/collect",
|
"https://www.google-analytics.com/collect",
|
||||||
"--silent", "--output", "/dev/null",
|
"--silent", "--output", "/dev/null",
|
||||||
*args
|
*args
|
||||||
|
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_exception(exception, options = {})
|
||||||
|
if exception.is_a?(BuildError) &&
|
||||||
|
exception.formula.tap && !exception.formula.tap.private?
|
||||||
|
report_event("BuildError", exception.formula.full_name)
|
||||||
|
end
|
||||||
|
|
||||||
|
fatal = options.fetch(:fatal, true) ? "1" : "0"
|
||||||
|
report(:exception,
|
||||||
|
:exd => exception.class.name,
|
||||||
|
:exf => fatal)
|
||||||
|
end
|
||||||
|
|
||||||
|
def report_screenview(screen_name)
|
||||||
|
report(:screenview, :cd => screen_name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
Process.detach pid
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def report_analytics_event(category, action, label = analytics_label, 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) &&
|
|
||||||
exception.formula.tap && !exception.formula.tap.private?
|
|
||||||
report_analytics_event("BuildError", exception.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
|
|
||||||
|
|||||||
@ -129,17 +129,17 @@ rescue Interrupt => e
|
|||||||
$stderr.puts # seemingly a newline is typical
|
$stderr.puts # seemingly a newline is typical
|
||||||
exit 130
|
exit 130
|
||||||
rescue BuildError => e
|
rescue BuildError => e
|
||||||
report_analytics_exception(e)
|
Utils::Analytics.report_exception(e)
|
||||||
e.dump
|
e.dump
|
||||||
exit 1
|
exit 1
|
||||||
rescue RuntimeError, SystemCallError => e
|
rescue RuntimeError, SystemCallError => e
|
||||||
report_analytics_exception(e)
|
Utils::Analytics.report_exception(e)
|
||||||
raise if e.message.empty?
|
raise if e.message.empty?
|
||||||
onoe e
|
onoe e
|
||||||
$stderr.puts e.backtrace if ARGV.debug?
|
$stderr.puts e.backtrace if ARGV.debug?
|
||||||
exit 1
|
exit 1
|
||||||
rescue Exception => e
|
rescue Exception => e
|
||||||
report_analytics_exception(e)
|
Utils::Analytics.report_exception(e)
|
||||||
onoe e
|
onoe e
|
||||||
if internal_cmd
|
if internal_cmd
|
||||||
$stderr.puts "#{Tty.white}Please report this bug:"
|
$stderr.puts "#{Tty.white}Please report this bug:"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user