analytics-psw 0.3.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/README.md +40 -35
- data/lib/analytics-psw.rb +68 -103
- data/lib/analytics-psw/customers.rb +2 -4
- data/lib/analytics-psw/dimension_properties.rb +13 -15
- data/lib/analytics-psw/dimensions.rb +9 -8
- data/lib/analytics-psw/event_types.rb +7 -6
- data/lib/analytics-psw/events.rb +14 -28
- data/lib/analytics-psw/reports.rb +14 -17
- data/lib/analytics-psw/services.rb +4 -20
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc5f45c2fc5deddf6aaa8691267c0b9c35dc6dd1
|
4
|
+
data.tar.gz: 19c47b727954c89593d81699ae7e99abb12e7c6a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45d8663fca8091a4df8645a7a4924e7ff0a503453ac08aec9e2a1ad4912349604cbbf95b072e400c045471ddad5392ef5e43ba6dca21c73d7ead6059a36f2c8a
|
7
|
+
data.tar.gz: b5768b05c9382ca82351331b86a2edc42afdff7189f76b28c2323da7b580fecb3ba3c79220931336bcafa4319e39b83cc21962bd19eef5b3cc7959cf3beab7da
|
data/README.md
CHANGED
@@ -27,12 +27,15 @@ require 'yaml' #optional, for importing information used to connect to the Analy
|
|
27
27
|
``` ruby
|
28
28
|
opts = {}
|
29
29
|
opts['server_url'] = "http://my.server.url" #required No trailing slash needed
|
30
|
-
opts['service'] = "MyServiceName" #required Calling AnalyticsPSW.new searches for your service
|
31
|
-
opts['proxy'] = "http://proxy.server.address" #optional Not required if you don't use a proxy server or if you set the http_proxy environment variable
|
30
|
+
opts['service'] = "MyServiceName" #required Calling AnalyticsPSW::Analytics.new searches for your service. It must exist prior to using the GEM.
|
31
|
+
opts['proxy'] = "http://proxy.server.address" #optional Not required if you don't use a proxy server or if you set the http_proxy environment variable.
|
32
|
+
#required for multi-get (run multiple get requests in parallel)
|
33
|
+
opts['client_id'] = "fjdksl98s2jkljf" #required for the GEM to manage your Oath2 token
|
34
|
+
opts['client_secret'] = "jkdsl89sf9s" #required for the GEM to manage your Oath2 token
|
32
35
|
opts['event_types'] = ["event_one", "event_two", "event_three"] #optional Creates event types to associate with your service if they don't already exist
|
33
36
|
opts['dimensions'] = [{"dimension_name" => "string"}, {"dimension_2" => "integer"}] #optional Creates dimensions to describe your events if they don't already exist
|
34
37
|
|
35
|
-
ap = AnalyticsPSW.new(opts)
|
38
|
+
ap = AnalyticsPSW::Analytics.new(opts)
|
36
39
|
```
|
37
40
|
|
38
41
|
### Options in separate .yml file
|
@@ -46,6 +49,10 @@ ap = AnalyticsPSW.new(YAML.load_file(analytics_settings.yml))
|
|
46
49
|
---
|
47
50
|
server_url: http://127.0.0.1:3000
|
48
51
|
service: my_service
|
52
|
+
|
53
|
+
client_id=fjdksl98s2jkljf
|
54
|
+
client_secret=jkdsl89sf9s
|
55
|
+
|
49
56
|
event_types:
|
50
57
|
- event_one
|
51
58
|
- event_two
|
@@ -58,37 +65,34 @@ dimensions:
|
|
58
65
|
## Available Methods
|
59
66
|
|
60
67
|
``` ruby
|
61
|
-
ap.record_event(event_type, metadata = {}
|
62
|
-
|
63
|
-
ap.query_analytics(query_parameters
|
64
|
-
ap.create_report(name, query_parameters
|
65
|
-
ap.list_reports
|
66
|
-
ap.report_criteria(report_name
|
67
|
-
ap.run_report(report_name, where_criteria
|
68
|
-
ap.delete_report(report_name
|
69
|
-
|
70
|
-
ap.multi_query_analytics(query_parameters_array
|
71
|
-
|
72
|
-
ap.
|
73
|
-
ap.
|
74
|
-
|
75
|
-
ap.
|
76
|
-
ap.
|
77
|
-
|
78
|
-
|
79
|
-
ap.
|
80
|
-
ap.
|
81
|
-
|
82
|
-
ap.
|
83
|
-
|
84
|
-
ap.
|
85
|
-
ap.
|
86
|
-
|
87
|
-
ap.
|
88
|
-
ap.
|
89
|
-
ap.create_or_update_dimension_properties(dimension_name, dimension_value, property_hash, token=nil) # Add properties to a dimension value if they already exist. Updates the properties otherwise. Use this method to add mutable string data to dimensions. For example, add a title to a video by adding a title property to the video's guid.
|
90
|
-
ap.show_dimension_properties(dimension_name, dimension_value, token=nil) # List the properties currently set for a dimension value. The body will be JSON.
|
91
|
-
ap.list_dimension_properties(dimension_name, token=nil) # List all properties for a dimension. This returns a JSON object with an array of JSON/location pairs.
|
68
|
+
ap.record_event(event_type, metadata = {}) # Send an event to the Analytics service. The event_type must already exist in the Analytics system. 'event_type' can either be a string or symbol
|
69
|
+
|
70
|
+
ap.query_analytics(query_parameters) # Send a hashmap query to the Analytics service and return an AnalyticsReport object. Required keys for query_parameters include one or more of :sum, :avg, :stddev, :fields. Optional keys are :customer, :where, :group_by, :order_by, :iterate_by, :limit. Use comma-separated strings for multiple values. The keys :sum, :avg, and :stddev return aggregates that prepend and append the key name with two underscores. For example, the sum aggregate would return as "__SUM__<field_name>".
|
71
|
+
ap.create_report(name, query_parameters) # Create a report query to run later. Required keys for query_parameters include one or more of :sum, :avg, :stddev, :fields. Optional keys are :customer, :where, :group_by, :order_by, :iterate_by, :limit. Use comma-separated strings for multiple values.
|
72
|
+
ap.list_reports # List all reports for a service
|
73
|
+
ap.report_criteria(report_name) # List the properties for a report. 'report_name' can either be a string or symbol
|
74
|
+
ap.run_report(report_name, where_criteria) # Run a stored report and return an AnalyticsReport object. The 'where_criteria' are options 'where' parameters to replace in the stored report when running. 'report_name' can either be a string or symbol
|
75
|
+
ap.delete_report(report_name) # Delete a stored report. 'report_name' can either be a string or symbol
|
76
|
+
|
77
|
+
ap.multi_query_analytics(query_parameters_array) # Run multiple simultaneous queries. Send an array of hashmaps of query parameters to return an array of AnalyticsReport objects.
|
78
|
+
|
79
|
+
ap.show_service_resource(service_name) # List available resources for a service. 'service_name' can either be a string or symbol
|
80
|
+
ap.show_service_metadata(service_name) # List the metadata for a service. 'service_name' can either be a string or symbol
|
81
|
+
|
82
|
+
ap.create_event_type(name, description = "") # Create an event type for a service. 'name' can either be a string or symbol
|
83
|
+
ap.list_event_types # List all event types for a service
|
84
|
+
ap.show_event_type(event_type_name) # List the metadata for an event type. 'event_type_name' can either be a string or symbol
|
85
|
+
|
86
|
+
ap.create_dimension(name, data_type, units = "", description = "") # Create a new dimension. Only name and data_type are required. 'name' can either be a string or symbol
|
87
|
+
ap.list_dimensions # List all dimensions for a service
|
88
|
+
ap.show_dimension_resources(dimension_name) # List available resources for a dimension. 'dimension_name' can either be a string or symbol
|
89
|
+
ap.show_dimension_metadata(dimension_name) # List metadata for a dimension. 'dimension_name' can either be a string or symbol
|
90
|
+
|
91
|
+
ap.create_dimension_properties(dimension_name, dimension_value, property_hash) # Add properties to a dimension value. This returns a 409 message if properties already exist. Use this method to add mutable string data to dimensions. For example, add a title to a video by adding a title property to the video's guid.
|
92
|
+
ap.update_dimension_properties(dimension_name, dimension_value, property_hash) # Update properties created for a dimension value. The hash replaces all properties currently set.
|
93
|
+
ap.create_or_update_dimension_properties(dimension_name, dimension_value, property_hash) # Add properties to a dimension value if they already exist. Updates the properties otherwise. Use this method to add mutable string data to dimensions. For example, add a title to a video by adding a title property to the video's guid.
|
94
|
+
ap.show_dimension_properties(dimension_name, dimension_value) # List the properties currently set for a dimension value. The body will be JSON.
|
95
|
+
ap.list_dimension_properties(dimension_name) # List all properties for a dimension. This returns a JSON object with an array of JSON/location pairs.
|
92
96
|
```
|
93
97
|
### AnalyticReport object
|
94
98
|
|
@@ -129,6 +133,7 @@ end
|
|
129
133
|
|
130
134
|
## Query Parameters
|
131
135
|
|
136
|
+
|
132
137
|
| Parameter | Values | Examples |
|
133
138
|
| -------------------| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
134
139
|
| ` sum ` |` any event or number dimension ` | ` { "sum" => "plays" } or { "sum" => "plays,process_time" } ` |
|
@@ -173,4 +178,4 @@ Note: `iterate_by` always uses the global `event_time` dimension.
|
|
173
178
|
|
174
179
|
## License
|
175
180
|
|
176
|
-
|
181
|
+
2014 Lexmark International Technology S.A. All rights reserved.
|
data/lib/analytics-psw.rb
CHANGED
@@ -1,31 +1,19 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
3
|
require 'eventmachine'
|
4
4
|
require 'em-http'
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
6
|
+
require 'analytics-psw/reports'
|
7
|
+
require 'analytics-psw/services'
|
8
|
+
require 'analytics-psw/event_types'
|
9
|
+
require 'analytics-psw/events'
|
10
|
+
require 'analytics-psw/dimension_properties'
|
11
|
+
require 'analytics-psw/dimensions'
|
12
|
+
require 'analytics-psw/customers'
|
13
13
|
|
14
14
|
module AnalyticsPSW
|
15
15
|
class Analytics
|
16
16
|
|
17
|
-
API_URL = "/services"
|
18
|
-
JSON_CONTENT_TYPE = "application/json"
|
19
|
-
SUM_CRITERIA_PARAM = "sum"
|
20
|
-
AVG_CRITERIA_PARAM = "avg"
|
21
|
-
|
22
|
-
PARSED_RESPONSE = {
|
23
|
-
body: 'body',
|
24
|
-
location: 'location',
|
25
|
-
status: 'status',
|
26
|
-
error_message: 'error_message'
|
27
|
-
}
|
28
|
-
|
29
17
|
include AnalyticsPSW::Customers,
|
30
18
|
AnalyticsPSW::Reports,
|
31
19
|
AnalyticsPSW::Services,
|
@@ -35,62 +23,44 @@ module AnalyticsPSW
|
|
35
23
|
AnalyticsPSW::DimensionProperties
|
36
24
|
|
37
25
|
attr_accessor :service_location
|
38
|
-
attr_reader :conn
|
39
26
|
|
40
27
|
def initialize(opts = {})
|
41
28
|
set_vars_from_opts(opts)
|
42
|
-
@conn
|
43
|
-
|
44
|
-
@service_location = "#{@server_url}
|
45
|
-
find_or_create_event_types
|
29
|
+
@conn = faraday_connection
|
30
|
+
update_token if @client_id
|
31
|
+
@service_location = "#{@server_url}/services/#{@service_name}"
|
32
|
+
find_or_create_event_types
|
46
33
|
find_or_create_dimensions(@dimensions) if @dimensions
|
47
34
|
end
|
48
35
|
|
49
36
|
private
|
50
37
|
|
51
38
|
def set_vars_from_opts(opts)
|
52
|
-
@server_url = opts[
|
53
|
-
@service_name = opts[
|
54
|
-
raise
|
55
|
-
@
|
56
|
-
@proxy =
|
57
|
-
@
|
58
|
-
@
|
59
|
-
@
|
60
|
-
@
|
61
|
-
@client_secret = opts["client_secret"]
|
62
|
-
end
|
63
|
-
|
64
|
-
def get_token(token=nil)
|
65
|
-
return token unless token.nil?
|
66
|
-
return @token unless @token.nil?
|
67
|
-
@client_id.nil? ? @token : update_token
|
39
|
+
@server_url = opts['server_url'] ? opts['server_url'].chomp('/') : nil
|
40
|
+
@service_name = opts['service']
|
41
|
+
raise 'Please ensure you have provided the appropriate server url and service name' unless @server_url && @service_name && @service_name != ''
|
42
|
+
@proxy = opts['proxy']
|
43
|
+
@proxy = '' if @server_url.start_with?('http://127.0.0.1') or @server_url.start_with?('http://localhost')
|
44
|
+
@event_types = opts['event_types'] || []
|
45
|
+
@dimensions = opts['dimensions'] || []
|
46
|
+
@client_id = opts['client_id']
|
47
|
+
@client_secret = opts['client_secret']
|
68
48
|
end
|
69
49
|
|
70
50
|
def update_token
|
71
51
|
url = "#{@server_url}/oauth/token?client_id=#{@client_id}&client_secret=#{@client_secret}"
|
72
|
-
raw =
|
52
|
+
raw = post_json(url, 'token', {})
|
73
53
|
parse_raw = parse_json_response(raw)
|
74
54
|
resp = parse_raw['body']
|
75
55
|
@token = resp['access_token']
|
76
56
|
end
|
77
57
|
|
78
|
-
def
|
79
|
-
|
80
|
-
|
81
|
-
req.url url
|
82
|
-
req.headers["Content-Type"] = JSON_CONTENT_TYPE
|
83
|
-
req.body = json_object
|
84
|
-
end
|
85
|
-
conn.send(http_method, &json_block)
|
58
|
+
def get_json(url, params = {})
|
59
|
+
headers = @token ? {'Authorization' => "Bearer #{@token}"} : nil
|
60
|
+
@conn.get(url, params, headers)
|
86
61
|
end
|
87
62
|
|
88
|
-
def
|
89
|
-
headers = {'Authorization' => "Bearer #{get_token(token)}"}
|
90
|
-
conn.get(url, params, headers)
|
91
|
-
end
|
92
|
-
|
93
|
-
def multi_get_json(service_location, query_parameters, token=nil)
|
63
|
+
def multi_get_json(service_location, query_parameters)
|
94
64
|
results = []
|
95
65
|
|
96
66
|
EventMachine.run do
|
@@ -101,7 +71,7 @@ module AnalyticsPSW
|
|
101
71
|
|
102
72
|
query_parameters.each_with_index do |param, idx|
|
103
73
|
http = EventMachine::HttpRequest.new(service_location, connection_opts)
|
104
|
-
req = http.get query: param, head: {'Authorization' => "Bearer #{
|
74
|
+
req = http.get query: param, head: {'Authorization' => "Bearer #{@token}"}
|
105
75
|
multi.add idx, req
|
106
76
|
end
|
107
77
|
|
@@ -120,23 +90,23 @@ module AnalyticsPSW
|
|
120
90
|
results
|
121
91
|
end
|
122
92
|
|
123
|
-
def post_json(url, object_type, metadata
|
124
|
-
http_json(:post, url, object_type, metadata
|
93
|
+
def post_json(url, object_type, metadata)
|
94
|
+
http_json(:post, url, object_type, metadata)
|
125
95
|
end
|
126
96
|
|
127
|
-
def put_json(url, object_type, metadata
|
128
|
-
http_json(:put, url, object_type, metadata
|
97
|
+
def put_json(url, object_type, metadata)
|
98
|
+
http_json(:put, url, object_type, metadata)
|
129
99
|
end
|
130
100
|
|
131
|
-
def http_json(http_method, url, object_type, metadata
|
101
|
+
def http_json(http_method, url, object_type, metadata)
|
132
102
|
json_object = create_json_object(object_type, metadata)
|
133
103
|
json_block = ->(req) do
|
134
104
|
req.url url
|
135
|
-
req.headers[
|
136
|
-
req.headers[
|
137
|
-
req.body
|
105
|
+
req.headers['Content-Type'] = 'application/json'
|
106
|
+
req.headers['Authorization']= "Bearer #{@token}" if @token
|
107
|
+
req.body = json_object
|
138
108
|
end
|
139
|
-
conn.send(http_method, &json_block)
|
109
|
+
@conn.send(http_method, &json_block)
|
140
110
|
end
|
141
111
|
|
142
112
|
def create_json_object(object_type, metadata = {})
|
@@ -144,53 +114,51 @@ module AnalyticsPSW
|
|
144
114
|
end
|
145
115
|
|
146
116
|
def create_metadata(hashmap)
|
147
|
-
hashmap.reject { |k,v| v ==
|
117
|
+
hashmap.reject { |k,v| v == '' }
|
148
118
|
end
|
149
119
|
|
150
|
-
def find_or_create_event_types
|
151
|
-
all_event_types =
|
152
|
-
|
153
|
-
|
154
|
-
end
|
155
|
-
event_types.each do |event_type|
|
120
|
+
def find_or_create_event_types
|
121
|
+
all_event_types = get_all_events
|
122
|
+
new_events = @event_types - all_event_types
|
123
|
+
new_events.each do |event_type|
|
156
124
|
create_event_type(event_type)
|
157
125
|
end
|
158
|
-
event_types
|
126
|
+
@event_types |= all_event_types
|
159
127
|
end
|
160
128
|
|
161
129
|
def find_or_create_dimensions(dimensions)
|
162
130
|
all_dimensions = get_all_dimension_names
|
163
131
|
dimensions.each do |dimension|
|
164
132
|
dimension.each do |name, data_type|
|
165
|
-
|
133
|
+
unless all_dimensions.include?(name)
|
134
|
+
create_dimension(name, data_type)
|
135
|
+
all_dimensions << name
|
136
|
+
end
|
166
137
|
end
|
167
138
|
end
|
139
|
+
@dimensions = all_dimensions
|
168
140
|
end
|
169
141
|
|
170
|
-
def
|
171
|
-
|
172
|
-
|
173
|
-
dimensions["dimensions"].each do |one_dimension|
|
174
|
-
dimension_names << one_dimension["name"]
|
175
|
-
end
|
176
|
-
dimension_names
|
142
|
+
def get_all_events
|
143
|
+
event_types = list_event_types['body']['event_types']
|
144
|
+
event_types ? event_types.map{|e| e['name']} : []
|
177
145
|
end
|
178
146
|
|
179
|
-
def
|
180
|
-
|
181
|
-
|
147
|
+
def get_all_dimension_names
|
148
|
+
dimensions = list_dimensions['body']['dimensions']
|
149
|
+
dimensions ? dimensions.map { |d| d['name']} : []
|
182
150
|
end
|
183
151
|
|
184
152
|
def parse_json_response(json_response)
|
185
153
|
parsed_response = {}
|
186
|
-
parsed_response[
|
154
|
+
parsed_response['status'] = json_response.status if json_response.status.present?
|
187
155
|
|
188
156
|
if [200, 201, 202].include?(json_response.status)
|
189
|
-
parsed_response[
|
190
|
-
parsed_response[
|
157
|
+
parsed_response['body'] = JSON.parse(json_response.body) if json_response.body.present?
|
158
|
+
parsed_response['location'] = json_response.headers['location'] if json_response.headers.present? && json_response.headers['location']
|
191
159
|
else
|
192
|
-
parsed_response[
|
193
|
-
parsed_response[
|
160
|
+
parsed_response['body'] = {}
|
161
|
+
parsed_response['error_message'] = json_response.body
|
194
162
|
end
|
195
163
|
|
196
164
|
parsed_response
|
@@ -198,27 +166,24 @@ module AnalyticsPSW
|
|
198
166
|
|
199
167
|
def multi_parse_json_response(response)
|
200
168
|
parsed_response = {}
|
201
|
-
parsed_response[
|
169
|
+
parsed_response['status'] = response.response_header.present? ? response.response_header.status : 500
|
202
170
|
|
203
|
-
|
204
|
-
|
205
|
-
parsed_response[
|
206
|
-
parsed_response[PARSED_RESPONSE[:location]] = response.headers.location if response.headers.present? && response.headers.location.present?
|
171
|
+
if [200, 201, 202].include?(parsed_response['status'])
|
172
|
+
parsed_response['body'] = JSON.parse response.response if response.response.present?
|
173
|
+
parsed_response['location'] = response.headers.location if response.headers.present? && response.headers.location.present?
|
207
174
|
else
|
208
|
-
parsed_response[
|
209
|
-
parsed_response[
|
175
|
+
parsed_response['body'] = {}
|
176
|
+
parsed_response['error_message'] = response.error if response.error.present?
|
210
177
|
end
|
211
178
|
parsed_response
|
212
179
|
end
|
213
180
|
|
214
|
-
def delete_resource(url
|
215
|
-
conn.delete (url + "?access_token=#{
|
181
|
+
def delete_resource(url)
|
182
|
+
@conn.delete (url + "?access_token=#{@token}")
|
216
183
|
end
|
217
184
|
|
218
185
|
def faraday_connection
|
219
|
-
|
220
|
-
Faraday.new(@server_url, {proxy: {uri: @proxy}})
|
186
|
+
@proxy ? Faraday.new(@server_url, {proxy: {uri: @proxy}}) : Faraday.new(@server_url)
|
221
187
|
end
|
222
|
-
|
223
188
|
end
|
224
189
|
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
module AnalyticsPSW
|
2
2
|
module Customers
|
3
|
-
|
4
|
-
|
5
|
-
resp = get_json("#{@service_location}/customers", token)
|
3
|
+
def list_customers
|
4
|
+
resp = get_json("#{@service_location}/customers")
|
6
5
|
parse_json_response(resp)
|
7
6
|
end
|
8
|
-
|
9
7
|
end
|
10
8
|
end
|
11
9
|
|
@@ -1,30 +1,29 @@
|
|
1
1
|
module AnalyticsPSW
|
2
2
|
module DimensionProperties
|
3
|
-
|
4
|
-
|
5
|
-
resp = get_json("#{@service_location}/dimensions/#{dimension_name.to_s}/properties", token)
|
3
|
+
def list_dimension_properties(dimension_name)
|
4
|
+
resp = get_json("#{@service_location}/dimensions/#{dimension_name}/properties")
|
6
5
|
parse_json_response(resp)
|
7
6
|
end
|
8
7
|
|
9
|
-
def show_dimension_properties(dimension_name, dimension_value
|
10
|
-
resp = get_json("#{@service_location}/dimensions/#{dimension_name
|
8
|
+
def show_dimension_properties(dimension_name, dimension_value)
|
9
|
+
resp = get_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}")
|
11
10
|
parse_json_response(resp)
|
12
11
|
end
|
13
12
|
|
14
|
-
def create_dimension_properties(dimension_name, dimension_value, properties = {}
|
13
|
+
def create_dimension_properties(dimension_name, dimension_value, properties = {})
|
15
14
|
metadata = create_dimension_properties_metadata(dimension_value, properties)
|
16
|
-
response = post_json("#{@service_location}/dimensions/#{dimension_name
|
15
|
+
response = post_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", 'dimension_property', metadata)
|
17
16
|
parse_json_response(response)
|
18
17
|
end
|
19
18
|
|
20
|
-
def update_dimension_properties(dimension_name, dimension_value, properties = {}
|
19
|
+
def update_dimension_properties(dimension_name, dimension_value, properties = {})
|
21
20
|
metadata = create_dimension_properties_metadata(dimension_value, properties)
|
22
|
-
response = put_json("#{@service_location}/dimensions/#{dimension_name
|
21
|
+
response = put_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", 'dimension_property', metadata)
|
23
22
|
parse_json_response(response)
|
24
23
|
end
|
25
24
|
|
26
|
-
def create_or_update_dimension_properties(dimension_name, dimension_value, properties = {}
|
27
|
-
dimension_property_exists?(dimension_name, dimension_value
|
25
|
+
def create_or_update_dimension_properties(dimension_name, dimension_value, properties = {})
|
26
|
+
dimension_property_exists?(dimension_name, dimension_value) ? update_dimension_properties(dimension_name, dimension_value, properties) : create_dimension_properties(dimension_name, dimension_value, properties)
|
28
27
|
end
|
29
28
|
|
30
29
|
private
|
@@ -32,15 +31,14 @@ module AnalyticsPSW
|
|
32
31
|
def create_dimension_properties_metadata(dimension_value, properties)
|
33
32
|
dimension_properties_body = {'value' => dimension_value, 'properties' => {}}
|
34
33
|
properties.each do |key, value|
|
35
|
-
dimension_properties_body['properties'][key] = value unless value ==
|
34
|
+
dimension_properties_body['properties'][key] = value unless value == ''
|
36
35
|
end
|
37
36
|
dimension_properties_body
|
38
37
|
end
|
39
38
|
|
40
|
-
def dimension_property_exists? (dimension_name, dimension_value
|
41
|
-
dim_properties = list_dimension_properties(dimension_name
|
39
|
+
def dimension_property_exists? (dimension_name, dimension_value)
|
40
|
+
dim_properties = list_dimension_properties(dimension_name)['body']
|
42
41
|
dim_properties[dimension_name].present? && dim_properties[dimension_name] == dimension_value
|
43
42
|
end
|
44
|
-
|
45
43
|
end
|
46
44
|
end
|
@@ -1,24 +1,25 @@
|
|
1
1
|
module AnalyticsPSW
|
2
2
|
module Dimensions
|
3
3
|
|
4
|
-
def create_dimension(name, data_type, units =
|
4
|
+
def create_dimension(name, data_type, units = '', description = '')
|
5
5
|
metadata = create_metadata({:name => name.to_s, :description => description, :data_type => data_type, :units => units})
|
6
|
-
resp = post_json("#{@service_location}/dimensions", "dimension", metadata
|
6
|
+
resp = post_json("#{@service_location}/dimensions", "dimension", metadata)
|
7
|
+
@dimensions |= [name.to_s] if resp.status && [200, 201, 202].include?(resp.status)
|
7
8
|
parse_json_response(resp)
|
8
9
|
end
|
9
10
|
|
10
|
-
def list_dimensions
|
11
|
-
resp = get_json("#{@service_location}/dimensions"
|
11
|
+
def list_dimensions
|
12
|
+
resp = get_json("#{@service_location}/dimensions")
|
12
13
|
parse_json_response(resp)
|
13
14
|
end
|
14
15
|
|
15
|
-
def show_dimension_resources(dimension_name
|
16
|
-
resp = get_json("#{@service_location}/dimensions/#{dimension_name
|
16
|
+
def show_dimension_resources(dimension_name)
|
17
|
+
resp = get_json("#{@service_location}/dimensions/#{dimension_name}")
|
17
18
|
parse_json_response(resp)
|
18
19
|
end
|
19
20
|
|
20
|
-
def show_dimension_metadata(dimension_name
|
21
|
-
resp = get_json("#{@service_location}/dimensions/#{dimension_name
|
21
|
+
def show_dimension_metadata(dimension_name)
|
22
|
+
resp = get_json("#{@service_location}/dimensions/#{dimension_name}/metadata")
|
22
23
|
parse_json_response(resp)
|
23
24
|
end
|
24
25
|
|
@@ -1,19 +1,20 @@
|
|
1
1
|
module AnalyticsPSW
|
2
2
|
module EventTypes
|
3
3
|
|
4
|
-
def create_event_type(name, description = ""
|
4
|
+
def create_event_type(name, description = "")
|
5
5
|
metadata = create_metadata({:name => name.to_s, :description => description})
|
6
|
-
resp = post_json("#{@service_location}/event_types", "event_type", metadata
|
6
|
+
resp = post_json("#{@service_location}/event_types", "event_type", metadata)
|
7
|
+
@event_types |= [name.to_s] if resp.status && [200, 201, 202].include?(resp.status)
|
7
8
|
parse_json_response(resp)
|
8
9
|
end
|
9
10
|
|
10
|
-
def list_event_types
|
11
|
-
resp = get_json("#{@service_location}/event_types"
|
11
|
+
def list_event_types
|
12
|
+
resp = get_json("#{@service_location}/event_types")
|
12
13
|
parse_json_response(resp)
|
13
14
|
end
|
14
15
|
|
15
|
-
def show_event_type(event_name
|
16
|
-
resp = get_json("#{@service_location}/event_types/#{event_name.to_s}"
|
16
|
+
def show_event_type(event_name)
|
17
|
+
resp = get_json("#{@service_location}/event_types/#{event_name.to_s}")
|
17
18
|
parse_json_response(resp)
|
18
19
|
end
|
19
20
|
|
data/lib/analytics-psw/events.rb
CHANGED
@@ -1,45 +1,31 @@
|
|
1
1
|
module AnalyticsPSW
|
2
2
|
module Events
|
3
3
|
|
4
|
-
def record_event(event_type, metadata = {}
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
else
|
10
|
-
invalid_metadata_response
|
11
|
-
end
|
4
|
+
def record_event(event_type, metadata = {})
|
5
|
+
return invalid_event_type_response unless event_type_exists? event_type
|
6
|
+
return invalid_metadata_response unless dimensions_exist? metadata
|
7
|
+
metadata[:event_type] = event_type.to_s
|
8
|
+
parse_json_response(post_json("#{@service_location}/events", 'event', metadata))
|
12
9
|
end
|
13
10
|
|
14
11
|
private
|
15
12
|
|
16
|
-
def
|
17
|
-
|
18
|
-
event_type_exists?(event_type, token) && dimensions_exist?(metadata, token)
|
19
|
-
end
|
20
|
-
|
21
|
-
def event_type_exists?(current_event_type, token)
|
22
|
-
get_list_of_event_types(token).map {|d| d['name']}.include?(current_event_type)
|
23
|
-
end
|
24
|
-
|
25
|
-
def get_list_of_event_types(token)
|
26
|
-
event_types_response = list_event_types(token)
|
27
|
-
event_types_body = event_types_response['body']
|
28
|
-
event_types_body['event_types']
|
13
|
+
def event_type_exists?(current_event_type)
|
14
|
+
@event_types.include? current_event_type
|
29
15
|
end
|
30
16
|
|
31
|
-
def dimensions_exist?(metadata
|
32
|
-
|
17
|
+
def dimensions_exist?(metadata)
|
18
|
+
metadata.keys.each do |key|
|
19
|
+
return false unless @dimensions.include? key
|
20
|
+
end
|
33
21
|
end
|
34
22
|
|
35
|
-
def
|
36
|
-
|
37
|
-
dimensions_body = dimensions_response['body']
|
38
|
-
dimensions_body['dimensions']
|
23
|
+
def invalid_event_type_response
|
24
|
+
{'status' => 422, 'body' => {}, 'error_message' => 'Invalid event type for service.'}
|
39
25
|
end
|
40
26
|
|
41
27
|
def invalid_metadata_response
|
42
|
-
{'status' => 422, 'body' => {}, 'error_message' => 'Invalid
|
28
|
+
{'status' => 422, 'body' => {}, 'error_message' => 'Invalid dimensions for service.'}
|
43
29
|
end
|
44
30
|
|
45
31
|
end
|
@@ -4,47 +4,44 @@ require 'analytics_report_field'
|
|
4
4
|
module AnalyticsPSW
|
5
5
|
module Reports
|
6
6
|
|
7
|
-
def query_analytics(query_parameters
|
8
|
-
raw_report = get_json("#{@service_location}/reports/query.json",
|
7
|
+
def query_analytics(query_parameters)
|
8
|
+
raw_report = get_json("#{@service_location}/reports/query.json", query_parameters)
|
9
9
|
parsed_report = parse_json_response(raw_report)
|
10
|
-
|
11
10
|
create_analytics_report(parsed_report)
|
12
11
|
end
|
13
12
|
|
14
|
-
def multi_query_analytics(query_parameters
|
15
|
-
raw_reports = multi_get_json("#{@service_location}/reports/query.json", query_parameters
|
16
|
-
|
13
|
+
def multi_query_analytics(query_parameters)
|
14
|
+
raw_reports = multi_get_json("#{@service_location}/reports/query.json", query_parameters)
|
17
15
|
raw_reports.map do |raw_report|
|
18
16
|
create_analytics_report(raw_report)
|
19
17
|
end
|
20
18
|
|
21
19
|
end
|
22
20
|
|
23
|
-
def create_report(name, query_parameters
|
21
|
+
def create_report(name, query_parameters)
|
24
22
|
query_parameters[:name] = name.to_s
|
25
|
-
resp = post_json("#{@service_location}/reports",
|
23
|
+
resp = post_json("#{@service_location}/reports", 'report', query_parameters )
|
26
24
|
parse_json_response(resp)
|
27
25
|
end
|
28
26
|
|
29
|
-
def list_reports
|
30
|
-
resp = get_json("#{@service_location}/reports"
|
27
|
+
def list_reports
|
28
|
+
resp = get_json("#{@service_location}/reports")
|
31
29
|
parse_json_response(resp)
|
32
30
|
end
|
33
31
|
|
34
|
-
def report_criteria(report_name
|
35
|
-
resp = get_json("#{@service_location}/reports/#{report_name.to_s}/criteria"
|
32
|
+
def report_criteria(report_name)
|
33
|
+
resp = get_json("#{@service_location}/reports/#{report_name.to_s}/criteria")
|
36
34
|
parse_json_response(resp)
|
37
35
|
end
|
38
36
|
|
39
|
-
def run_report(report_name, where_criteria = {}
|
40
|
-
raw_report = get_json("#{@service_location}/reports/#{report_name.to_s}/results",
|
37
|
+
def run_report(report_name, where_criteria = {})
|
38
|
+
raw_report = get_json("#{@service_location}/reports/#{report_name.to_s}/results", where_criteria)
|
41
39
|
parsed_report = parse_json_response(raw_report)
|
42
|
-
|
43
40
|
create_analytics_report(parsed_report)
|
44
41
|
end
|
45
42
|
|
46
|
-
def delete_report(report_name
|
47
|
-
resp = delete_resource("#{@service_location}/reports/#{report_name.to_s}"
|
43
|
+
def delete_report(report_name)
|
44
|
+
resp = delete_resource("#{@service_location}/reports/#{report_name.to_s}")
|
48
45
|
parse_json_response(resp)
|
49
46
|
end
|
50
47
|
|
@@ -1,29 +1,13 @@
|
|
1
1
|
module AnalyticsPSW
|
2
2
|
module Services
|
3
|
-
|
4
|
-
|
5
|
-
create_service_private(name.to_s, token)
|
6
|
-
end
|
7
|
-
|
8
|
-
def list_services(token=nil)
|
9
|
-
resp = get_json("/services", token)
|
10
|
-
parse_json_response(resp)
|
11
|
-
end
|
12
|
-
|
13
|
-
def show_service_resources(service_name, token=nil)
|
14
|
-
resp = get_json("/services/#{service_name.to_s}", token)
|
3
|
+
def show_service_resources(service_name)
|
4
|
+
resp = get_json("/services/#{service_name.to_s}")
|
15
5
|
parse_json_response(resp)
|
16
6
|
end
|
17
7
|
|
18
|
-
def show_service_metadata(service_name
|
19
|
-
resp = get_json("/services/#{service_name.to_s}/metadata"
|
8
|
+
def show_service_metadata(service_name)
|
9
|
+
resp = get_json("/services/#{service_name.to_s}/metadata")
|
20
10
|
parse_json_response(resp)
|
21
11
|
end
|
22
|
-
|
23
|
-
def delete_service(service_name, token=nil)
|
24
|
-
resp = delete_resource("/services/#{service_name.to_s}", token)
|
25
|
-
parse_json_response(resp)
|
26
|
-
end
|
27
|
-
|
28
12
|
end
|
29
13
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: analytics-psw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lexmark International Technology S.A
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: activemodel
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
description: Analytics-psw is a wrapper providing access to the Perceptive Cloud Platform
|
126
140
|
Analytics service
|
127
141
|
email:
|