Class: Observ::GuardrailService
- Inherits:
-
Object
- Object
- Observ::GuardrailService
- Defined in:
- app/services/observ/guardrail_service.rb
Class Method Summary collapse
- .evaluate_all_recent(since: 1.hour.ago) ⇒ Object
- .evaluate_session(session) ⇒ Object
- .evaluate_trace(trace) ⇒ Object
- .random_sample(scope:, percentage: 5) ⇒ Object
Class Method Details
.evaluate_all_recent(since: 1.hour.ago) ⇒ Object
36 37 38 39 40 41 42 43 44 |
# File 'app/services/observ/guardrail_service.rb', line 36 def evaluate_all_recent(since: 1.hour.ago) Observ::Trace.where(created_at: since..).find_each do |trace| evaluate_trace(trace) end Observ::Session.where(created_at: since..).find_each do |session| evaluate_session(session) end end |
.evaluate_session(session) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'app/services/observ/guardrail_service.rb', line 21 def evaluate_session(session) return if session.in_review_queue? session_rules.each do |rule| next unless rule[:condition].call(session) session.enqueue_for_review!( reason: rule[:name].to_s, priority: rule[:priority], details: rule[:details]&.call(session) || {} ) return end end |
.evaluate_trace(trace) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'app/services/observ/guardrail_service.rb', line 6 def evaluate_trace(trace) return if trace.in_review_queue? trace_rules.each do |rule| next unless rule[:condition].call(trace) trace.enqueue_for_review!( reason: rule[:name].to_s, priority: rule[:priority], details: rule[:details]&.call(trace) || {} ) return # One reason is enough end end |
.random_sample(scope:, percentage: 5) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 |
# File 'app/services/observ/guardrail_service.rb', line 46 def random_sample(scope:, percentage: 5) items = scope.where(created_at: 1.day.ago..) .left_joins(:review_item) .where(observ_review_items: { id: nil }) sample_size = [(items.count * percentage / 100.0).ceil, 1].max items.order("RANDOM()").limit(sample_size).find_each do |item| item.enqueue_for_review!(reason: "random_sample", priority: :normal) end end |