/
client.rb
83 lines (67 loc) · 2.72 KB
/
client.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
require 'unleash/configuration'
require 'unleash/toggle_fetcher'
require 'unleash/metrics_reporter'
require 'unleash/feature_toggle'
require 'logger'
require 'time'
module Unleash
class Client
def initialize(*opts)
Unleash.configuration ||= Unleash::Configuration.new(*opts)
Unleash.configuration.validate!
Unleash.logger = Unleash.configuration.logger
Unleash.logger.level = Unleash.configuration.log_level
Unleash.toggle_fetcher = Unleash::ToggleFetcher.new
register
unless Unleash.configuration.disable_metrics
Unleash.toggle_metrics = Unleash::Metrics.new
Unleash.reporter = Unleash::MetricsReporter.new
scheduledExecutor = Unleash::ScheduledExecutor.new('MetricsReporter', Unleash.configuration.metrics_interval)
scheduledExecutor.run do
Unleash.reporter.send
end
end
end
def is_enabled?(feature, context = nil, default_value = false)
Unleash.logger.debug "Unleash::Client.is_enabled? feature: #{feature} with context #{context}"
toggle_as_hash = Unleash.toggles.select{ |toggle| toggle['name'] == feature }.first
if toggle_as_hash.nil?
Unleash.logger.debug "Unleash::Client.is_enabled? feature: #{feature} not found"
return default_value
end
toggle = Unleash::FeatureToggle.new(toggle_as_hash)
toggle_result = toggle.is_enabled?(context, default_value)
return toggle_result
end
private
def info
return {
'appName': Unleash.configuration.app_name,
'instanceId': Unleash.configuration.instance_id,
'sdkVersion': "unleash-client-ruby:" + Unleash::VERSION,
'strategies': Unleash::STRATEGIES.keys,
'started': Time.now.iso8601(Unleash::TIME_RESOLUTION),
'interval': Unleash.configuration.metrics_interval_in_millis
}
end
def register
Unleash.logger.debug "register()"
uri = URI(Unleash.configuration.client_register_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true if uri.scheme == 'https'
http.open_timeout = Unleash.configuration.timeout # in seconds
http.read_timeout = Unleash.configuration.timeout # in seconds
headers = (Unleash.configuration.custom_http_headers || {}).dup
headers['Content-Type'] = 'application/json'
request = Net::HTTP::Post.new(uri.request_uri, headers)
request.body = info.to_json
# Send the request, if possible
begin
response = http.request(request)
rescue Exception => e
Unleash.logger.error "unable to register client with unleash server due to exception #{e.class}:'#{e}'."
Unleash.logger.error "stacktrace: #{e.backtrace}"
end
end
end
end