datasift 2.1.1 → 3.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGELOG.md +100 -0
  4. data/Gemfile.lock +32 -0
  5. data/README.md +38 -79
  6. data/VERSION +1 -1
  7. data/datasift.gemspec +21 -24
  8. data/examples/auth.rb +44 -0
  9. data/examples/core_api_eg.rb +46 -0
  10. data/examples/historics_eg.rb +50 -0
  11. data/examples/historics_preview_eg.rb +30 -0
  12. data/examples/live_stream_eg.rb +89 -0
  13. data/examples/managed_source_eg.rb +56 -0
  14. data/examples/pull.rb +44 -0
  15. data/examples/push_eg.rb +56 -0
  16. data/lib/api/api_resource.rb +23 -0
  17. data/lib/datasift.rb +287 -14
  18. data/lib/errors.rb +59 -0
  19. data/lib/historics.rb +76 -0
  20. data/lib/historics_preview.rb +20 -0
  21. data/lib/live_stream.rb +53 -0
  22. data/lib/managed_source.rb +57 -0
  23. data/lib/push.rb +156 -0
  24. data/tests/core_api_test.rb +42 -0
  25. metadata +51 -73
  26. data/Rakefile +0 -34
  27. data/config.yml +0 -2
  28. data/examples/consume-stream.rb +0 -63
  29. data/examples/deletes.rb +0 -52
  30. data/examples/dpu.rb +0 -115
  31. data/examples/football-buffered.rb +0 -51
  32. data/examples/football.rb +0 -53
  33. data/examples/historics.sh +0 -2
  34. data/examples/historics/create-from-csdl.rb +0 -71
  35. data/examples/historics/create-from-hash.rb +0 -65
  36. data/examples/historics/delete.rb +0 -30
  37. data/examples/historics/env.rb +0 -37
  38. data/examples/historics/list.rb +0 -30
  39. data/examples/historics/start.rb +0 -30
  40. data/examples/historics/stop.rb +0 -30
  41. data/examples/historics/view.rb +0 -28
  42. data/examples/push.sh +0 -2
  43. data/examples/push/delete.rb +0 -33
  44. data/examples/push/env.rb +0 -53
  45. data/examples/push/list.rb +0 -30
  46. data/examples/push/pause.rb +0 -33
  47. data/examples/push/push-from-hash.rb +0 -72
  48. data/examples/push/push-historic-from-csdl.rb +0 -98
  49. data/examples/push/push-stream-from-csdl.rb +0 -70
  50. data/examples/push/resume.rb +0 -33
  51. data/examples/push/stop.rb +0 -33
  52. data/examples/push/view-log.rb +0 -45
  53. data/examples/push/view.rb +0 -31
  54. data/examples/twitter-track.rb +0 -61
  55. data/lib/DataSift/apiclient.rb +0 -73
  56. data/lib/DataSift/definition.rb +0 -202
  57. data/lib/DataSift/exceptions.rb +0 -33
  58. data/lib/DataSift/historic.rb +0 -316
  59. data/lib/DataSift/managed_source.rb +0 -263
  60. data/lib/DataSift/mockapiclient.rb +0 -44
  61. data/lib/DataSift/push_definition.rb +0 -115
  62. data/lib/DataSift/push_subscription.rb +0 -330
  63. data/lib/DataSift/stream_consumer.rb +0 -166
  64. data/lib/DataSift/stream_consumer_http.rb +0 -188
  65. data/lib/DataSift/user.rb +0 -311
  66. data/test/helper.rb +0 -95
  67. data/test/test_definition.rb +0 -273
  68. data/test/test_historics.rb +0 -233
  69. data/test/test_pushdefinition.rb +0 -92
  70. data/test/test_pushsubscription.rb +0 -17
  71. data/test/test_user.rb +0 -130
  72. data/test/testdata.yml +0 -30
