/
analytics.rb
83 lines (75 loc) 路 2.59 KB
/
analytics.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
require "erb"
module Utils
module Analytics
class << self
def os_prefix_ci
@anonymous_os_prefix_ci ||= begin
os = OS_VERSION
prefix = ", non-/usr/local" if HOMEBREW_PREFIX.to_s != "/usr/local"
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 = %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.
# http://docs.brew.sh/Analytics.html
# 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"]} #{url} #{args.join(" ")}"
puts Utils.popen_read ENV["HOMEBREW_CURL"], url, *args
else
pid = fork do
exec ENV["HOMEBREW_CURL"],
"https://www.google-analytics.com/collect",
"--silent", "--output", "/dev/null",
*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.installed? &&
!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
end