Sha256: 3443d3f5cc7ca61ac9eb3257a5a85836adc79dcea24e46d22b74642a28a9997f

Contents?: true

Size: 1.44 KB

Versions: 362

Compression:

Stored size: 1.44 KB

Contents

# frozen_string_literal: true

desc 'Benchmark the get_treatment method call in 4 threads'

# Usage:
# rake concurrent_benchmark api_key=YOUR_API_KEY base_uri=YOUR_API_BASE_URI
# [iterations=NUMBER_OF_ITERATIONS] [user_id=A_USER_ID] [feature_id=A_FEATURE_ID]
task :concurrent_benchmark do
  require 'benchmark'
  require 'splitclient-rb'

  usage_message = 'Usage: rake concurrent_benchmark api_key=YOUR_API_KEY base_uri=YOUR_API_BASE_URI \
  [iterations=NUMBER_OF_ITERATIONS] [user_id=A_USER_ID] [feature_id=A_FEATURE_ID]'

  if validate_params
    execute
  else
    p usage_message
  end
end

def validate_params
  !ENV['api_key'].nil? && !ENV['base_uri'].nil?
end

def split_client
  api_key = ENV['api_key'].nil? ? 'fake_api_key' : ENV['api_key']
  base_uri = ENV['base_uri'].nil? ? 'fake/api/' : ENV['base_uri']
  SplitIoClient::SplitFactory.new(api_key, base_uri: base_uri, logger: Logger.new('/dev/null').client)
end

def times_per_thread
  iterations = ENV['iterations'].nil? ? 1_000_000 : ENV['iterations'].to_i
  iterations / 4
end

def feature_id
  ENV['feature_id'].nil? ? 'sample_feature' : ENV['feature_id']
end

def user_id
  ENV['user_id'].nil? ? 'fake_id_1' : ENV['user_id']
end

def execute
  threads = []
  puts Benchmark.measure do
    4.times do |_i|
      threads << Thread.new do
        times_per_thread.times do
          split_client.get_treatment user_id, feature_id, attr: 123
        end
      end
    end
    threads.map(&:join)
  end
end

Version data entries

362 entries across 362 versions & 1 rubygems

Version Path
splitclient-rb-8.5.0-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.5.0 tasks/benchmark_get_treatment.rake
splitclient-rb-8.5.0.pre.rc1-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.5.0.pre.rc1 tasks/benchmark_get_treatment.rake
splitclient-rb-8.4.1.pre.rc1-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.4.1.pre.rc1 tasks/benchmark_get_treatment.rake
splitclient-rb-8.4.0-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.4.0 tasks/benchmark_get_treatment.rake
splitclient-rb-8.4.0.pre.rc1-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.4.0.pre.rc1 tasks/benchmark_get_treatment.rake
splitclient-rb-8.4.0.rc.1-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.4.0.rc.1 tasks/benchmark_get_treatment.rake
splitclient-rb-8.3.2.pre.rc2-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.3.2.pre.rc2 tasks/benchmark_get_treatment.rake
splitclient-rb-8.3.2.pre.rc1-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.3.2.pre.rc1 tasks/benchmark_get_treatment.rake
splitclient-rb-8.3.1-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.3.1 tasks/benchmark_get_treatment.rake
splitclient-rb-8.3.1.pre.rc1-java tasks/benchmark_get_treatment.rake
splitclient-rb-8.3.1.pre.rc1 tasks/benchmark_get_treatment.rake