network_resiliency 0.7.8 → 0.7.10

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: 4b5df76818e3c5cb07bd98a1fadb1eb7c905f33a40198b7168c02c72d4f32422
4
- data.tar.gz: 44cb15f0338ab3b49a496630eb118da9aafdd8b3d79d6746502a624b55782780
3
+ metadata.gz: a9ddcd8230d4e9ac39deb2aaea8dd4deca88043515a4e0a5e9e992c8ef4d45a2
4
+ data.tar.gz: 3784f0deb54c42adcbe6507b3883ee76976a1580a561832d47c61809263c46f5
5
5
  SHA512:
6
- metadata.gz: b66b0ab770b6292f8ee92a22d1df5de7ce4645a4b2f5bfca58ffc8b319ad8787486ba47426e67d8cc02c1a9fcf87f7576411685b08a033674e60308108a2461e
7
- data.tar.gz: 58f2057045c560ab5ddb09f98ff5fee88676bcfa31f62e9fddbacdacb02e75d94e0c4edb02fb5fdc67db6fdc16f47ef522321d9b1511f41176868538775105d2
6
+ metadata.gz: '0693d64108424d5d78087728f65a2c7aea2d3e891e4c0f2297ab6ada7278f3837413fbe7f343852dc88bbc0f883601d2f5b9c617ee2bc152380edbacfbfa0c2c'
7
+ data.tar.gz: c358bf2728f3892c310e90823ef6fb64dadbca5ab2ad1840e960dcc5cb1c17fc279e8f4cadc8b140727a13a713861b91552d60c30f48749c3909d8c4f8c03377
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ### v0.7.10 (2024-02-15)
2
+ - ddog sampling
3
+ - reconnect redis
4
+ - sync logging
5
+ - warn method
6
+
7
+ ### v0.7.9 (2024-02-07)
8
+ - sync frequency
9
+
1
10
  ### v0.7.8 (2024-02-07)
2
11
  - lazy syncing
3
12
  - timeout metric
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_resiliency (0.7.8)
4
+ network_resiliency (0.7.10)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -65,11 +65,13 @@ module NetworkResiliency
65
65
  empty: data.empty?,
66
66
  truncated: data.size < dirty_keys.size,
67
67
  }.select { |_, v| v },
68
+ sample_rate: SAMPLE_RATE[:sync],
68
69
  )
69
70
 
70
71
  NetworkResiliency.statsd&.distribution(
71
72
  "network_resiliency.sync.keys.dirty",
72
73
  dirty_keys.select { |_, n| n > 0 }.count,
74
+ sample_rate: SAMPLE_RATE[:sync],
73
75
  )
74
76
 
75
77
  return [] if data.empty?
@@ -1,6 +1,7 @@
1
1
  module NetworkResiliency
2
2
  class Syncer < Thread
3
3
  LOCK = Mutex.new
4
+ SLEEP_DURATION = 10
4
5
 
5
6
  class << self
6
7
  def start
@@ -45,12 +46,17 @@ module NetworkResiliency
45
46
  private
46
47
 
47
48
  def sync
49
+ # force redis to reconnect post fork
50
+ NetworkResiliency.redis.disconnect! if NetworkResiliency.redis.connected?
51
+
48
52
  until @shutdown
49
53
  StatsEngine.sync(NetworkResiliency.redis)
50
54
 
51
- sleep(3)
55
+ sleep(SLEEP_DURATION)
52
56
  end
53
57
  rescue Interrupt
58
+ rescue => e
59
+ NetworkResiliency.warn(__method__, e)
54
60
  end
55
61
  end
56
62
  end
@@ -1,3 +1,3 @@
1
1
  module NetworkResiliency
2
- VERSION = "0.7.8"
2
+ VERSION = "0.7.10"
3
3
  end
@@ -20,6 +20,11 @@ module NetworkResiliency
20
20
  ADAPTERS = [ :http, :faraday, :redis, :mysql, :postgres, :rails ].freeze
21
21
  MODE = [ :observe, :resilient ].freeze
22
22
  RESILIENCY_SIZE_THRESHOLD = 1_000
23
+ SAMPLE_RATE = {
24
+ timeout: 0.1,
25
+ stats: 0.1,
26
+ sync: 0.1,
27
+ }
23
28
 
24
29
  extend self
25
30
 
@@ -121,15 +126,7 @@ module NetworkResiliency
121
126
 
122
127
  mode
123
128
  rescue => e
