| 
									
										
										
										
											2016-08-09 19:18:43 +01:00
										 |  |  | require "erb" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       def report(type, metadata = {}) | 
					
						
							|  |  |  |         return if ENV["HOMEBREW_NO_ANALYTICS"] || ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |         args = %W[
 | 
					
						
							|  |  |  |           --max-time 3
 | 
					
						
							|  |  |  |           --user-agent #{HOMEBREW_USER_AGENT_CURL} | 
					
						
							| 
									
										
										
										
											2016-08-09 19:17:56 +01:00
										 |  |  |           --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} | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |         ] | 
					
						
							| 
									
										
										
										
											2016-08-09 19:18:43 +01:00
										 |  |  |         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 | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |         # Send analytics. Don't send or store any personally identifiable information. | 
					
						
							| 
									
										
										
										
											2016-09-19 20:20:08 +01:00
										 |  |  |         # https://github.com/Homebrew/brew/blob/master/docs/Analytics.md | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |         # 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"] | 
					
						
							| 
									
										
										
										
											2016-08-08 09:55:23 +01:00
										 |  |  |           url = "https://www.google-analytics.com/debug/collect" | 
					
						
							|  |  |  |           puts "#{ENV["HOMEBREW_CURL"]} #{url} #{args.join(" ")}" | 
					
						
							|  |  |  |           puts Utils.popen_read ENV["HOMEBREW_CURL"], url, *args | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |         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 | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       def report_event(category, action, label = os_prefix_ci, value = nil) | 
					
						
							|  |  |  |         report(:event, | 
					
						
							| 
									
										
										
										
											2016-09-17 15:32:44 +01:00
										 |  |  |           ec: category, | 
					
						
							|  |  |  |           ea: action, | 
					
						
							|  |  |  |           el: label, | 
					
						
							|  |  |  |           ev: value) | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       def report_exception(exception, options = {}) | 
					
						
							|  |  |  |         if exception.is_a?(BuildError) && | 
					
						
							| 
									
										
										
										
											2016-12-11 13:42:56 +00:00
										 |  |  |            exception.formula.tap && | 
					
						
							|  |  |  |            exception.formula.tap.installed? && | 
					
						
							|  |  |  |            !exception.formula.tap.private? | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |           report_event("BuildError", exception.formula.full_name) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |         fatal = options.fetch(:fatal, true) ? "1" : "0" | 
					
						
							|  |  |  |         report(:exception, | 
					
						
							| 
									
										
										
										
											2016-09-17 15:32:44 +01:00
										 |  |  |           exd: exception.class.name, | 
					
						
							|  |  |  |           exf: fatal) | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       def report_screenview(screen_name) | 
					
						
							| 
									
										
										
										
											2016-09-17 15:32:44 +01:00
										 |  |  |         report(:screenview, cd: screen_name) | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | end |