Class: PredictionIO::EventClient
- Inherits:
-
Object
- Object
- PredictionIO::EventClient
- Defined in:
- lib/predictionio/event_client.rb
Overview
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
Defined Under Namespace
Classes: NotCreatedError
Instance Method Summary collapse
-
#acreate_batch_event(payload) ⇒ Object
:category: Asynchronous Methods Asynchronously request to create a batch of event and return a PredictionIO::AsyncResponse object immediately.
-
#acreate_event(event, entity_type, entity_id, optional = {}) ⇒ Object
:category: Asynchronous Methods Asynchronously request to create an event and return a PredictionIO::AsyncResponse object immediately.
-
#adelete_item(uid) ⇒ Object
:category: Asynchronous Methods Asynchronously request to delete an item and return a PredictionIO::AsyncResponse object immediately.
-
#adelete_user(uid) ⇒ Object
:category: Asynchronous Methods Asynchronously request to delete a user and return a PredictionIO::AsyncResponse object immediately.
-
#arecord_user_action_on_item(action, uid, iid, optional = {}) ⇒ Object
:category: Asynchronous Methods Asynchronously request to record an action on an item and return a PredictionIO::AsyncResponse object immediately.
-
#aset_item(iid, optional = {}) ⇒ Object
:category: Asynchronous Methods Asynchronously request to set properties of an item and return a PredictionIO::AsyncResponse object immediately.
-
#aset_user(uid, optional = {}) ⇒ Object
:category: Asynchronous Methods Asynchronously request to set properties of a user and return a PredictionIO::AsyncResponse object immediately.
-
#aunset_item(iid, optional) ⇒ Object
:category: Asynchronous Methods Asynchronously request to unset properties of an item and return a PredictionIO::AsyncResponse object immediately.
-
#aunset_user(uid, optional) ⇒ Object
:category: Asynchronous Methods Asynchronously request to unset properties of a user and return a PredictionIO::AsyncResponse object immediately.
-
#create_batch_event(payload) ⇒ Object
:category: Synchronous Methods Synchronously request to create an event and block until a response is received.
-
#create_event(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to create an event and block until a response is received.
-
#delete_item(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to delete an item and block until a response is received.
-
#delete_user(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to delete a user and block until a response is received.
- #event_path_with_main_params(options) ⇒ Object
-
#get_status ⇒ Object
Returns PredictionIO’s status in string.
-
#initialize(access_key, apiurl = 'http://localhost:7070', threads = 1, thread_timeout = 60) ⇒ EventClient
constructor
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).
-
#pending_requests ⇒ Object
Returns the number of pending requests within the current client.
-
#record_user_action_on_item(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to record an action on an item and block until a response is received.
-
#set_item(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to set properties of an item and block until a response is received.
-
#set_user(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to set properties of a user and block until a response is received.
-
#unset_item(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to unset properties of an item and block until a response is received.
-
#unset_user(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to unset properties of a user and block until a response is received.
Constructor Details
#initialize(access_key, apiurl = 'http://localhost:7070', threads = 1, thread_timeout = 60) ⇒ EventClient
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)
101 102 103 104 |
# File 'lib/predictionio/event_client.rb', line 101 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 |
Instance Method Details
#acreate_batch_event(payload) ⇒ Object
:category: Asynchronous Methods Asynchronously request to create a batch of event and return a PredictionIO::AsyncResponse object immediately.
Corresponding REST API method: POST /batch/events.json
See also #acreate_event.
151 152 153 154 155 |
# File 'lib/predictionio/event_client.rb', line 151 def acreate_batch_event(payload) @http.apost(PredictionIO::AsyncRequest.new( "/batch/events.json?accessKey=#{@access_key}", payload.to_json )) end |
#acreate_event(event, entity_type, entity_id, optional = {}) ⇒ Object
:category: Asynchronous Methods Asynchronously request to create an event and return a PredictionIO::AsyncResponse object immediately.
Corresponding REST API method: POST /events.json
See also #create_event.
128 129 130 131 132 133 134 135 |
# File 'lib/predictionio/event_client.rb', line 128 def acreate_event(event, entity_type, entity_id, optional = {}) h = optional.with_indifferent_access h.key?('eventTime') || h['eventTime'] = DateTime.now.iso8601 h['event'] = event h['entityType'] = entity_type h['entityId'] = entity_id @http.apost(PredictionIO::AsyncRequest.new(event_path_with_main_params(h), h.except(:channel).to_json)) end |
#adelete_item(uid) ⇒ Object
:category: Asynchronous Methods Asynchronously request to delete an item and return a PredictionIO::AsyncResponse object immediately.
Corresponding REST API method: POST /events.json
See also #delete_item.
322 323 324 |
# File 'lib/predictionio/event_client.rb', line 322 def adelete_item(uid) acreate_event('$delete', 'item', uid) end |
#adelete_user(uid) ⇒ Object
:category: Asynchronous Methods Asynchronously request to delete a user and return a PredictionIO::AsyncResponse object immediately.
Corresponding REST API method: POST /events.json
See also #delete_user.
244 245 246 |
# File 'lib/predictionio/event_client.rb', line 244 def adelete_user(uid) acreate_event('$delete', 'user', uid) end |
#arecord_user_action_on_item(action, uid, iid, optional = {}) ⇒ Object
:category: Asynchronous Methods 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.
346 347 348 349 350 |
# File 'lib/predictionio/event_client.rb', line 346 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 = {}) ⇒ Object
:category: Asynchronous Methods 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.
268 269 270 |
# File 'lib/predictionio/event_client.rb', line 268 def aset_item(iid, optional = {}) acreate_event('$set', 'item', iid, optional) end |
#aset_user(uid, optional = {}) ⇒ Object
:category: Asynchronous Methods 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.
190 191 192 |
# File 'lib/predictionio/event_client.rb', line 190 def aset_user(uid, optional = {}) acreate_event('$set', 'user', uid, optional) end |
#aunset_item(iid, optional) ⇒ Object
:category: Asynchronous Methods 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.
294 295 296 297 298 299 300 |
# File 'lib/predictionio/event_client.rb', line 294 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) ⇒ Object
:category: Asynchronous Methods 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.
216 217 218 219 220 221 222 |
# File 'lib/predictionio/event_client.rb', line 216 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 |
#create_batch_event(payload) ⇒ Object
:category: Synchronous Methods Synchronously request to create an event and block until a response is received.
See also #acreate_event.
call-seq: create_batch_event(payload) create_batch_event(async_response)
179 180 181 |
# File 'lib/predictionio/event_client.rb', line 179 def create_batch_event(payload) sync_events(:acreate_batch_event, payload) end |
#create_event(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to create an event and block until a response is received.
See also #acreate_event.
call-seq: create_event(event, entity_type, entity_id, optional = {}) create_event(async_response)
166 167 168 |
# File 'lib/predictionio/event_client.rb', line 166 def create_event(*args) sync_events(:acreate_event, *args) end |
#delete_item(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to delete an item and block until a response is received.
See also #adelete_item.
call-seq: delete_item(uid) delete_item(async_response)
335 336 337 |
# File 'lib/predictionio/event_client.rb', line 335 def delete_item(*args) sync_events(:adelete_item, *args) end |
#delete_user(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to delete a user and block until a response is received.
See also #adelete_user.
call-seq: delete_user(uid) delete_user(async_response)
257 258 259 |
# File 'lib/predictionio/event_client.rb', line 257 def delete_user(*args) sync_events(:adelete_user, *args) end |
#event_path_with_main_params(options) ⇒ Object
137 138 139 140 141 142 |
# File 'lib/predictionio/event_client.rb', line 137 def event_path_with_main_params() result = "/events.json?accessKey=#{@access_key}" result += "&channel=#{[:channel]}" if [:channel] result end |
#get_status ⇒ Object
Returns PredictionIO’s status in string.
112 113 114 115 116 117 118 119 |
# File 'lib/predictionio/event_client.rb', line 112 def get_status status = @http.aget(PredictionIO::AsyncRequest.new('/')).get begin status.body rescue status end end |
#pending_requests ⇒ Object
Returns the number of pending requests within the current client.
107 108 109 |
# File 'lib/predictionio/event_client.rb', line 107 def pending_requests @http.packages.size end |
#record_user_action_on_item(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to record an action on an item and block until a response is received.
See also #arecord_user_action_on_item.
call-seq: record_user_action_on_item(action, uid, iid, optional = {}) record_user_action_on_item(async_response)
361 362 363 |
# File 'lib/predictionio/event_client.rb', line 361 def record_user_action_on_item(*args) sync_events(:arecord_user_action_on_item, *args) end |
#set_item(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to set properties of an item and block until a response is received.
See also #aset_item.
call-seq: set_item(iid, properties = {}, optional = {}) set_item(async_response)
281 282 283 |
# File 'lib/predictionio/event_client.rb', line 281 def set_item(*args) sync_events(:aset_item, *args) end |
#set_user(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to set properties of a user and block until a response is received.
See also #aset_user.
call-seq: set_user(uid, optional = {}) set_user(async_response)
203 204 205 |
# File 'lib/predictionio/event_client.rb', line 203 def set_user(*args) sync_events(:aset_user, *args) end |
#unset_item(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to unset properties of an item and block until a response is received.
See also #aunset_item.
call-seq: unset_item(iid, properties, optional = {}) unset_item(async_response)
311 312 313 |
# File 'lib/predictionio/event_client.rb', line 311 def unset_item(*args) sync_events(:aunset_item, *args) end |
#unset_user(*args) ⇒ Object
:category: Synchronous Methods Synchronously request to unset properties of a user and block until a response is received.
See also #aunset_user.
call-seq: unset_user(uid, optional) unset_user(async_response)
233 234 235 |
# File 'lib/predictionio/event_client.rb', line 233 def unset_user(*args) sync_events(:aunset_user, *args) end |