Class: Featureflow::EventsClient

Inherits:
Object
  • Object
show all
Defined in:
lib/featureflow/events_client.rb

Overview

LOCK = Mutex.new

Instance Method Summary collapse

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
    timestamp = Time.now.iso8601
    queue_event  ({
         featureKey: key,
         evaluatedVariant: evaluated_variant,
         expectedVaraint: expected_variant,
         user: user,
         timestamp: 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_queueObject



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_schedulerObject



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