magick-feature-flags 0.9.20 → 0.9.21
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/feature.rb +48 -3
- data/lib/magick/version.rb +1 -1
- data/lib/magick.rb +6 -0
- 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: 467ad50ad54569fd4ac8562da75e37672716b980cfdfb03da79b2f29950fd4c9
|
|
4
|
+
data.tar.gz: 0b89ad165e8aad8fb2074821025bd7e50ef2568cc46f5b750bfc4c91c6e11658
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7b3fa0a75bd127f269ecafcddfbe6dcba8d45a247d6b47d83085a097f58de6b74c570eb0655fd4a97c78d8335ff1916a57b3eb2b891143d6a2cc585acc5ff87c
|
|
7
|
+
data.tar.gz: 79cf7083e34daab0c569e9e05d6e0b123167692f2b206b67ae53321ddabe722861e701346dd5cac80c6b1898be75140ed52fd93470b9a19ccf8113ebf6d91a16
|
data/lib/magick/feature.rb
CHANGED
|
@@ -33,15 +33,54 @@ module Magick
|
|
|
33
33
|
# Update targeting empty cache after loading
|
|
34
34
|
@_targeting_empty = @targeting.empty?
|
|
35
35
|
# Cache performance metrics availability (check once, not on every call)
|
|
36
|
-
|
|
36
|
+
# Only enable if performance_metrics exists AND is actually being used
|
|
37
|
+
@_perf_metrics_enabled = !Magick.performance_metrics.nil?
|
|
37
38
|
# Save description and display_name to adapter if they were provided and not already in adapter
|
|
38
39
|
save_metadata_if_new
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
def enabled?(context = {})
|
|
42
|
-
#
|
|
43
|
-
|
|
43
|
+
# Check performance metrics dynamically (in case enabled after feature creation)
|
|
44
|
+
# But cache the check result for performance
|
|
45
|
+
perf_metrics = Magick.performance_metrics
|
|
46
|
+
perf_metrics_enabled = !perf_metrics.nil?
|
|
47
|
+
|
|
48
|
+
# Update cached flag if it changed
|
|
49
|
+
@_perf_metrics_enabled = perf_metrics_enabled if @_perf_metrics_enabled != perf_metrics_enabled
|
|
50
|
+
|
|
51
|
+
# Fast path: if performance metrics disabled, skip all overhead
|
|
52
|
+
return check_enabled(context) unless perf_metrics_enabled
|
|
53
|
+
|
|
54
|
+
# Performance metrics enabled: measure and record
|
|
55
|
+
start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
56
|
+
result = check_enabled(context)
|
|
57
|
+
duration = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000 # milliseconds
|
|
58
|
+
|
|
59
|
+
# Record metrics (only if enabled)
|
|
60
|
+
perf_metrics.record(name, 'enabled?', duration, success: true)
|
|
61
|
+
|
|
62
|
+
# Rails 8+ events (only in development or when explicitly enabled)
|
|
63
|
+
if @_rails_events_enabled
|
|
64
|
+
if result
|
|
65
|
+
Magick::Rails::Events.feature_enabled(name, context: context)
|
|
66
|
+
else
|
|
67
|
+
Magick::Rails::Events.feature_disabled(name, context: context)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Warn if deprecated (only if enabled)
|
|
72
|
+
if status == :deprecated && result && !context[:allow_deprecated] && Magick.warn_on_deprecated
|
|
73
|
+
warn "DEPRECATED: Feature '#{name}' is deprecated and will be removed."
|
|
74
|
+
Magick::Rails::Events.deprecated_warning(name) if @_rails_events_enabled
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
result
|
|
44
78
|
rescue StandardError => e
|
|
79
|
+
# Record error metrics if enabled
|
|
80
|
+
if perf_metrics_enabled && perf_metrics
|
|
81
|
+
duration = defined?(start_time) && start_time ? (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start_time) * 1000 : 0.0
|
|
82
|
+
perf_metrics.record(name, 'enabled?', duration, success: false)
|
|
83
|
+
end
|
|
45
84
|
# Return false on any error (fail-safe)
|
|
46
85
|
warn "Magick: Error checking feature '#{name}': #{e.message}" if defined?(Rails) && Rails.env.development?
|
|
47
86
|
false
|
|
@@ -452,6 +491,10 @@ module Magick
|
|
|
452
491
|
# Reload feature state from adapter (useful when feature is changed externally)
|
|
453
492
|
def reload
|
|
454
493
|
load_from_adapter
|
|
494
|
+
# Update targeting empty cache
|
|
495
|
+
@_targeting_empty = @targeting.empty?
|
|
496
|
+
# Update performance metrics flag (in case it was enabled after feature creation)
|
|
497
|
+
@_perf_metrics_enabled = !Magick.performance_metrics.nil?
|
|
455
498
|
# Update registered feature instance if it exists
|
|
456
499
|
if Magick.features.key?(name)
|
|
457
500
|
registered = Magick.features[name]
|
|
@@ -461,6 +504,8 @@ module Magick
|
|
|
461
504
|
registered.instance_variable_set(:@description, @description)
|
|
462
505
|
registered.instance_variable_set(:@display_name, @display_name)
|
|
463
506
|
registered.instance_variable_set(:@targeting, @targeting.dup)
|
|
507
|
+
registered.instance_variable_set(:@_targeting_empty, @_targeting_empty)
|
|
508
|
+
registered.instance_variable_set(:@_perf_metrics_enabled, @_perf_metrics_enabled)
|
|
464
509
|
end
|
|
465
510
|
true
|
|
466
511
|
end
|
data/lib/magick/version.rb
CHANGED
data/lib/magick.rb
CHANGED
|
@@ -38,6 +38,12 @@ module Magick
|
|
|
38
38
|
if value && adapter_registry.is_a?(Adapters::Registry) && adapter_registry.redis_available?
|
|
39
39
|
value.enable_redis_tracking(enable: true)
|
|
40
40
|
end
|
|
41
|
+
# Update all existing features to enable performance metrics tracking
|
|
42
|
+
if value
|
|
43
|
+
features.each_value do |feature|
|
|
44
|
+
feature.instance_variable_set(:@_perf_metrics_enabled, true)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
41
47
|
value
|
|
42
48
|
end
|
|
43
49
|
|