network_resiliency 0.7.9 → 0.7.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a284503d2243c5b00f5ab5fc09ca842667ebb6db7ab489fd8fa0ce033b2e4b66
4
- data.tar.gz: bcf55039bcfa3e4969a7d1a26f3393b362dd64b7318d0322b0cbe1755ce7c0f7
3
+ metadata.gz: a9ddcd8230d4e9ac39deb2aaea8dd4deca88043515a4e0a5e9e992c8ef4d45a2
4
+ data.tar.gz: 3784f0deb54c42adcbe6507b3883ee76976a1580a561832d47c61809263c46f5
5
5
  SHA512:
6
- metadata.gz: 6a40fb761f8b03e3af86afcf9c37247b6e8666bd5326fb5d8922ed35b78d9fd95c700de8a4ce142d014143d55eaf4773dbc152a56dea031400151cd265dcaba7
7
- data.tar.gz: f74ef650a917987afbcb72133f6b26491963cac0cb595f5f2505f49c70b0aa67dd5c1db8f290f3ad6a3708a4d950397111b5c487934082d403e2cd7f41e99cd1
6
+ metadata.gz: '0693d64108424d5d78087728f65a2c7aea2d3e891e4c0f2297ab6ada7278f3837413fbe7f343852dc88bbc0f883601d2f5b9c617ee2bc152380edbacfbfa0c2c'
7
+ data.tar.gz: c358bf2728f3892c310e90823ef6fb64dadbca5ab2ad1840e960dcc5cb1c17fc279e8f4cadc8b140727a13a713861b91552d60c30f48749c3909d8c4f8c03377
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ### v0.7.10 (2024-02-15)
2
+ - ddog sampling
3
+ - reconnect redis
4
+ - sync logging
5
+ - warn method
6
+
1
7
  ### v0.7.9 (2024-02-07)
2
8
  - sync frequency
3
9
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- network_resiliency (0.7.9)
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(10)
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.9"
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.9
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-08 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