@@ -11,15 +11,33 @@ class UserAgentTracker < Middleware
1111 "Opera" , "Mozilla"
1212 ]
1313
14+ PATHS_IGNORED = [
15+ '/uptime'
16+ ]
17+
18+ attr_reader :metrik_prefix
19+
20+ before do
21+ @metrik_prefix = if version = request . env [ 'HTTP_TRAVIS_API_VERSION' ] . to_s . match ( /^\d +(\. \d +)*/ )
22+ "api.v#{ version } "
23+ else
24+ "api.v2"
25+ end
26+ end
27+
1428 before ( agent : /^$/ ) do
15- ::Metriks . meter ( "api.v2.user_agent.missing" ) . mark
29+ return if PATHS_IGNORED . include? ( request . path )
30+ ::Metriks . meter ( "#{ metrik_prefix } .user_agent.missing" ) . mark
1631 halt ( 400 , "error" => "missing User-Agent header" ) if Travis ::Features . feature_active? ( :require_user_agent )
1732 end
1833
1934 before ( agent : /^.+$/ ) do
35+ return if PATHS_IGNORED . include? ( request . path )
2036 agent = UserAgent . parse ( request . user_agent )
2137 case agent . browser
22- when *WEB_BROWSERS then mark_browser
38+ when *WEB_BROWSERS
39+ # if X-User-Agent header is set, honor that instead
40+ mark :browser , UserAgent . parse ( env [ 'HTTP_X_USER_AGENT' ] || request . user_agent ) . browser
2341 when "curl" , "Wget" then mark ( :console , agent . browser )
2442 when "travis-api-wrapper" then mark ( :script , :node_js , agent . browser )
2543 when "TravisPy" then mark ( :script , :python , agent . browser )
@@ -30,12 +48,6 @@ class UserAgentTracker < Middleware
3048 end
3149 end
3250
33- def mark_browser
34- # allows a JavaScript Client to set X-User-Agent, for instance to "travis-web" in travis-web
35- x_agent = UserAgent . parse ( env [ 'HTTP_X_USER_AGENT' ] || 'unknown' ) . browser
36- mark ( :browser , x_agent )
37- end
38-
3951 def mark_travis ( agent )
4052 command = agent . application . comment . detect { |c | c . start_with? "command " } if agent . application . comment
4153
@@ -54,7 +66,7 @@ def mark_unknown
5466 end
5567
5668 def mark ( *keys )
57- key = "api.v2 .user_agent." << keys . map { |k | k . to_s . downcase . gsub ( /[^a-z0-9\- \. ]+/ , '_' ) } . join ( '.' )
69+ key = "#{ metrik_prefix } .user_agent." << keys . map { |k | k . to_s . downcase . gsub ( /[^a-z0-9\- \. ]+/ , '_' ) } . join ( '.' )
5870 ::Metriks . meter ( key ) . mark
5971 end
6072 end
0 commit comments