railscope 0.1.7 → 0.1.9

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: a7ece537fa5b4b1b9386f7905bff7549ce78991235a200e816f96eee84c8aee4
4
- data.tar.gz: c90e31d07b61d2450e8cb30e4ee68b84fb6a3e405ce6146884cd24673d71e2dc
3
+ metadata.gz: 259570e86e958b91b577337b9b1dd6f57f667f72999589a3976b9a86a3450c78
4
+ data.tar.gz: bbf6d0de9fdce6901383c8d60c39c07310a3da0d64593904d55a85412deba2b1
5
5
  SHA512:
6
- metadata.gz: a85d4fba3f45ee24bad9336da7b92df1ea81bbf60903196282cd3f6f8c03c68a40244a229626d2e75136b75c0414964fb5c8e29946f12284f7a2a66d67223a4b
7
- data.tar.gz: 9f2c24fa139c2bc2c3f4cdfd7233940b42bdefca04d3fb3052a584fd2f7129fa6b1bfc8ad86c755554d07594870c983256c8f2340658fc78d9f87ea133fb46cd
6
+ metadata.gz: 2d358d6d57809e3b6d30bebfab973060d8c3086a929c8d47dd3fc230be5ad72f0cca7ed84f0431466b80f3b5d863e8f1d37c0d26eb6df14301d7ef307fcc05a5
7
+ data.tar.gz: 41b79ac66a21145f5ca9fe18a07a6706bf06751a87eb26bd1739a816526d7e851c43d784146cb2bf6391ce47e7e73bbfe91443e883e8f868d45a039e30b66dec
@@ -4,7 +4,8 @@ module Railscope
4
4
  class FlushService
5
5
  BUFFER_KEY = "railscope:buffer"
6
6
  UPDATES_KEY = "railscope:buffer:updates"
7
- BATCH_SIZE = 1000
7
+ BATCH_SIZE = 100
8
+ MAX_RETRIES = 3
8
9
 
9
10
  def self.call
10
11
  new.call
@@ -20,6 +21,7 @@ module Railscope
20
21
 
21
22
  def flush_entries
22
23
  total = 0
24
+ retries = 0
23
25
 
24
26
  loop do
25
27
  batch = pop_batch(BUFFER_KEY)
@@ -28,12 +30,25 @@ module Railscope
28
30
  entries = batch.map { |json| JSON.parse(json, symbolize_names: true) }
29
31
  batch_insert_to_database(entries)
30
32
  total += entries.size
33
+ retries = 0
34
+ rescue Redis::BaseError => e
35
+ retries += 1
36
+ if retries <= MAX_RETRIES
37
+ Rails.logger.warn("[Railscope] Redis connection lost during flush, reconnecting (attempt #{retries}/#{MAX_RETRIES})...")
38
+ reconnect_redis!
39
+ retry
40
+ else
41
+ Rails.logger.error("[Railscope] Redis flush failed after #{MAX_RETRIES} retries (flushed #{total} entries): #{e.message}")
42
+ break
43
+ end
31
44
  end
32
45
 
33
46
  total
34
47
  end
35
48
 
36
49
  def apply_pending_updates
50
+ retries = 0
51
+
37
52
  loop do
38
53
  batch = pop_batch(UPDATES_KEY)
39
54
  break if batch.empty?
@@ -42,6 +57,17 @@ module Railscope
42
57
  update = JSON.parse(json, symbolize_names: true)
43
58
  apply_update(update)
44
59
  end
60
+ retries = 0
61
+ rescue Redis::BaseError => e
62
+ retries += 1
63
+ if retries <= MAX_RETRIES
64
+ Rails.logger.warn("[Railscope] Redis connection lost during updates, reconnecting (attempt #{retries}/#{MAX_RETRIES})...")
65
+ reconnect_redis!
66
+ retry
67
+ else
68
+ Rails.logger.error("[Railscope] Redis updates failed after #{MAX_RETRIES} retries: #{e.message}")
69
+ break
70
+ end
45
71
  end
46
72
  end
47
73
 
@@ -85,6 +111,14 @@ module Railscope
85
111
  redis.lpop(key, BATCH_SIZE) || []
86
112
  end
87
113
 
114
+ def reconnect_redis!
115
+ Railscope.redis&.close
116
+ rescue StandardError
117
+ # ignore
118
+ ensure
119
+ Railscope.instance_variable_set(:@redis, nil)
120
+ end
121
+
88
122
  def redis
89
123
  Railscope.redis
90
124
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Railscope
4
- VERSION = "0.1.7"
4
+ VERSION = "0.1.9"
5
5
  end
data/lib/railscope.rb CHANGED
@@ -126,13 +126,15 @@ module Railscope
126
126
  end
127
127
 
128
128
  def ready?
129
- return @ready if defined?(@ready) && !@ready.nil?
129
+ return true if @ready
130
+
130
131
  return false if @checking_ready
131
132
 
132
133
  @checking_ready = true
133
- @ready = storage.ready?
134
+ result = storage.ready?
135
+ @ready = true if result
134
136
  @checking_ready = false
135
- @ready
137
+ result
136
138
  rescue StandardError
137
139
  @checking_ready = false
138
140
  false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railscope
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phelipe Tussolini