Skip to content

Commit 7f1271e

Browse files
Merge pull request #14 from statsig-io/1-24-6
v1.24.6
2 parents 65f6821 + 226fa03 commit 7f1271e

37 files changed

+589
-426
lines changed

.github/workflows/build-and-test.yml

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ on:
88
schedule:
99
- cron: '0 0,15 * * *'
1010

11+
env:
12+
COVERAGE: true
13+
COVERAGE_FORMAT: 'cobertura'
14+
1115
jobs:
1216
test:
1317
runs-on: ubuntu-latest
@@ -22,7 +26,9 @@ jobs:
2226
ruby-version: ${{ matrix.version }}
2327

2428
- name: Install dependencies
25-
run: bundle install
29+
run: |
30+
bundle config set --local without 'rubocop'
31+
bundle install
2632
2733
# If you add a new dependency, be sure to run `bundle exec srb rbi update`
2834
- name: Typecheck
@@ -33,3 +39,29 @@ jobs:
3339
env:
3440
test_api_key: ${{ secrets.SDK_CONSISTENCY_TEST_COMPANY_API_KEY }}
3541
test_client_key: ${{ secrets.KONG_CLIENT_SDK_KEY }}
42+
43+
- name: Run tests in parallel
44+
run: bundle exec rake parallel:test
45+
env:
46+
test_api_key: ${{ secrets.SDK_CONSISTENCY_TEST_COMPANY_API_KEY }}
47+
test_client_key: ${{ secrets.KONG_CLIENT_SDK_KEY }}
48+
49+
- name: Code Coverage Report
50+
uses: irongut/CodeCoverageSummary@v1.3.0
51+
with:
52+
filename: coverage/coverage.xml
53+
badge: true
54+
fail_below_min: true
55+
format: markdown
56+
hide_branch_rate: false
57+
hide_complexity: true
58+
indicators: true
59+
output: both
60+
thresholds: '80 90'
61+
62+
- name: Add Coverage PR Comment
63+
uses: marocchino/sticky-pull-request-comment@v2
64+
if: github.event_name == 'pull_request'
65+
with:
66+
recreate: true
67+
path: code-coverage-results.md

.rubocop.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Metrics/ClassLength:
2+
Enabled: false
3+
Metrics/MethodLength:
4+
Enabled: false
5+
Metrics/BlockLength:
6+
Enabled: false
7+
Metrics/AbcSize:
8+
Enabled: false
9+
Metrics/CyclomaticComplexity:
10+
Enabled: false
11+
Metrics/PerceivedComplexity:
12+
Enabled: false
13+
Style/FrozenStringLiteralComment:
14+
Enabled: false
15+
Style/Documentation:
16+
Enabled: false
17+
Style/IfUnlessModifier:
18+
Enabled: false

Rakefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
require 'rake/testtask'
2+
require 'parallel_tests/tasks'
23

34
desc 'Run unit tests'
45
Rake::TestTask.new(:test) do |t|
56
t.libs << 'lib'
67
t.libs << 'test'
7-
t.test_files = FileList['test/**/*.rb'].exclude('test/mock_server.rb')
8+
t.test_files = FileList['test/**/*.rb'].exclude('test/mock_server.rb', 'test/dummy_data_adapter.rb')
89
t.verbose = true
9-
end
10+
end

config/database.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
test:
2+
database: statsig_test<%= ENV['TEST_ENV_NUMBER'] %>

lib/evaluator.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,16 +447,18 @@ def get_value_from_ua(user, field)
447447
ua = get_value_from_user(user, 'userAgent')
448448
return nil unless ua.is_a?(String)
449449

450-
parsed = @ua_parser.parse ua
451-
os = parsed.os
452450
case field.downcase
453451
when 'os_name', 'osname'
452+
os = @ua_parser.parse_os(ua)
454453
return os&.family
455454
when 'os_version', 'osversion'
455+
os = @ua_parser.parse_os(ua)
456456
return os&.version unless os&.version.nil?
457457
when 'browser_name', 'browsername'
458+
parsed = @ua_parser.parse_ua(ua)
458459
return parsed.family
459460
when 'browser_version', 'browserversion'
461+
parsed = @ua_parser.parse_ua(ua)
460462
return parsed.version.to_s
461463
else
462464
nil

