Class: Kameleoon::Network::NetworkManager

Inherits:
Object
  • Object
show all
Defined in:
lib/kameleoon/network/network_manager.rb

Overview

NetworkManager is used to make API calls.

Constant Summary collapse

FETCH_CONFIGURATION_ATTEMPT_NUMBER =
4
TRACKING_CALL_ATTEMPT_NUMBER =
4
TRACKING_CALL_RETRY_DELAY =

in seconds

5.0

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(environment, default_timeout, url_provider, log_func = nil) ⇒ NetworkManager

Returns a new instance of NetworkManager.



20
21
22
23
24
25
26
27
# File 'lib/kameleoon/network/network_manager.rb', line 20

def initialize(environment, default_timeout, url_provider, log_func = nil)
  @environment = environment
  @default_timeout = default_timeout
  @url_provider = url_provider
  @em_net_provider = EMNetProvider.new
  @sync_net_provider = SyncNetProvider.new
  @log_func = log_func
end

Instance Attribute Details

#default_timeoutObject (readonly)

Returns the value of attribute default_timeout.



18
19
20
# File 'lib/kameleoon/network/network_manager.rb', line 18

def default_timeout
  @default_timeout
end

#environmentObject (readonly)

Returns the value of attribute environment.



18
19
20
# File 'lib/kameleoon/network/network_manager.rb', line 18

def environment
  @environment
end

#url_providerObject (readonly)

Returns the value of attribute url_provider.



18
19
20
# File 'lib/kameleoon/network/network_manager.rb', line 18

def url_provider
  @url_provider
end

Instance Method Details

#fetch_configuration(timestamp = nil, timeout = nil) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/kameleoon/network/network_manager.rb', line 29

def fetch_configuration(timestamp = nil, timeout = nil)
  url = @url_provider.make_configuration_url(@environment, timestamp)
  timeout = ensure_timeout(timeout)
  request = Request.new(Method::GET, url, ContentType::JSON, timeout)
  attempts_left = FETCH_CONFIGURATION_ATTEMPT_NUMBER
  while attempts_left.positive?
    em_resp = EM::Synchrony.sync(@em_net_provider.make_request(request))
    response = EMNetProvider.em_resp_to_response(request, em_resp)
    result = handle_response(response)
    return result if result

    attempts_left -= 1
  end
  false
end

#get_remote_data(key, timeout = nil) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/kameleoon/network/network_manager.rb', line 45

def get_remote_data(key, timeout = nil)
  url = @url_provider.make_api_data_get_request_url(key)
  timeout = ensure_timeout(timeout)
  request = Request.new(Method::GET, url, ContentType::JSON, timeout)
  response = @sync_net_provider.make_request(request)
  handle_response(response)
end

#get_remote_visitor_data(visitor_code, timeout = nil) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/kameleoon/network/network_manager.rb', line 53

def get_remote_visitor_data(visitor_code, timeout = nil)
  url = @url_provider.make_visitor_data_get_url(visitor_code)
  timeout = ensure_timeout(timeout)
  request = Request.new(Method::GET, url, ContentType::JSON, timeout)
  response = @sync_net_provider.make_request(request)
  handle_response(response)
end

#send_tracking_data(visitor_code, lines, user_agent, timeout = nil) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/kameleoon/network/network_manager.rb', line 61

def send_tracking_data(visitor_code, lines, user_agent, timeout = nil)
  return if lines.nil? || lines.empty?

  url = @url_provider.make_tracking_url(visitor_code)
  timeout = ensure_timeout(timeout)
  data = (lines.map(&:obtain_full_post_text_line).join("\n") || '').encode('UTF-8')
  request = Request.new(Method::POST, url, ContentType::TEXT, timeout, user_agent, data)
  Thread.new do
    attempts_left = TRACKING_CALL_ATTEMPT_NUMBER
    loop do
      response = @sync_net_provider.make_request(request)
      if handle_response(response) != false
        lines.each { |line| line.sent = true }
        break
      end
      attempts_left -= 1
      break unless attempts_left.positive?

      delay(TRACKING_CALL_RETRY_DELAY)
    end
  end
end