Class: FiberAudit::Runtime::Limits
- Inherits:
-
Object
- Object
- FiberAudit::Runtime::Limits
- Defined in:
- lib/fiber_audit/runtime/limits.rb
Constant Summary collapse
- WINDOW_NS =
1_000_000_000- MAX_COUNTER =
9_223_372_036_854_775_807- COUNTERS =
SessionSummary::COUNTERS
- DROP_REASONS =
%i[ sampled_out rate_limited session_event_limited session_byte_limited oversize ].freeze
Instance Attribute Summary collapse
-
#policy ⇒ Object
readonly
Returns the value of attribute policy.
-
#started_monotonic_ns ⇒ Object
readonly
Returns the value of attribute started_monotonic_ns.
Instance Method Summary collapse
- #counters ⇒ Object
- #drop!(reason) ⇒ Object
- #emitted!(now_ns:) ⇒ Object
-
#initialize(policy:, started_monotonic_ns:) ⇒ Limits
constructor
A new instance of Limits.
- #internal_error!(count: 1) ⇒ Object
- #observe! ⇒ Object
- #preflight_event(now_ns:) ⇒ Object
- #sampled_out! ⇒ Object
Constructor Details
#initialize(policy:, started_monotonic_ns:) ⇒ Limits
Returns a new instance of Limits.
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/fiber_audit/runtime/limits.rb', line 19 def initialize(policy:, started_monotonic_ns:) raise RuntimeContractError, 'policy must be a FiberAudit::Runtime::Policy' unless policy.is_a?(Policy) @policy = policy @started_monotonic_ns = Validation.integer(started_monotonic_ns, 'started_monotonic_ns') @counters = COUNTERS.to_h { |name| [name, 0] } @window_index = 0 @emitted_in_window = 0 @last_admission_ns = @started_monotonic_ns end |
Instance Attribute Details
#policy ⇒ Object (readonly)
Returns the value of attribute policy.
17 18 19 |
# File 'lib/fiber_audit/runtime/limits.rb', line 17 def policy @policy end |
#started_monotonic_ns ⇒ Object (readonly)
Returns the value of attribute started_monotonic_ns.
17 18 19 |
# File 'lib/fiber_audit/runtime/limits.rb', line 17 def started_monotonic_ns @started_monotonic_ns end |
Instance Method Details
#counters ⇒ Object
65 66 67 |
# File 'lib/fiber_audit/runtime/limits.rb', line 65 def counters @counters.dup.freeze end |
#drop!(reason) ⇒ Object
47 48 49 50 51 |
# File 'lib/fiber_audit/runtime/limits.rb', line 47 def drop!(reason) raise RuntimeContractError, "unknown runtime drop reason: #{reason.inspect}" unless DROP_REASONS.include?(reason) increment!(reason) end |
#emitted!(now_ns:) ⇒ Object
53 54 55 56 57 58 |
# File 'lib/fiber_audit/runtime/limits.rb', line 53 def emitted!(now_ns:) now = normalize_admission_time(now_ns) advance_window!(now) increment!(:events_emitted) increment_window! end |
#internal_error!(count: 1) ⇒ Object
60 61 62 63 |
# File 'lib/fiber_audit/runtime/limits.rb', line 60 def internal_error!(count: 1) amount = Validation.integer(count, 'internal error count', minimum: 1) increment!(:internal_errors, amount) end |
#observe! ⇒ Object
30 31 32 |
# File 'lib/fiber_audit/runtime/limits.rb', line 30 def observe! increment!(:events_observed) end |
#preflight_event(now_ns:) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/fiber_audit/runtime/limits.rb', line 38 def preflight_event(now_ns:) now = normalize_admission_time(now_ns) advance_window!(now) return :session_event_limited unless policy.session_event_allowed?(emitted_events: @counters[:events_emitted]) return :rate_limited unless policy.rate_allowed?(emitted_in_window: @emitted_in_window) nil end |
#sampled_out! ⇒ Object
34 35 36 |
# File 'lib/fiber_audit/runtime/limits.rb', line 34 def sampled_out! increment!(:sampled_out) end |