lib/layer.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# typed: false
22

3+
require 'sorbet-runtime'
34
##
45
# Contains the current values from Statsig.
56
# Will contain layer default values for all shared parameters in that layer.

lib/network.rb

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ def initialize(server_secret, options, backoff_mult = 10)
3333
@local_mode = options.local_mode
3434
@timeout = options.network_timeout
3535
@backoff_multiplier = backoff_mult
36+
@post_logs_retry_limit = options.post_logs_retry_limit
3637
@session_id = SecureRandom.uuid
3738
end
3839

@@ -57,18 +58,19 @@ def post_helper(endpoint, body, retries = 0, backoff = 1)
5758
if @timeout
5859
http = http.timeout(@timeout)
5960
end
61+
backoff_adjusted = backoff > 10 ? backoff += Random.rand(10) : backoff # to deter overlap
6062
begin
6163
res = http.post(@api + endpoint, body: body)
6264
rescue StandardError => e
6365
## network error retry
6466
return nil, e unless retries > 0
65-
sleep backoff
67+
sleep backoff_adjusted
6668
return post_helper(endpoint, body, retries - 1, backoff * @backoff_multiplier)
6769
end
6870
return res, nil if res.status.success?
6971
return nil, NetworkError.new("Got an exception when making request to #{@api + endpoint}: #{res.to_s}", res.status.to_i) unless retries > 0 && $retry_codes.include?(res.code)
7072
## status code retry
71-
sleep backoff
73+
sleep backoff_adjusted
7274
post_helper(endpoint, body, retries - 1, backoff * @backoff_multiplier)
7375
end
7476

@@ -97,7 +99,7 @@ def get_config(user, dynamic_config_name)
9799
def post_logs(events)
98100
begin
99101
json_body = JSON.generate({ 'events' => events, 'statsigMetadata' => Statsig.get_statsig_metadata })
100-
post_helper('log_event', json_body, 5)
102+
post_helper('log_event', json_body, @post_logs_retry_limit)
101103
rescue
102104
end
103105
end

lib/statsig.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def self.get_layer_with_exposure_logging_disabled(user, layer_name)
148148
@shared_instance&.get_layer(user, layer_name, StatsigDriver::GetLayerOptions.new(log_exposure: false))
149149
end
150150

151-
sig { params(user: StatsigUser, layer_name: String, parameter_name: String).returns(Layer) }
151+
sig { params(user: StatsigUser, layer_name: String, parameter_name: String).void }
152152
##
153153
# Logs an exposure event for the parameter in the given layer
154154
#
@@ -227,7 +227,7 @@ def self.get_client_initialize_response(user)
227227
def self.get_statsig_metadata
228228
{
229229
'sdkType' => 'ruby-server',
230-
'sdkVersion' => '1.24.5',
230+
'sdkVersion' => '1.24.6',
231231
}
232232
end
233233

lib/statsig_driver.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,6 @@ def log_event(user, event_name, value = nil, metadata = nil)
170170
event.user = user
171171
event.value = value
172172
event.metadata = metadata
173-
event.statsig_metadata = Statsig.get_statsig_metadata
174173
@logger.log_event(event)
175174
})
176175
end
@@ -199,6 +198,7 @@ def override_config(config_name, config_value)
199198
# @return [Hash]
200199
def get_client_initialize_response(user)
201200
@err_boundary.capture(-> {
201+
validate_user(user)
202202
normalize_user(user)
203203
@evaluator.get_client_initialize_response(user)
204204
}, -> { nil })

lib/statsig_event.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
# typed: true
22
class StatsigEvent
3-
attr_accessor :value
4-
attr_accessor :metadata
5-
attr_accessor :statsig_metadata
6-
attr_accessor :secondary_exposures
3+
attr_accessor :value, :metadata, :statsig_metadata, :secondary_exposures
74
attr_reader :user
85

96
def initialize(event_name)
@@ -13,6 +10,7 @@ def initialize(event_name)
1310
@secondary_exposures = nil
1411
@user = nil
1512
@time = (Time.now.to_f * 1000).to_i
13+
@statsig_metadata = Statsig.get_statsig_metadata
1614
end
1715

1816
def user=(value)

0 commit comments

Comments
 (0)