Class: Statsig::Network
Instance Method Summary collapse
- #check_gate(user, gate_name) ⇒ Object
- #get_config(user, dynamic_config_name) ⇒ Object
-
#initialize(server_secret, api, local_mode, backoff_mult = 10) ⇒ Network
constructor
A new instance of Network.
- #post_helper(endpoint, body, retries = 0, backoff = 1) ⇒ Object
- #post_logs(events) ⇒ Object
Constructor Details
#initialize(server_secret, api, local_mode, backoff_mult = 10) ⇒ Network
Returns a new instance of Network.
25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/network.rb', line 25 def initialize(server_secret, api, local_mode, backoff_mult = 10) super() unless api.end_with?('/') api += '/' end @server_secret = server_secret @api = api @local_mode = local_mode @backoff_multiplier = backoff_mult @session_id = SecureRandom.uuid end |
Instance Method Details
#check_gate(user, gate_name) ⇒ Object
70 71 72 73 74 75 76 77 78 79 |
# File 'lib/network.rb', line 70 def check_gate(user, gate_name) begin request_body = JSON.generate({ 'user' => user&.serialize(false), 'gateName' => gate_name }) response, _ = post_helper('check_gate', request_body) return JSON.parse(response.body) unless response.nil? false rescue return false end end |
#get_config(user, dynamic_config_name) ⇒ Object
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/network.rb', line 81 def get_config(user, dynamic_config_name) begin request_body = JSON.generate({ 'user' => user&.serialize(false), 'configName' => dynamic_config_name }) response, _ = post_helper('get_config', request_body) return JSON.parse(response.body) unless response.nil? nil rescue return nil end end |
#post_helper(endpoint, body, retries = 0, backoff = 1) ⇒ Object
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 |
# File 'lib/network.rb', line 40 def post_helper(endpoint, body, retries = 0, backoff = 1) if @local_mode return nil, nil end = Statsig. http = HTTP.headers( { "STATSIG-API-KEY" => @server_secret, "STATSIG-CLIENT-TIME" => (Time.now.to_f * 1000).to_i.to_s, "STATSIG-SERVER-SESSION-ID" => @session_id, "Content-Type" => "application/json; charset=UTF-8", "STATSIG-SDK-TYPE" => ['sdkType'], "STATSIG-SDK-VERSION" => ['sdkVersion'], }).accept(:json) begin res = http.post(@api + endpoint, body: body) rescue StandardError => e ## network error retry return nil, e unless retries > 0 sleep backoff return post_helper(endpoint, body, retries - 1, backoff * @backoff_multiplier) end return res, nil if res.status.success? return nil, NetworkError.new("Got an exception when making request to #{@api + endpoint}: #{res.to_s}", res.status.to_i) unless retries > 0 && $retry_codes.include?(res.code) ## status code retry sleep backoff post_helper(endpoint, body, retries - 1, backoff * @backoff_multiplier) end |
#post_logs(events) ⇒ Object
92 93 94 95 96 97 98 |
# File 'lib/network.rb', line 92 def post_logs(events) begin json_body = JSON.generate({ 'events' => events, 'statsigMetadata' => Statsig. }) post_helper('log_event', json_body, 5) rescue end end |