@@ -1,31 +0,0 @@
1
- # This script views the details of Push subscriptions in your account.
2
- #
3
- # NB: Most of the error handling (exception catching) has been removed for
4
- # the sake of simplicity. Nearly everything in this library may throw
5
- # exceptions, and production code should catch them. See the documentation
6
- # for full details.
7
- #
8
-
9
- # Include the shared Env class
10
- require File.dirname(__FILE__) + '/env'
11
-
12
- # Create the env object. This reads the command line arguments, creates the
13
- # user object, and provides access to both along with helper functions.
14
- env = Env.new()
15
-
16
- # Make sure we have something to do
17
- abort('Please specify one or more subscription IDs') unless env.args.size() > 0
18
-
19
- for sub_id in env.args
20
- begin
21
- sub = env.user.getPushSubscription(sub_id)
22
- env.displaySubscriptionDetails(sub)
23
- rescue DataSift::DataSiftError => err
24
- puts 'ERR: [' + err.class.name + '] ' + err.message
25
- puts '--'
26
- end
27
- end
28
-
29
- if env.user.rate_limit_remaining != -1
30
- puts 'Rate limit remainining: ' + String(env.user.rate_limit_remaining)
31
- end
@@ -1,61 +0,0 @@
1
- # This example constructs a DataSift_Definition object with CSDL that looks
2
- # for anything containing the word "football". It then gets an HTTP
3
- # consumer for that definition and displays matching interactions to the
4
- # screen as they come in. It will display 10 interactions and then stop.
5
- #
6
- # NB: Most of the error handling (exception catching) has been removed for
7
- # the sake of simplicity. Nearly everything in this library may throw
8
- # exceptions, and production code should catch them. See the documentation
9
- # for full details.
10
- #
11
-
12
- # Make sure we have some arguments
13
- if ARGV.size == 0
14
- puts 'ERR: Please specify the words and/or phrases to track!'
15
- puts
16
- puts
17
- exit!
18
- end
19
-
20
- # Include the DataSift library
21
- require './' + File.dirname(__FILE__) + '/../lib/datasift'
22
-
23
- # Include the configuration - put your username and API key in this file
24
- require 'yaml'
25
- config = YAML::load(File.open(File.join(File.dirname(__FILE__), '..', 'config.yml')))
26
-
27
- # Authenticate
28
- puts 'Creating user...'
29
- user = DataSift::User.new(config['username'], config['api_key'])
30
-
31
- # Create the definition
32
- csdl = 'interaction.type == "twitter" and (interaction.content contains "' + ARGV.join('" or interaction.content contains "') + '")'
33
- puts 'Creating definition...'
34
- puts ' ' + csdl
35
- definition = user.createDefinition(csdl)
36
-
37
- # Create the consumer
38
- puts 'Getting the consumer...'
39
- consumer = definition.getConsumer(DataSift::StreamConsumer::TYPE_HTTP)
40
-
41
- # Setting up the onStopped handler
42
- consumer.onStopped do |reason|
43
- puts
44
- puts 'Stopped: ' + reason
45
- puts
46
- end
47
-
48
- # And start consuming
49
- puts 'Consuming...'
50
- puts '--'
51
- consumer.consume(true) do |interaction|
52
- if interaction
53
- puts 'Type: ' + interaction['interaction']['type']
54
- puts 'Content: ' + interaction['interaction']['content']
55
- puts '--'
56
- end
57
- end
58
-
59
- puts
60
- puts 'Finished consuming'
61
- puts
@@ -1,73 +0,0 @@
1
- require 'rest_client'
2
- require 'yajl'
3
-
4
- module DataSift
5
- #The ApiClient class wraps the functionality that makes calls to the
6
- #DataSift API.
7
- class ApiClient
8
- #Make a call to a DataSift API endpoint.
9
- #=== Parameters
10
- #* +user+ - The DataSift User object.
11
- #* +endpoint+ - The endpoint of the API call.
12
- #* +params+ - The parameters to be passed along with the request.
13
- #=== Returns
14
- #A Hash contatining...
15
- #* +response_code+ - The HTTP response code.
16
- #* +data+ - A Hash containing the response data.
17
- #* +rate_limit+ - The total API credits you get per hour.
18
- #* +rate_limit_remaining+ - The number of API credits you have remaining for this hour.
19
- def call(user, endpoint, params = {}, user_agent = User::USER_AGENT)
20
- # Build the full endpoint URL
21
- url = 'http' + (user.use_ssl ? 's' : '') + '://' + User::API_BASE_URL + endpoint
22
-
23
- retval = {
24
- 'response_code' => 500,
25
- 'data' => { 'error' => 'Unknown error' },
26
- 'rate_limit' => -1,
27
- 'rate_limit_remaining' => -1,
28
- }
29
-
30
- begin
31
- # Make the call
32
- res = RestClient.post(url, params, { 'Auth' => user.username + ':' + user.api_key, 'User-Agent' => user_agent })
33
-
34
- # Success
35
- retval['response_code'] = res.code
36
-
37
- # Parse the JSON response
38
- retval['data'] = Yajl::Parser.parse(res)
39
-
40
- # Rate limit headers
41
- if (res.headers[:x_ratelimit_limit])
42
- retval['rate_limit'] = res.headers[:x_ratelimit_limit]
43
- end
44
-
45
- if (res.headers[:x_ratelimit_remaining])
46
- retval['rate_limit_remaining'] = res.headers[:x_ratelimit_remaining]
47
- end
48
- rescue RestClient::ExceptionWithResponse => err
49
- # Set the response code
50
- retval['response_code'] = err.http_code
51
-
52
- # And set the data
53
- retval['data'] = Yajl::Parser.parse(err.response)
54
- end
55
-
56
- return retval
57
- end
58
-
59
- private
60
-
61
- #Convert a Hash to an HTTP query string.
62
- #=== Parameters
63
- #* +hash+ - The Hash to convert.
64
- #=== Returns
65
- #A string containing the equivalent query string.
66
- def hashToQuerystring(hash)
67
- hash.keys.inject('') do |query_string, key|
68
- query_string << '&' unless key == hash.keys.first
69
- query_string << "#{URI.encode(key.to_s)}=#{URI.encode(hash[key].to_s)}"
70
- end
71
- end
72
- end
73
- end
@@ -1,202 +0,0 @@
1
- require 'date'
2
-
3
- module DataSift
4
- #The Definition class represents a stream definition.
5
- class Definition
6
- #The CSDL for this Definition.
7
- attr_reader :csdl
8
-
9
- #Constructor. A User object is required, and you can optionally supply a
10
- #default CSDL string.
11
- #=== Parameters
12
- #* +user+ - The DataSift::User object.
13
- #* +csdl+ - Optional default CSDL string.
14
- #* +hash+ - Optional default hash string.
15
- def initialize(user, csdl = '', hash = false)
16
- raise InvalidDataError, 'Please supply a valid User object when creating a Definition object.' unless user.is_a? DataSift::User
17
- @user = user
18
- clearHash()
19
- @hash = hash
20
- self.csdl = csdl
21
- @total_dpu = false
22
- @created_at = false
23
- end
24
-
25
- #CSDL getter
26
- def csdl
27
- raise InvalidDataError, 'The CSDL is not available' unless !@csdl.nil?
28
- return @csdl
29
- end
30
-
31
- #CSDL setter. Strips the incoming string and resets the hash if it's changed.
32
- def csdl=(csdl)
33
- if csdl.nil?
34
- @csdl = nil
35
- else
36
- raise InvalidDataError, 'The CSDL must be a string.' unless csdl.is_a? String
37
- csdl = csdl.strip
38
- clearHash() unless csdl == @csdl
39
- @csdl = csdl
40
- end
41
- end
42
-
43
- #Total DPU getter.
44
- def total_dpu
45
- compile() unless @total_dpu
46
- return @total_dpu
47
- end
48
-
49
- #Created at getter.
50
- def created_at
51
- compile() unless @created_at
52
- return @created_at
53
- end
54
-
55
- #Hash getter. If the hash has not yet been obtained the CSDL will be
56
- #compiled first.
57
- def hash
58
- if @hash == false
59
- compile()
60
- end
61
-
62
- return @hash
63
- end
64
-
65
- #Reset the hash to false. The effect of this is to mark the definition as
66
- #requiring compilation.
67
- def clearHash()
68
- @csdl = '' unless !@csdl.nil?
69
- @hash = false
70
- @total_dpu = false
71
- @created_at = false
72
- end
73
-
74
- #Call the DataSift API to compile this definition. On success it will
75
- #store the returned hash.
76
- def compile()
77
- raise InvalidDataError, 'Cannot compile an empty definition.' unless @csdl.length > 0
78
-
79
- begin
80
- res = @user.callAPI('compile', { 'csdl' => @csdl })
81
-
82
- if res.has_key?('hash')
83
- @hash = res['hash']
84
- else
85
- raise CompileFailedError, 'Compiled successfully but no hash in the response'
86
- end
87
-
88
- if res.has_key?('dpu')
89
- @total_dpu = Float(res['dpu'])
90
- else
91
- raise CompileFailedError, 'Compiled successfully but no DPU in the response'
92
- end
93
-
94
- if res.has_key?('created_at')
95
- @created_at = Date.parse(res['created_at'])
96
- else
97
- raise CompileFailedError, 'Compiled successfully but no created_at in the response'
98
- end
99
- rescue APIError => err
100
- clearHash()
101
-
102
- case err.http_code
103
- when 400
104
- raise CompileFailedError, err
105
- else
106
- raise APIError('Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.inspect + ']', err.http_code)
107
- end
108
- end
109
- end
110
-
111
- #Call the DataSift API to validate this definition. On success it will
112
- #store the details in the response.
113
- def validate()
114
- raise InvalidDataError, 'Cannot validate an empty definition.' unless @csdl.length > 0
115
-
116
- begin
117
- res = @user.callAPI('validate', { 'csdl' => @csdl })
118
-
119
- if res.has_key?('dpu')
120
- @total_dpu = Float(res['dpu'])
121
- else
122
- raise CompileFailedError, 'Validated successfully but no DPU in the response'
123
- end
124
-
125
- if res.has_key?('created_at')
126
- @created_at = Date.parse(res['created_at'])
127
- else
128
- raise CompileFailedError, 'Validated successfully but no created_at in the response'
129
- end
130
- rescue APIError => err
131
- clearHash()
132
-
133
- case err.http_code
134
- when 400
135
- raise CompileFailedError, err
136
- else
137
- raise APIError('Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.inspect + ']', err.http_code)
138
- end
139
- end
140
- end
141
-
142
- #Call the DataSift API to get the DPU for this definition. Returns
143
- #=== Returns
144
- #A Hash containing...
145
- #* +detail+ - The breakdown of running the rule
146
- #* +dpu+ - The total DPU of the rule
147
- def getDPUBreakdown()
148
- raise InvalidDataError, "Cannot get the DPU for an empty definition." unless @csdl.length > 0
149
-
150
- @user.callAPI('dpu', { 'hash' => self.hash })
151
- end
152
-
153
- #Call the DataSift API to get buffered interactions.
154
- #=== Parameters
155
- #* +count+ - Optional number of interactions to return (max 200).
156
- #* +from_id+ - Optional start ID.
157
- #=== Returns
158
- #An array of Hashes where each Hash is an interaction.
159
- def getBuffered(count = false, from_id = false)
160
- raise InvalidDataError, "Cannot get buffered interactions for an empty definition." unless @csdl.length > 0
161
-
162
- params = { 'hash' => self.hash }
163
-
164
- if count
165
- params['count'] = count
166
- end
167
-
168
- if from_id
169
- params['interaction_id'] = from_id
170
- end
171
-
172
- retval = @user.callAPI('stream', params)
173
-
174
- raise APIError, 'No data in the response' unless retval.has_key?('stream')
175
-
176
- return retval['stream']
177
- end
178
-
179
- #Create a Historics query based on this Definition.
180
- #=== Parameters
181
- #* +start_date+ - The start date for a new Historics query.
182
- #* +end_date+ - The end date for a new Historics query.
183
- #* +sources+ - An array of sources for a new Historics query.
184
- #* +name+ - The name for a new Historics query.
185
- #* +sample+ - The sample rate for the new Historics query.
186
- #=== Returns
187
- #A Historic object.
188
- def createHistoric(start_date, end_date, sources, sample, name)
189
- return Historic.new(@user, hash, start_date, end_date, sources, sample, name)
190
- end
191
-
192
- #Returns a StreamConsumer-derived object for this definition, for the
193
- #given type.
194
- #=== Parameters
195
- #* +type+ - The consumer type for which to construct a consumer.
196
- #=== Returns
197
- #A StreamConsumer-derived object.
198
- def getConsumer(type = nil, on_interaction = nil, on_stopped = nil)
199
- StreamConsumer.factory(@user, type, self)
200
- end
201
- end
202
- end
@@ -1,33 +0,0 @@
1
- module DataSift
2
- # All exceptions inherit from DataSiftError.
3
- class DataSiftError < StandardError; end
4
-
5
- # Thrown when access to the API is denied.
6
- class AccessDeniedError < DataSiftError; end
7
-
8
- # Thrown when CSDL validation or compilation fails.
9
- class CompileFailedError < DataSiftError; end
10
-
11
- # Thrown whenever invalid data is encountered in the library.
12
- class InvalidDataError < DataSiftError; end
13
-
14
- # Thrown when you exceed your API rate limit.
15
- class RateLimitExceededError < DataSiftError; end
16
-
17
- # Thrown when error occur while reading streaming data.
18
- class StreamError < DataSiftError; end
19
-
20
- #Thrown when an error is found in API responses.
21
- #These errors optionally carry the HTTP error code.
22
- class APIError < DataSiftError
23
- #The HTTP status code.
24
- attr_reader :http_code
25
-
26
- #Constructor.
27
- #=== Parameters
28
- #* +http_code+ - Optional HTTP status code.
29
- def initialize(http_code = -1)
30
- @http_code = http_code
31
- end
32
- end
33
- end
@@ -1,316 +0,0 @@
1
- require 'date'
2
-
3
- module DataSift
4
- #The Historic class represents a Historics query.
5
- class Historic
6
- #Get a list of Historics queries in your account.
7
- #=== Parameters
8
- #* +user+ - The user object making the request.
9
- #* +page+ - The page number to get.
10
- #* +per_page+ - The number of items per page.
11
- #=== Returns
12
- #A Hash containing...
13
- #* +count+ - The total number of Historics queries in your account.
14
- #* +historics+ - An array of Hashes where each Hash is a Historics query.
15
- def self.list(user, page = 1, per_page = 20)
16
- begin
17
- res = user.callAPI(
18
- 'historics/get', {
19
- 'page' => page,
20
- 'max' => per_page
21
- })
22
-
23
- retval = { 'count' => res['count'], 'historics' => [] }
24
- for historic in res['data']
25
- retval['historics'].push(new(user, historic))
26
- end
27
- retval
28
- rescue APIError => err
29
- case err.http_code
30
- when 400
31
- # Missing or invalid parameters
32
- raise InvalidDataError, err
33
- else
34
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
35
- end
36
- end
37
- end
38
-
39
- #The ID of this Historics query.
40
- attr_reader :playback_id
41
- #The stream hash which this Historics query is executing.
42
- attr_reader :stream_hash
43
- #The friendly name for this Historics query.
44
- attr_reader :name
45
- #The start date for this Historics query.
46
- attr_reader :start_date
47
- #The end date for this Historics query.
48
- attr_reader :end_date
49
- #The date/time when this Historics query was created.
50
- attr_reader :created_at
51
- #The current status of this Historics query.
52
- attr_reader :status
53
- #The current progress in percent of this Historics query.
54
- attr_reader :progress
55
- #The data sources for which this Historics query is looking.
56
- attr_reader :sources
57
- #The sample percentage that this Historics query will match.
58
- attr_reader :sample
59
- #The DPU cost of running this Historics query.
60
- attr_reader :dpus
61
- #True if this Historics query has been deleted.
62
- attr_reader :is_deleted
63
-
64
- #Constructor. Pass all parameters to create a new Historics query, or provide a User object and a playback_id as the hash parameter to load an existing query from the API.
65
- #=== Parameters
66
- #* +user+ - The DataSift::User object.
67
- #* +hash+ - Either a stream_hash, an array containing the Historics query data or a playback ID.
68
- #* +start_date+ - The start date for a new Historics query.
69
- #* +end_date+ - The end date for a new Historics query.
70
- #* +sources+ - An array of sources for a new Historics query.
71
- #* +name+ - The name for a new Historics query.
72
- #* +sample+ - The sample rate for the new Historics query.
73
- def initialize(user, hash, start_date = false, end_date = false, sources = false, sample = false, name = false)
74
- raise InvalidDataError, 'Please supply a valid User object when creating a Historic object.' unless user.is_a? DataSift::User
75
- @user = user
76
-
77
- if not start_date
78
- if hash.kind_of?(Hash)
79
- # Initialising from an array
80
- @playback_id = hash['id']
81
- initFromArray(hash)
82
- else
83
- # Fetching from the API
84
- @playback_id = hash
85
- reloadData()
86
- end
87
- else
88
- # Creating a new Historic query, make sure we have all the parameters
89
- raise InvalidDataError,
90
- 'Please supply all parameters when creating a new Historics query' unless
91
- start_date != false and end_date != false and sources != false and
92
- name != false and sample != false
93
-
94
- # Convert and validate the parameters as required
95
- hash = hash.hash if hash.is_a? DataSift::Definition
96
- start_date = DateTime.strptime(start_date, '%s') unless start_date.is_a? Date
97
- end_date = DateTime.strptime(end_date, '%s') unless end_date.is_a? Date
98
- raise InvalidDataError, 'Please supply an array of sources' unless sources.kind_of?(Array)
99
-
100
- @playback_id = false
101
- @stream_hash = hash
102
- @start_date = start_date
103
- @end_date = end_date
104
- @sources = sources
105
- @name = name
106
- @sample = sample
107
- @progress = 0
108
- @dpus = false
109
- @availability = {}
110
- @is_deleted = false
111
- end
112
- end
113
-
114
- #Reload the data for this object from the API.
115
- def reloadData()
116
- #Can't do this if we've been deleted
117
- raise InvalidDataError, 'Cannot reload the data for a deleted Historics query' unless not @is_deleted
118
-
119
- #Can't do this without a playback ID
120
- raise InvalidDataError, 'Cannot reload the data with a Historics query with no playback ID' unless @playback_id
121
-
122
- begin
123
- initFromArray(@user.callAPI('historics/get', { 'id' => @playback_id }))
124
- rescue APIError => err
125
- case err.http_code
126
- when 400
127
- raise InvalidDataError, err
128
- else
129
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
130
- end
131
- end
132
- end
133
-
134
- #Initialise this obejct from the data in a Hash.
135
- #=== Parameters
136
- #* +data+ - The Hash containing the data.
137
- def initFromArray(data)
138
- raise APIError, 'No playback ID in the response' unless data.has_key?('id')
139
- raise APIError, 'Incorrect playback ID in the response' unless not @playback_id or data['id'] == @playback_id
140
- @playback_id = data['id']
141
-
142
- raise APIError, 'No definition hash in the response' unless data.has_key?('definition_id')
143
- @stream_hash = data['definition_id']
144
-
145
- raise APIError, 'No name in the response' unless data.has_key?('name')
146
- @name = data['name']
147
-
148
- raise APIError, 'No start timestamp in the response' unless data.has_key?('start')
149
- @start_date = DateTime.strptime(String(data['start']), '%s')
150
-
151
- raise APIError, 'No end timestamp in the response' unless data.has_key?('end')
152
- @end_date = DateTime.strptime(String(data['end']), '%s')
153
-
154
- raise APIError, 'No created at timstamp in the response' unless data.has_key?('created_at')
155
- @created_at = DateTime.strptime(String(data['created_at']), '%s')
156
-
157
- raise APIError, 'No status in the response' unless data.has_key?('status')
158
- @status = data['status']
159
-
160
- raise APIError, 'No progress in the response' unless data.has_key?('progress')
161
- @progress = data['progress']
162
-
163
- raise APIError, 'No sources in the response' unless data.has_key?('sources')
164
- @sources = data['sources']
165
-
166
- raise APIError, 'No sample in the response' unless data.has_key?('sample')
167
- @sample = data['sample']
168
-
169
- @is_deleted = (@status == 'deleted')
170
-
171
- return true
172
- end
173
-
174
- #Getter for the playback ID. If the Historics query has not yet been
175
- #prepared that will be done automagically to obtain the playback ID.
176
- def hash
177
- if @playback_id == false
178
- prepare()
179
- end
180
-
181
- @playback_id
182
- end
183
-
184
- #Name setter. Updates via the API if this Historics query has already
185
- #been prepared.
186
- def name=(new_name)
187
- raise InvalidDataError, 'Cannot set the name of a deleted Historics query' unless not @is_deleted
188
-
189
- if not @playback_id
190
- @name = new_name
191
- else
192
- @user.callAPI('historics/update', { 'id' => @playback_id, 'name' => new_name })
193
- reloadData()
194
- end
195
- end
196
-
197
- #Call the DataSift API to prepare this Historics query
198
- def prepare()
199
- raise InvalidDataError, 'Cannot prepare a deleted Historics query' unless not @is_deleted
200
- raise InvalidDataError, 'This Historics query has already been prepared' unless not @playback_id
201
-
202
- begin
203
- res = @user.callAPI(
204
- 'historics/prepare', {
205
- 'hash' => @stream_hash,
206
- 'start' => Integer(@start_date.strftime('%s')),
207
- 'end' => Integer(@end_date.strftime('%s')),
208
- 'name' => @name,
209
- 'sources' => @sources.join(','),
210
- 'sample' => @sample
211
- })
212
-
213
- raise InvalidDataError, 'Prepared successfully but no playback ID in the response' unless res.has_key?('id')
214
- @playback_id = res['id']
215
-
216
- raise InvalidDataError, 'Prepared successfully but no DPU cost in the response' unless res.has_key?('dpus')
217
- @dpus = res['dpus']
218
-
219
- raise InvalidDataError, 'Prepared successfully but no availability in the response' unless res.has_key?('availability')
220
- @availability = res['availability']
221
- rescue APIError => err
222
- case err.http_code
223
- when 400
224
- raise InvalidDataError, err
225
- else
226
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
227
- end
228
- end
229
-
230
- # Reload the data so we get the created_at date, initial status and the rest.
231
- reloadData()
232
- end
233
-
234
- #Start this Historics query.
235
- def start()
236
- raise InvalidDataError, 'Cannot start a deleted Historics query' unless not @is_deleted
237
- raise InvalidDataError, 'Cannot start a Historics query that hasn\'t been prepared' unless @playback_id
238
-
239
- begin
240
- res = @user.callAPI('historics/start', { 'id' => @playback_id })
241
- rescue APIError => err
242
- case err.http_code
243
- when 400
244
- # Missing or invalid parameters
245
- raise InvalidDataError, err
246
- when 404
247
- # Historics query not found
248
- raise InvalidDataError, err
249
- else
250
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
251
- end
252
- end
253
- end
254
-
255
- #Stop this Historics query.
256
- def stop()
257
- raise InvalidDataError, 'Cannot stop a deleted Historics query' unless not @is_deleted
258
- raise InvalidDataError, 'Cannot stop a Historics query that hasn\'t been prepared' unless @playback_id
259
-
260
- begin
261
- res = @user.callAPI('historics/stop', { 'id' => @playback_id })
262
- rescue APIError => err
263
- case err.http_code
264
- when 400
265
- # Missing or invalid parameters
266
- raise InvalidDataError, err
267
- when 404
268
- # Historics query not found
269
- raise InvalidDataError, err
270
- else
271
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
272
- end
273
- end
274
- end
275
-
276
- #Delete this Historics query.
277
- def delete()
278
- raise InvalidDataError, 'Cannot delete a deleted Historics query' unless not @is_deleted
279
- raise InvalidDataError, 'Cannot delete a Historics query that hasn\'t been prepared' unless @playback_id
280
-
281
- begin
282
- @user.callAPI('historics/delete', { 'id' => @playback_id })
283
- @is_deleted = true
284
- rescue APIError => err
285
- case err.http_code
286
- when 400
287
- # Missing or invalid parameters
288
- raise InvalidDataError, err
289
- when 404
290
- # Historics query not found
291
- raise InvalidDataError, err
292
- else
293
- raise APIError.new(err.http_code), 'Unexpected APIError code: ' + err.http_code.to_s + ' [' + err.message + ']'
294
- end
295
- end
296
- end
297
-
298
- #Get a page of Push subscriptions for this Historics query, where each
299
- #page contains up to per_page items. Results will be returned in the
300
- #order requested.
301
- #=== Parameters
302
- #* +page+ - The page number to get.
303
- #* +per_page+ - The number of items per page.
304
- #* +order_by+ - The field by which to order the results.
305
- #* +order_dir+ - Ascending or descending.
306
- #* +include_finished+ - True to include subscriptions against finished Historics queries.
307
- #=== Returns
308
- #A Hash containing...
309
- #* +count+ - The total number of Push subscriptions in your account.
310
- #* +subscriptions+ - An array of Hashes where each Hash is a Push subscription.
311
- def getPushSubscriptions(page = 1, per_page = 20, order_by = PushSubscription::ORDERBY_CREATED_AT, order_dir = PushSubscription::ORDERDIR_ASC)
312
- return PushSubscription.list(@user, page, per_page, order_by, order_dir, true, 'playback_id', @playback_id)
313
- end
314
- end
315
-
316
- end