124
- NetworkResiliency.statsd&.increment(
125
- "network_resiliency.error",
126
- tags: {
127
- method: __method__,
128
- type: e.class,
129
- },
130
- )
131
-
132
- warn "[ERROR] NetworkResiliency: #{e.class}: #{e.message}"
129
+ warn(__method__, e)
133
130
 
134
131
  :observe
135
132
  end
@@ -243,6 +240,7 @@ module NetworkResiliency
243
240
  adapter: adapter,
244
241
  destination: destination,
245
242
  },
243
+ sample_rate: SAMPLE_RATE[:timeout],
246
244
  ) if timeout && timeout > 0
247
245
 
248
246
  if error
@@ -272,32 +270,27 @@ module NetworkResiliency
272
270
  "network_resiliency.#{action}.stats.n",
273
271
  stats.n,
274
272
  tags: tags,
273
+ sample_rate: SAMPLE_RATE[:stats],
275
274
  )
276
275
 
277
276
  NetworkResiliency.statsd&.distribution(
278
277
  "network_resiliency.#{action}.stats.avg",
279
278
  stats.avg,
280
279
  tags: tags,
280
+ sample_rate: SAMPLE_RATE[:stats],
281
281
  )
282
282
 
283
283
  NetworkResiliency.statsd&.distribution(
284
284
  "network_resiliency.#{action}.stats.stdev",
285
285
  stats.stdev,
286
286
  tags: tags,
287
+ sample_rate: SAMPLE_RATE[:stats],
287
288
  )
288
289
  end
289
290
 
290
291
  nil
291
292
  rescue => e
292
- NetworkResiliency.statsd&.increment(
293
- "network_resiliency.error",
294
- tags: {
295
- method: __method__,
296
- type: e.class,
297
- },
298
- )
299
-
300
- warn "[ERROR] NetworkResiliency: #{e.class}: #{e.message}"
293
+ warn(__method__, e)
301
294
  end
302
295
 
303
296
  IP_ADDRESS_REGEX = /\d{1,3}(\.\d{1,3}){3}/
@@ -343,6 +336,7 @@ module NetworkResiliency
343
336
  NetworkResiliency.statsd&.increment(
344
337
  "network_resiliency.timeout.raised",
345
338
  tags: tags,
339
+ sample_rate: SAMPLE_RATE[:timeout],
346
340
  )
347
341
  end
348
342
  else
@@ -352,6 +346,7 @@ module NetworkResiliency
352
346
  NetworkResiliency.statsd&.increment(
353
347
  "network_resiliency.timeout.too_low",
354
348
  tags: tags,
349
+ sample_rate: SAMPLE_RATE[:timeout],
355
350
  )
356
351
  end
357
352
  else
@@ -365,6 +360,7 @@ module NetworkResiliency
365
360
  NetworkResiliency.statsd&.increment(
366
361
  "network_resiliency.timeout.missing",
367
362
  tags: tags,
363
+ sample_rate: SAMPLE_RATE[:timeout],
368
364
  )
369
365
  end
370
366
 
@@ -375,6 +371,7 @@ module NetworkResiliency
375
371
  adapter: adapter,
376
372
  destination: destination,
377
373
  },
374
+ sample_rate: SAMPLE_RATE[:timeout],
378
375
  )
379
376
 
380
377
  case units
@@ -386,15 +383,7 @@ module NetworkResiliency
386
383
  raise ArgumentError, "invalid units: #{units}"
387
384
  end
388
385
  rescue => e
389
- NetworkResiliency.statsd&.increment(
390
- "network_resiliency.error",
391
- tags: {
392
- method: __method__,
393
- type: e.class,
394
- },
395
- )
396
-
397
- warn "[ERROR] NetworkResiliency: #{e.class}: #{e.message}"
386
+ warn(__method__, e)
398
387
 
399
388
  default
400
389
  end
@@ -414,4 +403,16 @@ module NetworkResiliency
414
403
  def thread_state
415
404
  Thread.current["network_resiliency"] ||= {}
416
405
  end
406
+
407
+ def warn(method, e)
408
+ NetworkResiliency.statsd&.increment(
409
+ "network_resiliency.error",
410
+ tags: {
411
+ method: method,
412
+ type: e.class,
413
+ },
414
+ )
415
+
416
+ Kernel.warn "[ERROR] NetworkResiliency #{method}: #{e.class}: #{e.message}"
417
+ end
417
418
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: network_resiliency
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.8
4
+ version: 0.7.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Pepper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-07 00:00:00.000000000 Z
11
+ date: 2024-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: byebug