diff --git a/lib/travis/api/app/middleware/user_agent_tracker.rb b/lib/travis/api/app/middleware/user_agent_tracker.rb index cba98cf3..d7d582fa 100644 --- a/lib/travis/api/app/middleware/user_agent_tracker.rb +++ b/lib/travis/api/app/middleware/user_agent_tracker.rb @@ -37,27 +37,14 @@ class Travis::Api::App end def mark_travis(agent) - os, *rest = agent.application.comment - ruby, rubygems, command = "unknown", "unknown", nil - - rest.each do |comment| - case comment - when /^Ruby (\d\.\d.\d)/ then ruby = $1 - when /^RubyGems (.+)$/ then rubygems = $1 - when /^command (.+)$/ then command = $1 - end - end - - # "Ubuntu 12.04 like Linux" => "linux.ubuntu.12.04" - if os =~ /^(.+) (\S+) like (\S+)$/ - os = "#{$3}.#{$1}.#{$2[/\d+\.\d+/]}" - end + command = agent.application.comment.detect { |c| c.start_with? "command " } if command - mark(:cli, version: agent.version, ruby: ruby, rubygems: rubygems, command: command, os: os) + mark(:cli, :version, agent.version) + mark(:cli, command.sub(' ', '.')) else # only track ruby version and library version for non-cli usage - mark(:script, :ruby, :travis, version: agent.version, ruby: ruby) + mark(:script, :ruby, :travis, :version, agent.version) end end @@ -66,19 +53,9 @@ class Travis::Api::App mark(:unknown) end - def track_key(string) - string.to_s.downcase.gsub(/[^a-z0-9\-\.]+/, '_') - end - def mark(*keys) - key = "api.user_agent" - keys.each do |subkey| - if subkey.is_a? Hash - subkey.each_pair { |k, v| ::Metriks.meter("#{key}.#{track_key(k)}.#{track_key(v)}").mark } - else - ::Metriks.meter(key << "." << track_key(subkey)).mark - end - end + key = "api.user_agent." << keys.map { |k| k.to_s.downcase.gsub(/[^a-z0-9\-\.]+/, '_') }.join('.') + ::Metriks.meter(key).mark end end end diff --git a/spec/unit/middleware/user_agent_tracker_spec.rb b/spec/unit/middleware/user_agent_tracker_spec.rb index 7fbe0c29..1e5ebe00 100644 --- a/spec/unit/middleware/user_agent_tracker_spec.rb +++ b/spec/unit/middleware/user_agent_tracker_spec.rb @@ -35,13 +35,11 @@ describe Travis::Api::App::Middleware::UserAgentTracker do let(:agent) { "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.36 Safari/537.36" } specify 'without X-User-Agent' do - expect_meter("api.user_agent.browser") expect_meter("api.user_agent.browser.unknown") get end specify 'with X-User-Agent' do - expect_meter("api.user_agent.browser") expect_meter("api.user_agent.browser.travis-web") get('HTTP_X_USER_AGENT' => 'travis-web') end @@ -50,7 +48,6 @@ describe Travis::Api::App::Middleware::UserAgentTracker do context 'console' do let(:agent) { 'curl' } specify do - expect_meter("api.user_agent.console") expect_meter("api.user_agent.console.curl") get end @@ -59,8 +56,6 @@ describe Travis::Api::App::Middleware::UserAgentTracker do context 'travis-api-wrapper' do let(:agent) { 'travis-api-wrapper - v0.01 - (cmaujean@gmail.com)' } specify do - expect_meter("api.user_agent.script") - expect_meter("api.user_agent.script.node_js") expect_meter("api.user_agent.script.node_js.travis-api-wrapper") get end @@ -69,8 +64,6 @@ describe Travis::Api::App::Middleware::UserAgentTracker do context 'TravisPy' do let(:agent) { 'TravisPy' } specify do - expect_meter("api.user_agent.script") - expect_meter("api.user_agent.script.python") expect_meter("api.user_agent.script.python.travispy") get end @@ -79,8 +72,6 @@ describe Travis::Api::App::Middleware::UserAgentTracker do context 'Ruby' do let(:agent) { 'Ruby' } specify do - expect_meter("api.user_agent.script") - expect_meter("api.user_agent.script.ruby") expect_meter("api.user_agent.script.ruby.vanilla") get end @@ -89,8 +80,6 @@ describe Travis::Api::App::Middleware::UserAgentTracker do context 'Faraday' do let(:agent) { 'Faraday' } specify do - expect_meter("api.user_agent.script") - expect_meter("api.user_agent.script.ruby") expect_meter("api.user_agent.script.ruby.vanilla") get end @@ -99,11 +88,7 @@ describe Travis::Api::App::Middleware::UserAgentTracker do context 'travis.rb' do let(:agent) { 'Travis/1.6.8 (Mac OS X 10.9.2 like Darwin; Ruby 2.1.1p42; RubyGems 2.0.14) Faraday/0.8.9 Typhoeus/0.6.7' } specify do - expect_meter("api.user_agent.script") - expect_meter("api.user_agent.script.ruby") - expect_meter("api.user_agent.script.ruby.travis") expect_meter("api.user_agent.script.ruby.travis.version.1.6.8") - expect_meter("api.user_agent.script.ruby.travis.ruby.2.1.1") get end end @@ -111,12 +96,8 @@ describe Travis::Api::App::Middleware::UserAgentTracker do context 'Travis CLI' do let(:agent) { 'Travis/1.6.8 (Mac OS X 10.10.2 like Darwin; Ruby 2.1.1; RubyGems 2.0.14; command whoami) Faraday/0.8.9 Typhoeus/0.6.7' } specify do - expect_meter("api.user_agent.cli") expect_meter("api.user_agent.cli.version.1.6.8") - expect_meter("api.user_agent.cli.ruby.2.1.1") - expect_meter("api.user_agent.cli.rubygems.2.0.14") expect_meter("api.user_agent.cli.command.whoami") - expect_meter("api.user_agent.cli.os.darwin.mac_os_x.10.10") get end end