Class: Featureflow::EventsClient
- Inherits:
-
Object
- Object
- Featureflow::EventsClient
- Defined in:
- lib/featureflow/events_client.rb
Overview
LOCK = Mutex.new
Instance Method Summary collapse
- #evaluate(key, evaluated_variant, expected_variant, user) ⇒ Object
-
#initialize(url, api_key) ⇒ EventsClient
constructor
A new instance of EventsClient.
- #queue_event(event) ⇒ Object
-
#register_features(with_features) ⇒ Object
register features are not queued and go straight out.
- #send_queue ⇒ Object
- #start_scheduler ⇒ Object
Constructor Details
#initialize(url, api_key) ⇒ EventsClient
Returns a new instance of EventsClient.
10 11 12 13 14 15 |
# File 'lib/featureflow/events_client.rb', line 10 def initialize(url, api_key) @url = url @api_key = api_key @eventsQueue = Queue.new @scheduler = start_scheduler end |
Instance Method Details
#evaluate(key, evaluated_variant, expected_variant, user) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/featureflow/events_client.rb', line 41 def evaluate(key, evaluated_variant, expected_variant, user) Thread.new do = Time.now.iso8601 queue_event ({ featureKey: key, evaluatedVariant: evaluated_variant, expectedVaraint: expected_variant, user: user, timestamp: }) end end |
#queue_event(event) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/featureflow/events_client.rb', line 54 def queue_event(event) #add to queue @eventsQueue.push(event) if !@scheduler.alive? @scheduler = start_scheduler end if @eventsQueue.length >= 10000 send_queue end #id queue = 10000 then send_queue end |
#register_features(with_features) ⇒ Object
register features are not queued and go straight out
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/featureflow/events_client.rb', line 29 def register_features(with_features) Thread.new do features = [] features = with_features.each do | feature | features.push(key: feature[:key], variants: feature[:variants], failoverVariant: feature[:failover_variant]) end send_event 'Register Features', :put, '/api/sdk/v1/register', features end end |
#send_queue ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/featureflow/events_client.rb', line 69 def send_queue() events =[] begin loop do events << @eventsQueue.pop(true) end rescue ThreadError end if !events.empty? send_event 'Evaluate Variant', :post, '/api/sdk/v1/events', events end end |
#start_scheduler ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/featureflow/events_client.rb', line 17 def start_scheduler() Thread.new do loop do begin sleep 10 send_queue end end end end |