posthog-ruby 3.15.1 → 3.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: edb7fbf2f848ccb05f6a79f9c3429d395ac39cde5fdd1f83c59d97990231cbc8
4
- data.tar.gz: bf96ccaccf1cf2117b502311895d95eb32de786b005809bf1d03471c67fc3920
3
+ metadata.gz: 87c4c21f1799cc12f7e4792f728194091a4e3abfe28fa26315469c43cbefd6ba
4
+ data.tar.gz: 4fa4b2455dcf53c3e805616af1e5eb5ae266729f90832f4c4491147c6626f71d
5
5
  SHA512:
6
- metadata.gz: a60d451d311741d7d3407515a8b05a0029a24d098445aae51fe4c4d51ab894c4005c0f78267f4d5717681a258ef83091e62e508d8f902068a6e9321ceead274b
7
- data.tar.gz: 01b522405e918921a9667a1cf47271b314cf55cada33687ea31d8c2ed04239f602f61adf35c891920691c25a10d0ac6ad76c816ef2160b3ccfaf6208e564baa1
6
+ metadata.gz: b1fce8fb104ff14b8564649222d729fdd6feda8d3382119eee8c034663108edb972932aaee7d17de6d87911816986e55236a554ce19ba107e032bc04f4fdab7d
7
+ data.tar.gz: b95fecee03f14f695410f76230e8e1284286c4835cd8f4c2ef66779fc57a27bda7e7c3e892a989207ebd85d1f9531a6034a041dade066d776707ae03c7227661
@@ -36,8 +36,9 @@ module PostHog
36
36
  # @param feature_flag_request_timeout_seconds [Integer] Timeout for feature flag requests.
37
37
  # @param on_error [Proc, nil] Callback invoked as `on_error.call(status, error)`.
38
38
  # @param flag_definition_cache_provider [Object, nil] Optional {FlagDefinitionCacheProvider} implementation.
39
- # @param feature_flag_request_max_retries [Integer, nil] Retries after a transient network error on a flag
40
- # request. Defaults to {Defaults::FeatureFlags::FLAG_REQUEST_MAX_RETRIES}. Set to 0 to disable retrying.
39
+ # @param feature_flag_request_max_retries [Integer, nil] Retries after a transient network error or retryable
40
+ # HTTP response status on a flag request. Defaults to {Defaults::FeatureFlags::FLAG_REQUEST_MAX_RETRIES}.
41
+ # Set to 0 to disable retrying.
41
42
  def initialize(
42
43
  polling_interval,
43
44
  personal_api_key,
@@ -1234,7 +1235,12 @@ module PostHog
1234
1235
  data['token'] = @project_api_key
1235
1236
  req.body = data.to_json
1236
1237
 
1237
- _request(uri, req, @feature_flag_request_timeout_seconds)
1238
+ _request(
1239
+ uri,
1240
+ req,
1241
+ @feature_flag_request_timeout_seconds,
1242
+ retry_status_codes: RETRYABLE_FLAGS_REQUEST_STATUS_CODES
1243
+ )
1238
1244
  end
1239
1245
 
1240
1246
  def _request_remote_config_payload(flag_key)
@@ -1256,14 +1262,15 @@ module PostHog
1256
1262
  Errno::ECONNRESET,
1257
1263
  EOFError
1258
1264
  ].freeze
1265
+ RETRYABLE_FLAGS_REQUEST_STATUS_CODES = [502, 504].freeze
1259
1266
 
1260
- def _request(uri, request_object, timeout = nil, include_etag: false)
1267
+ def _request(uri, request_object, timeout = nil, include_etag: false, retry_status_codes: [])
1261
1268
  request_object['User-Agent'] = "posthog-ruby/#{PostHog::VERSION}"
1262
1269
  request_timeout = timeout || 10
1263
1270
  backoff_policy = nil
1264
1271
  attempts = 0
1265
1272
 
1266
- begin
1273
+ loop do
1267
1274
  attempts += 1
1268
1275
  Net::HTTP.start(
1269
1276
  uri.hostname,
@@ -1277,6 +1284,16 @@ module PostHog
1277
1284
  status_code = res.code.to_i
1278
1285
  etag = include_etag ? res['ETag'] : nil
1279
1286
 
1287
+ if retry_status_codes.include?(status_code) && attempts <= @feature_flag_request_max_retries
1288
+ backoff_policy ||= BackoffPolicy.new
1289
+ interval = backoff_policy.next_interval.to_f / 1000
1290
+ logger.debug(
1291
+ "Retrying request to #{_mask_tokens_in_url(uri.to_s)} after HTTP #{status_code} (attempt #{attempts})"
1292
+ )
1293
+ sleep(interval)
1294
+ next
1295
+ end
1296
+
1280
1297
  # Handle 304 Not Modified - return special response indicating no change
1281
1298
  if status_code == 304
1282
1299
  logger.debug("#{request_object.method} #{_mask_tokens_in_url(uri.to_s)} returned 304 Not Modified")
@@ -1304,7 +1321,7 @@ module PostHog
1304
1321
  interval = backoff_policy.next_interval.to_f / 1000
1305
1322
  logger.debug("Retrying request to #{_mask_tokens_in_url(uri.to_s)} after #{e.class} (attempt #{attempts})")
1306
1323
  sleep(interval)
1307
- retry
1324
+ next
1308
1325
  end
1309
1326
  logger.debug("Unable to complete request to #{_mask_tokens_in_url(uri.to_s)}")
1310
1327
  raise
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PostHog
4
- VERSION = '3.15.1'
4
+ VERSION = '3.15.2'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posthog-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.15.1
4
+ version: 3.15.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''