class PredictionIO::EventClient

This class contains methods that interface with the PredictionIO Event Server via the PredictionIO Event API using REST requests.

Many REST request methods support optional arguments. They can be supplied to these methods as Hash'es. For a complete reference, please visit prediction.io.

High-performance Asynchronous Backend

All REST request methods come in both synchronous and asynchronous flavors. Both flavors accept the same set of arguments. In addition, all synchronous request methods can instead accept a PredictionIO::AsyncResponse object generated from asynchronous request methods as its first argument. In this case, the method will block until a response is received from it.

Any network reconnection and request retry is automatically handled in the background. Exceptions will be thrown after a request times out to avoid infinite blocking.

Installation

The easiest way is to use RubyGems:

gem install predictionio

Synopsis

In most cases, using synchronous methods. If you have a special performance requirement, you may want to take a look at asynchronous methods.

Instantiate an EventClient

# Include the PredictionIO SDK
require 'predictionio'

client = PredictionIO::EventClient.new(<access_key>)

Import a User Record from Your App (with asynchronous/non-blocking

requests)

#
# (your user registration logic)
#

uid = get_user_from_your_db()

# PredictionIO call to create user
response = client.aset_user(uid)

#
# (other work to do for the rest of the page)
#

begin
  # PredictionIO call to retrieve results from an asynchronous response
  result = client.set_user(response)
rescue PredictionIO::EventClient::NotCreatedError => e
  log_and_email_error(...)
end

Import a User Action (Rate) from Your App (with synchronous/blocking

requests)
# PredictionIO call to record the view action
begin
  result = client.record_user_action_on_item('rate', 'foouser',
                                             'baritem',
                                             'rating' => 4)
rescue PredictionIO::EventClient::NotCreatedError => e
  ...
end

Public Class Methods

new(access_key, apiurl = 'http://localhost:7070', threads = 1, thread_timeout = 60) click to toggle source

Create a new PredictionIO Event Client with defaults:

  • 1 concurrent HTTP(S) connections (threads)

  • API entry point at localhost:7070 (apiurl)

  • a 60-second timeout for each HTTP(S) connection (thread_timeout)

# File lib/predictionio/event_client.rb, line 87
def initialize(access_key, apiurl = 'http://localhost:7070', threads = 1, thread_timeout = 60)
  @access_key = access_key
  @http = PredictionIO::Connection.new(URI(apiurl), threads, thread_timeout)
end

Public Instance Methods

get_status() click to toggle source

Returns PredictionIO's status in string.

# File lib/predictionio/event_client.rb, line 98
def get_status
  status = @http.aget(PredictionIO::AsyncRequest.new('/')).get
  begin
    status.body
  rescue
    status
  end
end
pending_requests() click to toggle source

Returns the number of pending requests within the current client.

# File lib/predictionio/event_client.rb, line 93
def pending_requests
  @http.packages.size
end

Protected Instance Methods

sync_events(sync_m, *args) click to toggle source

Internal helper method. Do not call directly.

# File lib/predictionio/event_client.rb, line 110
def sync_events(sync_m, *args)
  if args[0].is_a?(PredictionIO::AsyncResponse)
    response = args[0].get
  else
    response = send(sync_m, *args).get
  end
  return response if response.is_a?(Net::HTTPCreated)
  begin
    msg = response.body
  rescue
    raise NotCreatedError, response
  end
  fail NotCreatedError, msg
end

Asynchronous Methods

↑ top

Public Instance Methods

acreate_event(event, entity_type, entity_id, optional = {}) click to toggle source

Asynchronously request to create an event and return a PredictionIO::AsyncResponse object immediately.

Corresponding REST API method: POST /events.json

See also create_event.

# File lib/predictionio/event_client.rb, line 134
def acreate_event(event, entity_type, entity_id, optional = {})
  h = optional
  h.key?('eventTime') || h['eventTime'] = DateTime.now.to_s
  h['event'] = event
  h['entityType'] = entity_type
  h['entityId'] = entity_id
  @http.apost(PredictionIO::AsyncRequest.new(
    "/events.json?accessKey=#{@access_key}", h.to_json
  ))
end
adelete_item(uid) click to toggle source

Asynchronously request to delete an item and return a PredictionIO::AsyncResponse object immediately.

Corresponding REST API method: POST /events.json

See also delete_item.

# File lib/predictionio/event_client.rb, line 297
def adelete_item(uid)
  acreate_event('$delete', 'item', uid)
end
adelete_user(uid) click to toggle source

Asynchronously request to delete a user and return a PredictionIO::AsyncResponse object immediately.

Corresponding REST API method: POST /events.json

See also delete_user.

# File lib/predictionio/event_client.rb, line 219
def adelete_user(uid)
  acreate_event('$delete', 'user', uid)
