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 +4 -4
- data/lib/railscope/flush_service.rb +35 -1
- data/lib/railscope/version.rb +1 -1
- data/lib/railscope.rb +5 -3
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 259570e86e958b91b577337b9b1dd6f57f667f72999589a3976b9a86a3450c78
|
|
4
|
+
data.tar.gz: bbf6d0de9fdce6901383c8d60c39c07310a3da0d64593904d55a85412deba2b1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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 =
|
|
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
|
data/lib/railscope/version.rb
CHANGED
data/lib/railscope.rb
CHANGED
|
@@ -126,13 +126,15 @@ module Railscope
|
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
def ready?
|
|
129
|
-
return
|
|
129
|
+
return true if @ready
|
|
130
|
+
|
|
130
131
|
return false if @checking_ready
|
|
131
132
|
|
|
132
133
|
@checking_ready = true
|
|
133
|
-
|
|
134
|
+
result = storage.ready?
|
|
135
|
+
@ready = true if result
|
|
134
136
|
@checking_ready = false
|
|
135
|
-
|
|
137
|
+
result
|
|
136
138
|
rescue StandardError
|
|
137
139
|
@checking_ready = false
|
|
138
140
|
false
|