analytics-psw 0.3.2 → 0.3.3
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/lib/analytics-psw.rb +6 -141
- data/lib/analytics-psw/customers.rb +1 -1
- data/lib/analytics-psw/dimension_properties.rb +6 -4
- data/lib/analytics-psw/dimensions.rb +24 -5
- data/lib/analytics-psw/event_types.rb +20 -4
- data/lib/analytics-psw/events.rb +2 -1
- data/lib/analytics-psw/reports.rb +7 -6
- data/lib/analytics-psw/services.rb +2 -2
- data/lib/analytics-psw/utilities.rb +85 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5bd2ac49dc5a4f6a747f7ee132c50bc7d5f7fdb
|
4
|
+
data.tar.gz: cecfcc3fb2835f8ec0063208699444d3a323a7bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ba8d918d1c2bd5d55afd34f23b1f707aa10560500c798db71905c51fcf9ec3e44820a4b8f40781f54525c235132def794cbf8c5ed0d637155e36308054478cf
|
7
|
+
data.tar.gz: e837e674a81bee0d9768d43d65f8a78d8be9b7e525feb27b3d52c406333313800198e7ba99e81348090cdd104be23052b47e32c0858ffb83ec265b216ee0cadc
|
data/lib/analytics-psw.rb
CHANGED
@@ -10,6 +10,7 @@ require 'analytics-psw/events'
|
|
10
10
|
require 'analytics-psw/dimension_properties'
|
11
11
|
require 'analytics-psw/dimensions'
|
12
12
|
require 'analytics-psw/customers'
|
13
|
+
require 'analytics-psw/utilities'
|
13
14
|
|
14
15
|
module AnalyticsPSW
|
15
16
|
class Analytics
|
@@ -20,15 +21,18 @@ module AnalyticsPSW
|
|
20
21
|
AnalyticsPSW::EventTypes,
|
21
22
|
AnalyticsPSW::Events,
|
22
23
|
AnalyticsPSW::Dimensions,
|
23
|
-
AnalyticsPSW::DimensionProperties
|
24
|
+
AnalyticsPSW::DimensionProperties,
|
25
|
+
AnalyticsPSW::Utilities
|
24
26
|
|
25
27
|
attr_accessor :service_location
|
26
28
|
|
27
29
|
def initialize(opts = {})
|
28
30
|
set_vars_from_opts(opts)
|
29
31
|
@conn = faraday_connection
|
30
|
-
update_token if @client_id
|
32
|
+
update_token if @client_id && @client_secret
|
31
33
|
@service_location = "#{@server_url}/services/#{@service_name}"
|
34
|
+
resp = http_request(:get, @service_location)
|
35
|
+
raise 'The service name provided does not appear to be valid' unless resp.status == 200
|
32
36
|
find_or_create_event_types
|
33
37
|
find_or_create_dimensions(@dimensions) if @dimensions
|
34
38
|
end
|
@@ -46,144 +50,5 @@ module AnalyticsPSW
|
|
46
50
|
@client_id = opts['client_id']
|
47
51
|
@client_secret = opts['client_secret']
|
48
52
|
end
|
49
|
-
|
50
|
-
def update_token
|
51
|
-
url = "#{@server_url}/oauth/token?client_id=#{@client_id}&client_secret=#{@client_secret}"
|
52
|
-
raw = post_json(url, 'token', {})
|
53
|
-
parse_raw = parse_json_response(raw)
|
54
|
-
resp = parse_raw['body']
|
55
|
-
@token = resp['access_token']
|
56
|
-
end
|
57
|
-
|
58
|
-
def get_json(url, params = {})
|
59
|
-
headers = @token ? {'Authorization' => "Bearer #{@token}"} : nil
|
60
|
-
@conn.get(url, params, headers)
|
61
|
-
end
|
62
|
-
|
63
|
-
def multi_get_json(service_location, query_parameters)
|
64
|
-
results = []
|
65
|
-
|
66
|
-
EventMachine.run do
|
67
|
-
multi = EventMachine::MultiRequest.new
|
68
|
-
|
69
|
-
connection_opts = {}
|
70
|
-
connection_opts = {proxy: {host: @proxy.sub(/^https?\:\/\//, ''), port: 80}} if @proxy.present?
|
71
|
-
|
72
|
-
query_parameters.each_with_index do |param, idx|
|
73
|
-
http = EventMachine::HttpRequest.new(service_location, connection_opts)
|
74
|
-
req = http.get query: param, head: {'Authorization' => "Bearer #{@token}"}
|
75
|
-
multi.add idx, req
|
76
|
-
end
|
77
|
-
|
78
|
-
multi.callback do
|
79
|
-
response = multi.responses[:callback]
|
80
|
-
error = multi.responses[:errback]
|
81
|
-
EventMachine.stop
|
82
|
-
|
83
|
-
(0..query_parameters.size-1).each do |idx|
|
84
|
-
results += [multi_parse_json_response(response[idx])] if response[idx].present?
|
85
|
-
results += [multi_parse_json_response(error[idx])] if error[idx].present?
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
results
|
91
|
-
end
|
92
|
-
|
93
|
-
def post_json(url, object_type, metadata)
|
94
|
-
http_json(:post, url, object_type, metadata)
|
95
|
-
end
|
96
|
-
|
97
|
-
def put_json(url, object_type, metadata)
|
98
|
-
http_json(:put, url, object_type, metadata)
|
99
|
-
end
|
100
|
-
|
101
|
-
def http_json(http_method, url, object_type, metadata)
|
102
|
-
json_object = create_json_object(object_type, metadata)
|
103
|
-
json_block = ->(req) do
|
104
|
-
req.url url
|
105
|
-
req.headers['Content-Type'] = 'application/json'
|
106
|
-
req.headers['Authorization']= "Bearer #{@token}" if @token
|
107
|
-
req.body = json_object
|
108
|
-
end
|
109
|
-
@conn.send(http_method, &json_block)
|
110
|
-
end
|
111
|
-
|
112
|
-
def create_json_object(object_type, metadata = {})
|
113
|
-
{object_type => metadata}.to_json
|
114
|
-
end
|
115
|
-
|
116
|
-
def create_metadata(hashmap)
|
117
|
-
hashmap.reject { |k,v| v == '' }
|
118
|
-
end
|
119
|
-
|
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|
|
124
|
-
create_event_type(event_type)
|
125
|
-
end
|
126
|
-
@event_types |= all_event_types
|
127
|
-
end
|
128
|
-
|
129
|
-
def find_or_create_dimensions(dimensions)
|
130
|
-
all_dimensions = get_all_dimension_names
|
131
|
-
dimensions.each do |dimension|
|
132
|
-
dimension.each do |name, data_type|
|
133
|
-
unless all_dimensions.include?(name)
|
134
|
-
create_dimension(name, data_type)
|
135
|
-
all_dimensions << name
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
@dimensions = all_dimensions
|
140
|
-
end
|
141
|
-
|
142
|
-
def get_all_events
|
143
|
-
event_types = list_event_types['body']['event_types']
|
144
|
-
event_types ? event_types.map{|e| e['name']} : []
|
145
|
-
end
|
146
|
-
|
147
|
-
def get_all_dimension_names
|
148
|
-
dimensions = list_dimensions['body']['dimensions']
|
149
|
-
dimensions ? dimensions.map { |d| d['name']} : []
|
150
|
-
end
|
151
|
-
|
152
|
-
def parse_json_response(json_response)
|
153
|
-
parsed_response = {}
|
154
|
-
parsed_response['status'] = json_response.status if json_response.status.present?
|
155
|
-
|
156
|
-
if [200, 201, 202].include?(json_response.status)
|
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']
|
159
|
-
else
|
160
|
-
parsed_response['body'] = {}
|
161
|
-
parsed_response['error_message'] = json_response.body
|
162
|
-
end
|
163
|
-
|
164
|
-
parsed_response
|
165
|
-
end
|
166
|
-
|
167
|
-
def multi_parse_json_response(response)
|
168
|
-
parsed_response = {}
|
169
|
-
parsed_response['status'] = response.response_header.present? ? response.response_header.status : 500
|
170
|
-
|
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?
|
174
|
-
else
|
175
|
-
parsed_response['body'] = {}
|
176
|
-
parsed_response['error_message'] = response.error if response.error.present?
|
177
|
-
end
|
178
|
-
parsed_response
|
179
|
-
end
|
180
|
-
|
181
|
-
def delete_resource(url)
|
182
|
-
@conn.delete (url + "?access_token=#{@token}")
|
183
|
-
end
|
184
|
-
|
185
|
-
def faraday_connection
|
186
|
-
@proxy ? Faraday.new(@server_url, {proxy: {uri: @proxy}}) : Faraday.new(@server_url)
|
187
|
-
end
|
188
53
|
end
|
189
54
|
end
|
@@ -1,24 +1,26 @@
|
|
1
1
|
module AnalyticsPSW
|
2
2
|
module DimensionProperties
|
3
3
|
def list_dimension_properties(dimension_name)
|
4
|
-
resp =
|
4
|
+
resp = http_request(:get, "#{@service_location}/dimensions/#{dimension_name}/properties")
|
5
5
|
parse_json_response(resp)
|
6
6
|
end
|
7
7
|
|
8
8
|
def show_dimension_properties(dimension_name, dimension_value)
|
9
|
-
resp =
|
9
|
+
resp = http_request(:get, "#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}")
|
10
10
|
parse_json_response(resp)
|
11
11
|
end
|
12
12
|
|
13
13
|
def create_dimension_properties(dimension_name, dimension_value, properties = {})
|
14
14
|
metadata = create_dimension_properties_metadata(dimension_value, properties)
|
15
|
-
|
15
|
+
body = create_json_body('dimension_property', metadata)
|
16
|
+
response = http_request(:post, "#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", nil, body)
|
16
17
|
parse_json_response(response)
|
17
18
|
end
|
18
19
|
|
19
20
|
def update_dimension_properties(dimension_name, dimension_value, properties = {})
|
20
21
|
metadata = create_dimension_properties_metadata(dimension_value, properties)
|
21
|
-
|
22
|
+
body = create_json_body('dimension_property', metadata)
|
23
|
+
response = http_request(:put, "#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", nil, body)
|
22
24
|
parse_json_response(response)
|
23
25
|
end
|
24
26
|
|
@@ -2,26 +2,45 @@ module AnalyticsPSW
|
|
2
2
|
module Dimensions
|
3
3
|
|
4
4
|
def create_dimension(name, data_type, units = '', description = '')
|
5
|
-
|
6
|
-
resp =
|
5
|
+
body = create_json_body('dimension', {:name => name.to_s, :description => description, :data_type => data_type, :units => units})
|
6
|
+
resp = http_request(:post, "#{@service_location}/dimensions", nil, body)
|
7
7
|
@dimensions |= [name.to_s] if resp.status && [200, 201, 202].include?(resp.status)
|
8
8
|
parse_json_response(resp)
|
9
9
|
end
|
10
10
|
|
11
11
|
def list_dimensions
|
12
|
-
resp =
|
12
|
+
resp = http_request(:get, "#{@service_location}/dimensions")
|
13
13
|
parse_json_response(resp)
|
14
14
|
end
|
15
15
|
|
16
16
|
def show_dimension_resources(dimension_name)
|
17
|
-
resp =
|
17
|
+
resp = http_request(:get, "#{@service_location}/dimensions/#{dimension_name}")
|
18
18
|
parse_json_response(resp)
|
19
19
|
end
|
20
20
|
|
21
21
|
def show_dimension_metadata(dimension_name)
|
22
|
-
resp =
|
22
|
+
resp = http_request(:get, "#{@service_location}/dimensions/#{dimension_name}/metadata")
|
23
23
|
parse_json_response(resp)
|
24
24
|
end
|
25
25
|
|
26
|
+
private
|
27
|
+
|
28
|
+
def find_or_create_dimensions(dimensions)
|
29
|
+
all_dimensions = get_dimension_names
|
30
|
+
dimensions.each do |dimension|
|
31
|
+
dimension.each do |name, data_type|
|
32
|
+
unless all_dimensions.include?(name)
|
33
|
+
create_dimension(name, data_type)
|
34
|
+
all_dimensions << name
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
@dimensions = all_dimensions
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_dimension_names
|
42
|
+
dimensions = list_dimensions['body']['dimensions']
|
43
|
+
dimensions ? dimensions.map { |d| d['name']} : []
|
44
|
+
end
|
26
45
|
end
|
27
46
|
end
|
@@ -2,21 +2,37 @@ module AnalyticsPSW
|
|
2
2
|
module EventTypes
|
3
3
|
|
4
4
|
def create_event_type(name, description = "")
|
5
|
-
|
6
|
-
resp =
|
5
|
+
body = create_json_body('event_type', {:name => name.to_s, :description => description})
|
6
|
+
resp = http_request(:post, "#{@service_location}/event_types", nil, body)
|
7
7
|
@event_types |= [name.to_s] if resp.status && [200, 201, 202].include?(resp.status)
|
8
8
|
parse_json_response(resp)
|
9
9
|
end
|
10
10
|
|
11
11
|
def list_event_types
|
12
|
-
resp =
|
12
|
+
resp = http_request(:get, "#{@service_location}/event_types")
|
13
13
|
parse_json_response(resp)
|
14
14
|
end
|
15
15
|
|
16
16
|
def show_event_type(event_name)
|
17
|
-
resp =
|
17
|
+
resp = http_request(:get, "#{@service_location}/event_types/#{event_name.to_s}")
|
18
18
|
parse_json_response(resp)
|
19
19
|
end
|
20
20
|
|
21
|
+
private
|
22
|
+
|
23
|
+
def find_or_create_event_types
|
24
|
+
all_event_types = get_event_names
|
25
|
+
new_events = @event_types - all_event_types
|
26
|
+
new_events.each do |event_type|
|
27
|
+
create_event_type(event_type)
|
28
|
+
end
|
29
|
+
@event_types |= all_event_types
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_event_names
|
33
|
+
event_types = list_event_types['body']['event_types']
|
34
|
+
event_types ? event_types.map{|e| e['name']} : []
|
35
|
+
end
|
36
|
+
|
21
37
|
end
|
22
38
|
end
|
data/lib/analytics-psw/events.rb
CHANGED
@@ -5,7 +5,8 @@ module AnalyticsPSW
|
|
5
5
|
return invalid_event_type_response unless event_type_exists? event_type
|
6
6
|
return invalid_metadata_response unless dimensions_exist? metadata
|
7
7
|
metadata[:event_type] = event_type.to_s
|
8
|
-
|
8
|
+
body = create_json_body('event', metadata)
|
9
|
+
parse_json_response(http_request(:post, "#{@service_location}/events", nil, body))
|
9
10
|
end
|
10
11
|
|
11
12
|
private
|
@@ -5,7 +5,7 @@ module AnalyticsPSW
|
|
5
5
|
module Reports
|
6
6
|
|
7
7
|
def query_analytics(query_parameters)
|
8
|
-
raw_report =
|
8
|
+
raw_report = http_request(:get, "#{@service_location}/reports/query.json", query_parameters)
|
9
9
|
parsed_report = parse_json_response(raw_report)
|
10
10
|
create_analytics_report(parsed_report)
|
11
11
|
end
|
@@ -20,28 +20,29 @@ module AnalyticsPSW
|
|
20
20
|
|
21
21
|
def create_report(name, query_parameters)
|
22
22
|
query_parameters[:name] = name.to_s
|
23
|
-
|
23
|
+
body = create_json_body('report', query_parameters)
|
24
|
+
resp = http_request(:post, "#{@service_location}/reports", nil, body)
|
24
25
|
parse_json_response(resp)
|
25
26
|
end
|
26
27
|
|
27
28
|
def list_reports
|
28
|
-
resp =
|
29
|
+
resp = http_request(:get, "#{@service_location}/reports")
|
29
30
|
parse_json_response(resp)
|
30
31
|
end
|
31
32
|
|
32
33
|
def report_criteria(report_name)
|
33
|
-
resp =
|
34
|
+
resp = http_request(:get, "#{@service_location}/reports/#{report_name}/criteria")
|
34
35
|
parse_json_response(resp)
|
35
36
|
end
|
36
37
|
|
37
38
|
def run_report(report_name, where_criteria = {})
|
38
|
-
raw_report =
|
39
|
+
raw_report = http_request(:get, "#{@service_location}/reports/#{report_name}/results", where_criteria)
|
39
40
|
parsed_report = parse_json_response(raw_report)
|
40
41
|
create_analytics_report(parsed_report)
|
41
42
|
end
|
42
43
|
|
43
44
|
def delete_report(report_name)
|
44
|
-
resp =
|
45
|
+
resp = http_request(:delete, "#{@service_location}/reports/#{report_name}")
|
45
46
|
parse_json_response(resp)
|
46
47
|
end
|
47
48
|
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module AnalyticsPSW
|
2
2
|
module Services
|
3
3
|
def show_service_resources(service_name)
|
4
|
-
resp =
|
4
|
+
resp = http_request(:get, "/services/#{service_name.to_s}")
|
5
5
|
parse_json_response(resp)
|
6
6
|
end
|
7
7
|
|
8
8
|
def show_service_metadata(service_name)
|
9
|
-
resp =
|
9
|
+
resp = http_request(:get, "/services/#{service_name.to_s}/metadata")
|
10
10
|
parse_json_response(resp)
|
11
11
|
end
|
12
12
|
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module AnalyticsPSW
|
2
|
+
module Utilities
|
3
|
+
private
|
4
|
+
|
5
|
+
def update_token
|
6
|
+
url = "#{@server_url}/oauth/token?client_id=#{@client_id}&client_secret=#{@client_secret}"
|
7
|
+
raw = http_request(:post, url)
|
8
|
+
resp = parse_json_response(raw)
|
9
|
+
@token = resp['body']['access_token']
|
10
|
+
end
|
11
|
+
|
12
|
+
def faraday_connection
|
13
|
+
@proxy ? Faraday.new(@server_url, {proxy: {uri: @proxy}}) : Faraday.new(@server_url)
|
14
|
+
end
|
15
|
+
|
16
|
+
def http_request(http_method, url, params = nil, body = nil)
|
17
|
+
json_block = ->(req) do
|
18
|
+
req.url url
|
19
|
+
req.headers['Content-Type'] = 'application/json'
|
20
|
+
req.headers['Authorization']= "Bearer #{@token}" if @token
|
21
|
+
req.params = params if params
|
22
|
+
req.body = body if body
|
23
|
+
end
|
24
|
+
@conn.send(http_method, &json_block)
|
25
|
+
end
|
26
|
+
|
27
|
+
def multi_get_json(service_location, query_parameters)
|
28
|
+
results = []
|
29
|
+
EventMachine.run do
|
30
|
+
multi = EventMachine::MultiRequest.new
|
31
|
+
connection_opts = {}
|
32
|
+
connection_opts = {proxy: {host: @proxy.sub(/^https?\:\/\//, ''), port: 80}} if @proxy.present?
|
33
|
+
query_parameters.each_with_index do |param, idx|
|
34
|
+
http = EventMachine::HttpRequest.new(service_location, connection_opts)
|
35
|
+
req = http.get query: param, head: {'Authorization' => "Bearer #{@token}"}
|
36
|
+
multi.add idx, req
|
37
|
+
end
|
38
|
+
multi.callback do
|
39
|
+
response = multi.responses[:callback]
|
40
|
+
error = multi.responses[:errback]
|
41
|
+
EventMachine.stop
|
42
|
+
(0..query_parameters.size-1).each do |idx|
|
43
|
+
results += [multi_parse_json_response(response[idx])] if response[idx].present?
|
44
|
+
results += [multi_parse_json_response(error[idx])] if error[idx].present?
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
results
|
49
|
+
end
|
50
|
+
|
51
|
+
def create_json_body(type, metadata = {})
|
52
|
+
{type => metadata.reject { |k,v| v == '' }}.to_json
|
53
|
+
end
|
54
|
+
|
55
|
+
def parse_json_response(json_response)
|
56
|
+
parsed_response = {}
|
57
|
+
parsed_response['status'] = json_response.status if json_response.status.present?
|
58
|
+
|
59
|
+
if [200, 201, 202].include?(json_response.status)
|
60
|
+
parsed_response['body'] = JSON.parse(json_response.body) if json_response.body.present?
|
61
|
+
parsed_response['location'] = json_response.headers['location'] if json_response.headers.present? && json_response.headers['location']
|
62
|
+
else
|
63
|
+
parsed_response['body'] = {}
|
64
|
+
parsed_response['error_message'] = json_response.body
|
65
|
+
end
|
66
|
+
|
67
|
+
parsed_response
|
68
|
+
end
|
69
|
+
|
70
|
+
def multi_parse_json_response(response)
|
71
|
+
parsed_response = {}
|
72
|
+
parsed_response['status'] = response.response_header.present? ? response.response_header.status : 500
|
73
|
+
|
74
|
+
if [200, 201, 202].include?(parsed_response['status'])
|
75
|
+
parsed_response['body'] = JSON.parse response.response if response.response.present?
|
76
|
+
parsed_response['location'] = response.headers.location if response.headers.present? && response.headers.location.present?
|
77
|
+
else
|
78
|
+
parsed_response['body'] = {}
|
79
|
+
parsed_response['error_message'] = response.error if response.error.present?
|
80
|
+
end
|
81
|
+
parsed_response
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
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.3
|
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-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- lib/analytics-psw/events.rb
|
155
155
|
- lib/analytics-psw/reports.rb
|
156
156
|
- lib/analytics-psw/services.rb
|
157
|
+
- lib/analytics-psw/utilities.rb
|
157
158
|
- lib/analytics_report.rb
|
158
159
|
- lib/analytics_report_field.rb
|
159
160
|
homepage:
|