end
arecord_user_action_on_item(action, uid, iid, optional = {}) click to toggle source

Asynchronously request to record an action on an item and return a PredictionIO::AsyncResponse object immediately.

Corresponding REST API method: POST /events.json

See also record_user_action_on_item.

# File lib/predictionio/event_client.rb, line 321
def arecord_user_action_on_item(action, uid, iid, optional = {})
  optional['targetEntityType'] = 'item'
  optional['targetEntityId'] = iid
  acreate_event(action, 'user', uid, optional)
end
aset_item(iid, optional = {}) click to toggle source

Asynchronously request to set properties of an item and return a PredictionIO::AsyncResponse object immediately.

Corresponding REST API method: POST /events.json

See also set_item.

# File lib/predictionio/event_client.rb, line 243
def aset_item(iid, optional = {})
  acreate_event('$set', 'item', iid, optional)
end
aset_user(uid, optional = {}) click to toggle source

Asynchronously request to set properties of a user and return a PredictionIO::AsyncResponse object immediately.

Corresponding REST API method: POST /events.json

See also set_user.

# File lib/predictionio/event_client.rb, line 165
def aset_user(uid, optional = {})
  acreate_event('$set', 'user', uid, optional)
end
aunset_item(iid, optional) click to toggle source

Asynchronously request to unset properties of an item and return a PredictionIO::AsyncResponse object immediately.

properties must be a non-empty Hash.

Corresponding REST API method: POST /events.json

See also unset_item.

# File lib/predictionio/event_client.rb, line 269
def aunset_item(iid, optional)
  optional.key?('properties') ||
    fail(ArgumentError, 'properties must be present when event is $unset')
  optional['properties'].empty? &&
    fail(ArgumentError, 'properties cannot be empty when event is $unset')
  acreate_event('$unset', 'item', iid, optional)
end
aunset_user(uid, optional) click to toggle source

Asynchronously request to unset properties of a user and return a PredictionIO::AsyncResponse object immediately.

properties must be a non-empty Hash.

Corresponding REST API method: POST /events.json

See also unset_user.

# File lib/predictionio/event_client.rb, line 191
def aunset_user(uid, optional)
  optional.key?('properties') ||
    fail(ArgumentError, 'properties must be present when event is $unset')
  optional['properties'].empty? &&
    fail(ArgumentError, 'properties cannot be empty when event is $unset')
  acreate_event('$unset', 'user', uid, optional)
end

Synchronous Methods

↑ top

Public Instance Methods

create_event(event, entity_type, entity_id, optional = {}) click to toggle source
create_event(async_response)

Synchronously request to create an event and block until a response is received.

See also acreate_event.

# File lib/predictionio/event_client.rb, line 154
def create_event(*args)
  sync_events(:acreate_event, *args)
end
delete_item(uid) click to toggle source
delete_item(async_response)

Synchronously request to delete an item and block until a response is received.

See also adelete_item.

# File lib/predictionio/event_client.rb, line 310
def delete_item(*args)
  sync_events(:adelete_item, *args)
end
delete_user(uid) click to toggle source
delete_user(async_response)

Synchronously request to delete a user and block until a response is received.

See also adelete_user.

# File lib/predictionio/event_client.rb, line 232
def delete_user(*args)
  sync_events(:adelete_user, *args)
end
record_user_action_on_item(action, uid, iid, optional = {}) click to toggle source
record_user_action_on_item(async_response)

Synchronously request to record an action on an item and block until a response is received.

See also arecord_user_action_on_item.

# File lib/predictionio/event_client.rb, line 336
def record_user_action_on_item(*args)
  sync_events(:arecord_user_action_on_item, *args)
end
set_item(iid, properties = {}, optional = {}) click to toggle source
set_item(async_response)

Synchronously request to set properties of an item and block until a response is received.

See also aset_item.

# File lib/predictionio/event_client.rb, line 256
def set_item(*args)
  sync_events(:aset_item, *args)
end
set_user(uid, optional = {}) click to toggle source
set_user(async_response)

Synchronously request to set properties of a user and block until a response is received.

See also aset_user.

# File lib/predictionio/event_client.rb, line 178
def set_user(*args)
  sync_events(:aset_user, *args)
end
unset_item(iid, properties, optional = {}) click to toggle source
unset_item(async_response)

Synchronously request to unset properties of an item and block until a response is received.

See also aunset_item.

# File lib/predictionio/event_client.rb, line 286
def unset_item(*args)
  sync_events(:aunset_item, *args)
end
unset_user(uid, optional) click to toggle source
unset_user(async_response)

Synchronously request to unset properties of a user and block until a response is received.

See also aunset_user.

# File lib/predictionio/event_client.rb, line 208
def unset_user(*args)
  sync_events(:aunset_user, *args)
end