analytics-psw 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 96c6d8dedbbe05d08979926ec65355ec8135db01
4
- data.tar.gz: ae99b561a809b3e975d3507fb92c8dc717ec9e77
3
+ metadata.gz: c5bd2ac49dc5a4f6a747f7ee132c50bc7d5f7fdb
4
+ data.tar.gz: cecfcc3fb2835f8ec0063208699444d3a323a7bc
5
5
  SHA512:
6
- metadata.gz: ea389b6047349284da4c4926f891a36f75b345779302c16ec48055561246f3a41b96afb62e53cb9af381856f556aacfb3f1f0e048fbec4f57c968f83ec1d1838
7
- data.tar.gz: 979d7eefcf976b5b20a0f9e1bd23dcfad0948f0dd729262a85b0eec3ef2d8d6bfc18233546eb794d077d3e5dede1fa5633287bf198c88aca0e92421d5a114b39
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,7 +1,7 @@
1
1
  module AnalyticsPSW
2
2
  module Customers
3
3
  def list_customers
4
- resp = get_json("#{@service_location}/customers")
4
+ resp = http_request(:get, "#{@service_location}/customers")
5
5
  parse_json_response(resp)
6
6
  end
7
7
  end
@@ -1,24 +1,26 @@
1
1
  module AnalyticsPSW
2
2
  module DimensionProperties
3
3
  def list_dimension_properties(dimension_name)
4
- resp = get_json("#{@service_location}/dimensions/#{dimension_name}/properties")
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 = get_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}")
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
- response = post_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", 'dimension_property', metadata)
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
- response = put_json("#{@service_location}/dimensions/#{dimension_name}/properties/#{dimension_value}", 'dimension_property', metadata)
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
- metadata = create_metadata({:name => name.to_s, :description => description, :data_type => data_type, :units => units})
6
- resp = post_json("#{@service_location}/dimensions", "dimension", metadata)
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 = get_json("#{@service_location}/dimensions")
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 = get_json("#{@service_location}/dimensions/#{dimension_name}")
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 = get_json("#{@service_location}/dimensions/#{dimension_name}/metadata")
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
- metadata = create_metadata({:name => name.to_s, :description => description})
6
- resp = post_json("#{@service_location}/event_types", "event_type", metadata)
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 = get_json("#{@service_location}/event_types")
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 = get_json("#{@service_location}/event_types/#{event_name.to_s}")
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
@@ -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
- parse_json_response(post_json("#{@service_location}/events", 'event', metadata))
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 = get_json("#{@service_location}/reports/query.json", query_parameters)
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
- resp = post_json("#{@service_location}/reports", 'report', query_parameters )
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 = get_json("#{@service_location}/reports")
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 = get_json("#{@service_location}/reports/#{report_name.to_s}/criteria")
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 = get_json("#{@service_location}/reports/#{report_name.to_s}/results", where_criteria)
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 = delete_resource("#{@service_location}/reports/#{report_name.to_s}")
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 = get_json("/services/#{service_name.to_s}")
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 = get_json("/services/#{service_name.to_s}/metadata")
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.2
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-12 00:00:00.000000000 Z
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: