| 
									
										
										
										
											2016-08-09 19:18:43 +01:00
										 |  |  | require "erb" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  | module Utils | 
					
						
							|  |  |  |   module Analytics | 
					
						
							|  |  |  |     class << self | 
					
						
							| 
									
										
										
										
											2018-09-06 16:58:17 -07:00
										 |  |  |       def custom_prefix_label | 
					
						
							| 
									
										
										
										
											2018-09-18 09:48:45 -07:00
										 |  |  |         "custom-prefix".freeze | 
					
						
							| 
									
										
										
										
											2018-09-06 16:58:17 -07:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-07 16:14:55 +00:00
										 |  |  |       def clear_os_prefix_ci | 
					
						
							|  |  |  |         return unless instance_variable_defined?(:@os_prefix_ci) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-07 16:14:55 +00:00
										 |  |  |         remove_instance_variable(:@os_prefix_ci) | 
					
						
							| 
									
										
										
										
											2017-08-24 01:44:13 +05:30
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       def os_prefix_ci | 
					
						
							| 
									
										
										
										
											2018-03-07 16:14:55 +00:00
										 |  |  |         @os_prefix_ci ||= begin | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |           os = OS_VERSION | 
					
						
							| 
									
										
										
										
											2018-09-06 16:58:17 -07:00
										 |  |  |           prefix = ", #{custom_prefix_label}" if HOMEBREW_PREFIX.to_s != Homebrew::DEFAULT_PREFIX | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |           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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-14 18:50:03 +08:00
										 |  |  |         args = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # do not load .curlrc unless requested (must be the first argument) | 
					
						
							|  |  |  |         args << "-q" unless ENV["HOMEBREW_CURLRC"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         args += %W[
 | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |           --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 | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-09 19:18:43 +01:00
										 |  |  |           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. | 
					
						
							| 
									
										
										
										
											2018-02-22 19:46:58 +00:00
										 |  |  |         # https://docs.brew.sh/Analytics | 
					
						
							| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2018-09-14 18:50:03 +08:00
										 |  |  |           puts "#{ENV["HOMEBREW_CURL"]} #{args.join(" ")} #{url}" | 
					
						
							|  |  |  |           puts Utils.popen_read ENV["HOMEBREW_CURL"], *args, url | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |         else | 
					
						
							|  |  |  |           pid = fork do | 
					
						
							|  |  |  |             exec ENV["HOMEBREW_CURL"], | 
					
						
							| 
									
										
										
										
											2018-09-14 18:50:03 +08:00
										 |  |  |               *args, | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |               "--silent", "--output", "/dev/null", | 
					
						
							| 
									
										
										
										
											2018-09-14 18:50:03 +08:00
										 |  |  |               "https://www.google-analytics.com/collect" | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |           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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-07 16:34:54 +01:00
										 |  |  |       def report_build_error(exception) | 
					
						
							|  |  |  |         return unless exception.formula.tap | 
					
						
							|  |  |  |         return unless exception.formula.tap.installed? | 
					
						
							|  |  |  |         return if exception.formula.tap.private? | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-09 14:53:01 +03:00
										 |  |  |         action = exception.formula.full_name | 
					
						
							| 
									
										
										
										
											2018-10-13 15:09:03 -07:00
										 |  |  |         if (options = exception.options&.to_a&.join(" ")) | 
					
						
							| 
									
										
										
										
											2017-06-09 14:53:01 +03:00
										 |  |  |           action = "#{action} #{options}".strip | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         report_event("BuildError", action) | 
					
						
							| 
									
										
										
										
											2016-05-03 14:21:08 +01:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-03-28 09:16:40 +01:00
										 |  |  | end | 
					
						
							| 
									
										
										
										
											2018-09-06 16:58:17 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | require "extend/os/analytics" |