network_resiliency 0.7.8 → 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: 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