magick-feature-flags 0.9.8 → 0.9.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 +4 -4
- data/lib/magick/adapters/registry.rb +7 -0
- data/lib/magick/performance_metrics.rb +9 -11
- data/lib/magick/rails/railtie.rb +18 -13
- data/lib/magick/version.rb +1 -1
- data/lib/magick.rb +3 -2
- 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: 6ff57666debab09c055a1709e27902b4ff03780b62ca97382e3f0df191b4b1ce
|
|
4
|
+
data.tar.gz: 1420d03c05427c4c0ef7f319debb108542b36fa5fccf999ad13e3bd0571c0451
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2150805b902ed92fc1f033493e47697541078d21fb7d9d1e827ddf8b22d9e17fd58e8e1ed926aa47fecf1662c491d910ecba528a0d1ce8f306b340c9e0b35a16
|
|
7
|
+
data.tar.gz: 21144c7b0ad4c6c23eb379f088898757f438058dc9c2278f3fc30a03e188b03a6b58e9cb4aac8d5e37127523b5bcfc562a00c08079de95da035d10b9afa28ad5
|
|
@@ -97,6 +97,13 @@ module Magick
|
|
|
97
97
|
!redis_adapter.nil?
|
|
98
98
|
end
|
|
99
99
|
|
|
100
|
+
# Get Redis client (public method for use by other classes)
|
|
101
|
+
def redis_client
|
|
102
|
+
return nil unless redis_adapter
|
|
103
|
+
|
|
104
|
+
redis_adapter.instance_variable_get(:@redis)
|
|
105
|
+
end
|
|
106
|
+
|
|
100
107
|
private
|
|
101
108
|
|
|
102
109
|
attr_reader :memory_adapter, :redis_adapter, :circuit_breaker
|
|
@@ -65,9 +65,7 @@ module Magick
|
|
|
65
65
|
should_flush = false
|
|
66
66
|
@mutex.synchronize do
|
|
67
67
|
# Flush if we have enough pending updates or enough time has passed
|
|
68
|
-
if @pending_updates.size >= @batch_size || (Time.now - @last_flush) >= @flush_interval
|
|
69
|
-
should_flush = true
|
|
70
|
-
end
|
|
68
|
+
should_flush = true if @pending_updates.size >= @batch_size || (Time.now - @last_flush) >= @flush_interval
|
|
71
69
|
end
|
|
72
70
|
|
|
73
71
|
flush_to_redis if should_flush
|
|
@@ -88,13 +86,13 @@ module Magick
|
|
|
88
86
|
# Update Redis in batch
|
|
89
87
|
begin
|
|
90
88
|
adapter = Magick.adapter_registry || Magick.default_adapter_registry
|
|
91
|
-
if adapter.is_a?(Magick::Adapters::Registry) && adapter.
|
|
92
|
-
redis = adapter.
|
|
89
|
+
if adapter.is_a?(Magick::Adapters::Registry) && adapter.redis_available?
|
|
90
|
+
redis = adapter.redis_client
|
|
93
91
|
if redis
|
|
94
92
|
updates_to_flush.each do |feature_name, count|
|
|
95
93
|
redis_key = "magick:stats:#{feature_name}"
|
|
96
94
|
redis.incrby(redis_key, count)
|
|
97
|
-
redis.expire(redis_key,
|
|
95
|
+
redis.expire(redis_key, 86_400 * 7) # Keep stats for 7 days
|
|
98
96
|
end
|
|
99
97
|
end
|
|
100
98
|
end
|
|
@@ -130,8 +128,8 @@ module Magick
|
|
|
130
128
|
if @redis_enabled
|
|
131
129
|
begin
|
|
132
130
|
adapter = Magick.adapter_registry || Magick.default_adapter_registry
|
|
133
|
-
if adapter.is_a?(Magick::Adapters::Registry) && adapter.
|
|
134
|
-
redis = adapter.
|
|
131
|
+
if adapter.is_a?(Magick::Adapters::Registry) && adapter.redis_available?
|
|
132
|
+
redis = adapter.redis_client
|
|
135
133
|
if redis
|
|
136
134
|
redis_key = "magick:stats:#{feature_name_str}"
|
|
137
135
|
redis_count = redis.get(redis_key).to_i
|
|
@@ -152,11 +150,11 @@ module Magick
|
|
|
152
150
|
if @redis_enabled
|
|
153
151
|
begin
|
|
154
152
|
adapter = Magick.adapter_registry || Magick.default_adapter_registry
|
|
155
|
-
if adapter.is_a?(Magick::Adapters::Registry) && adapter.
|
|
156
|
-
redis = adapter.
|
|
153
|
+
if adapter.is_a?(Magick::Adapters::Registry) && adapter.redis_available?
|
|
154
|
+
redis = adapter.redis_client
|
|
157
155
|
if redis
|
|
158
156
|
# Get all stats keys
|
|
159
|
-
redis.keys(
|
|
157
|
+
redis.keys('magick:stats:*').each do |key|
|
|
160
158
|
feature_name = key.to_s.sub('magick:stats:', '')
|
|
161
159
|
redis_count = redis.get(key).to_i
|
|
162
160
|
combined_counts[feature_name] = (combined_counts[feature_name] || 0) + redis_count
|
data/lib/magick/rails/railtie.rb
CHANGED
|
@@ -16,19 +16,24 @@ if defined?(Rails)
|
|
|
16
16
|
Object.class_eval { include Magick::DSL } unless Object.included_modules.include?(Magick::DSL)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
initializer 'magick.configure' do |app|
|
|
20
|
-
# Configure Magick with Rails-specific settings
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
19
|
+
initializer 'magick.configure', before: :load_config_initializers do |app|
|
|
20
|
+
# Configure Magick with Rails-specific settings (only if not already configured)
|
|
21
|
+
# This allows user's config/initializers/magick.rb to override these defaults
|
|
22
|
+
unless Magick.adapter_registry
|
|
23
|
+
Magick.configure do |magick|
|
|
24
|
+
# Use Redis if available, otherwise fall back to memory
|
|
25
|
+
if defined?(Redis)
|
|
26
|
+
begin
|
|
27
|
+
redis_url = app.config.respond_to?(:redis_url) ? app.config.redis_url : nil
|
|
28
|
+
redis_client = redis_url ? ::Redis.new(url: redis_url) : ::Redis.new
|
|
29
|
+
memory_adapter = Adapters::Memory.new
|
|
30
|
+
redis_adapter = Adapters::Redis.new(redis_client)
|
|
31
|
+
magick.adapter_registry = Adapters::Registry.new(memory_adapter, redis_adapter)
|
|
32
|
+
# Re-apply Redis tracking if performance metrics exists
|
|
33
|
+
Magick.reapply_redis_tracking! if Magick.performance_metrics
|
|
34
|
+
rescue StandardError => e
|
|
35
|
+
Rails.logger&.warn "Magick: Failed to initialize Redis adapter: #{e.message}. Using memory-only adapter."
|
|
36
|
+
end
|
|
32
37
|
end
|
|
33
38
|
end
|
|
34
39
|
end
|
data/lib/magick/version.rb
CHANGED
data/lib/magick.rb
CHANGED
|
@@ -175,8 +175,7 @@ module Magick
|
|
|
175
175
|
@performance_metrics&.clear!
|
|
176
176
|
end
|
|
177
177
|
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
# Get default adapter registry (public method for use by other classes)
|
|
180
179
|
def default_adapter_registry
|
|
181
180
|
@default_adapter_registry ||= begin
|
|
182
181
|
memory_adapter = Adapters::Memory.new
|
|
@@ -188,5 +187,7 @@ module Magick
|
|
|
188
187
|
Adapters::Registry.new(memory_adapter, redis_adapter)
|
|
189
188
|
end
|
|
190
189
|
end
|
|
190
|
+
|
|
191
|
+
private
|
|
191
192
|
end
|
|
192
193
|
end
|