class Growing::Ruby::Sdk::Client

Attributes

account_id[R]
api_host[R]
data_source_id[R]
event_queue[R]

Public Class Methods

instance(account_id, data_source_id, api_host) click to toggle source
# File lib/growing/ruby/sdk/client.rb, line 30
def self.instance(account_id, data_source_id, api_host)
  return @instance if @instance
  @instance_mutex.synchronize do
    @instance ||= new(account_id, data_source_id, api_host)
  end
  @instance
end
new(account_id, data_source_id, api_host) click to toggle source
# File lib/growing/ruby/sdk/client.rb, line 22
def initialize(account_id, data_source_id, api_host)
  @account_id = account_id
  @data_source_id = data_source_id
  @api_host = api_host
  @event_queue = {}
  @timers = Timers::Group.new
end

Public Instance Methods

auto_track() click to toggle source

thread unsafe

# File lib/growing/ruby/sdk/client.rb, line 82
def auto_track
  Thread.new do
    @timers.every(60) { send_data }
    loop { @timers.wait }
  end
end
collect_cstm(login_user_id, event_key, props = {}) click to toggle source
# File lib/growing/ruby/sdk/client.rb, line 50
def collect_cstm(login_user_id, event_key, props = {}) 
  event = ::Protocol::EventDto.new(
    project_key: @account_id,
    data_source_id: @data_source_id,
    user_id: login_user_id,
    gio_id: login_user_id,
    event_key: event_key,
    attributes: props,
    timestamp: current_timestamp)
  @event_queue['collect_cstm'] ||= [] 
  @event_queue['collect_cstm'] << event
end
collect_user(login_user_id, props = {}) click to toggle source
# File lib/growing/ruby/sdk/client.rb, line 38
def collect_user(login_user_id, props = {})
  user = ::Protocol::UserDto.new(
    project_key: @account_id,
    data_source_id: @data_source_id,
    user_id: login_user_id,
    gio_id: login_user_id,
    attributes: props,
    timestamp: current_timestamp)
  @event_queue['collect_user'] ||= [] 
  @event_queue['collect_user'] << user
end
send_data() click to toggle source
# File lib/growing/ruby/sdk/client.rb, line 63
def send_data
  @event_queue['collect_user'].to_a.in_groups_of(100) do |group|
    user_list = ::Protocol::UserList.new
    group.each do |user|
      user_list['values'] << user
    end
    _send_data('collect_user', JSON.parse(::Protocol::UserList.encode_json(user_list))["values"])
  end
  @event_queue['collect_cstm'].to_a.in_groups_of(100) do |group|
    event_list = ::Protocol::EventList.new
    group.each do |event|
      event_list['values'] << event
    end
    _send_data('collect_cstm', JSON.parse(::Protocol::EventList.encode_json(event_list))["values"])
  end
  @event_queue = {}
end

Private Instance Methods

_send_data(action, data) click to toggle source
# File lib/growing/ruby/sdk/client.rb, line 90
def _send_data(action, data)
  Faraday.post(url(action), "#{data}", "Content-Type" => "application/json")
rescue
  pp 'Error'
end
current_timestamp() click to toggle source
# File lib/growing/ruby/sdk/client.rb, line 100
def current_timestamp
  ::DateTime.now.strftime('%Q').to_i
end
url(action) click to toggle source
# File lib/growing/ruby/sdk/client.rb, line 96
def url(action)
  "#{@api_host}/projects/#{@account_id}/#{action.gsub('_', '/')}"
end