class Calabash::Android::UsageTracker

Constants

CALABASH_ANDROID

@!visibility private

CALABASH_IOS

@!visibility private

DATA_VERSION

@!visibility private

OSX

@!visibility private

ROUTE

@!visibility private

WINDOWS

@!visibility private

Public Class Methods

disable_usage_tracking() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 16
def self.disable_usage_tracking
  @@track_usage = false
end
enable_usage_tracking() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 11
def self.enable_usage_tracking
  @@track_usage = true
end

Private Class Methods

track_usage?() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 74
def self.track_usage?
  @@track_usage && !self.xtc?
end
xtc?() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 79
def self.xtc?
  ENV["XAMARIN_TEST_CLOUD"] == "1"
end

Public Instance Methods

post_usage() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 21
def post_usage
  if Calabash::Android::UsageTracker.track_usage? &&
      info_we_are_allowed_to_track != "none"
    begin
      HTTPClient.post(ROUTE, info)
    rescue => e
      message = %Q{ERROR: Could not post usage tracking information:#{$-0}#{e}}
      Calabash::Android::Logging.log_to_file(message)
    end
  end
end
post_usage_async() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 34
def post_usage_async
  t = Thread.new do
    post_usage
  end

  m = Thread.current

  Thread.new do
    loop do
      unless t.alive?
        break
      end

      unless m.alive?
        t.kill
        break
      end
    end
  end
  nil
end

Private Instance Methods

host_os() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 102
def host_os
  @host_os ||= lambda do
    if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
      WINDOWS
    else
      `uname -s`.chomp
    end
  end.call
end
host_os_version() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 113
def host_os_version
  @host_os_version ||= lambda do
    if host_os == WINDOWS
      `ver`.chomp
    elsif host_os == OSX
      `sw_vers -productVersion`.chomp
    else
      `uname -r`.chomp
    end
  end.call
end
info() click to toggle source

@!visibility private

Collect a hash of usage info.

# File lib/calabash-android/usage_tracker.rb, line 148
def info

  allowed = info_we_are_allowed_to_track

  if allowed == "none"
    raise RuntimeError,
      "This method should not be called if the user does not want to be tracked."
  end

  # Events only
  hash = {
    :event_name => "session",
    :data_version => DATA_VERSION,
    :distinct_id => user_id
  }

  if allowed == "system_info"
    hash.merge!(
      {
        :platform => CALABASH_ANDROID,
        :host_os => host_os,
        :host_os_version => host_os_version,
        :irb => irb?,
        :ruby_version => ruby_version,
        :used_bundle_exec => used_bundle_exec?,
        :used_cucumber => used_cucumber?,

        :version => Calabash::Android::VERSION,

        :ci => Calabash::Android::Environment.ci?,
        :jenkins => Calabash::Android::Environment.jenkins?,
        :travis => Calabash::Android::Environment.travis?,
        :circle_ci => Calabash::Android::Environment.circle_ci?,
        :gitlab => Calabash::Android::Environment.gitlab?,
        :teamcity => Calabash::Android::Environment.teamcity?
      }
    )
  end

  hash
end
info_we_are_allowed_to_track() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 69
def info_we_are_allowed_to_track
  preferences.usage_tracking
end
irb?() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 126
def irb?
  $0 == "irb"
end
preferences() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 59
def preferences
  Calabash::Android::Preferences.new
end
ruby_version() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 131
def ruby_version
  @ruby_version ||= `#{RbConfig.ruby} -v`.chomp
end
used_bundle_exec?() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 136
def used_bundle_exec?
  Object.const_defined?(:Bundler)
end
used_cucumber?() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 141
def used_cucumber?
  Object.const_defined?(:Cucumber)
end
user_id() click to toggle source

@!visibility private

# File lib/calabash-android/usage_tracker.rb, line 64
def user_id
  preferences.user_id
end