analytics-psw 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/analytics-psw.rb +156 -146
  3. metadata +13 -13
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6b6e9f607285d3b857b09d8184d0574ec5342da1
4
- data.tar.gz: e6836265df1b2cf10d85ae9882a41807071179d2
3
+ metadata.gz: 9690e2147d8783257c8dac2434b4aaeefc43e685
4
+ data.tar.gz: ac1356c8a0a8eda726162ee4140d48a3a143c570
5
5
  SHA512:
6
- metadata.gz: a7046c2495b68a33f354575f2c14fac7e48812355dabb92b07119bca74a3bf02a3dbcdb03414d8deadc0b263a07f34d3ad512cd710d9e3d497d19523890b1a8c
7
- data.tar.gz: 1472c13dc9ed25b8799b50f0a4087a48d4bb1dc88c2506d56ed0a003d83f69924b34d53bf115d044cf106b4c6d3b8ef370df771a3f045bc03612787bb129e03b
6
+ metadata.gz: 4910eea5494ffd59db4dbb55df02172ed2b8fc366116d576b60fda4de474401be469cafb189fe4a6b4c9094bb176b6b2605bd5a727d727e126d64e6faec9bc63
7
+ data.tar.gz: 14776571c8758a048240c65d56025638ee1807a67e73d035eb99de42cd4c885cc003dd2b360c1a7706d0fd82768e66f4fd1d97e65aee603a48741ad5aed90f53
data/lib/analytics-psw.rb CHANGED
@@ -1,147 +1,157 @@
1
- require "faraday"
2
- require "json"
3
-
4
- class AnalyticsPSW
5
-
6
- API_URL = "/services"
7
- JSON_CONTENT_TYPE = "application/json"
8
-
9
- attr_accessor :service_location
10
-
11
- def initialize(opts = {})
12
- set_vars_from_opts(opts)
13
- @conn = faraday_connection
14
- service = find_or_create_service(@service_name)
15
- @service_location = service["location"] if service
16
- find_or_create_event_types(@event_types) if @event_types
17
- find_or_create_dimensions(@dimensions) if @dimensions
18
- end
19
-
20
- def record_event(event_type, metadata = {})
21
- metadata[:event_type] = event_type
22
- resp = post_json("#{@service_location}/events", "event", metadata)
23
- parse_json_response(resp)
24
- end
25
-
26
- def query_analytics(query_parameters)
27
- resp = get_with_hash("#{@service_location}/reports/query.json", query_parameters)
28
- raise "Problem with your query. Please check the required parameters and try again" if resp.status == 400
29
- parse_json_response(resp)
30
- end
31
-
32
- def create_event_type(name, description = "")
33
- metadata = create_metadata({:name => name, :description => description})
34
- resp = post_json("#{@service_location}/event_types", "event_type", metadata)
35
- parse_json_response(resp)
36
- end
37
-
38
- def create_dimension(name, data_type, units = "", description = "")
39
- metadata = create_metadata({:name => name, :description => description, :data_type => data_type, :units => units})
40
- resp = post_json("#{@service_location}/dimensions", "dimension", metadata)
41
- parse_json_response(resp)
42
- end
43
-
44
- private
45
-
46
- def set_vars_from_opts(opts)
47
- @server_url = opts["server_url"]
48
- @service_name = opts["service"].strip if opts["service"]
49
- raise "Please ensure you have provided the appropriate server url and service name" unless @server_url && @service_name && @service_name != ""
50
- @server_url = @server_url.chomp("/")
51
- @proxy = opts["proxy"]
52
- @proxy = "" if @server_url.start_with?("http://127.0.0.1") or @server_url.start_with?("http://localhost")
53
- @event_types = opts["event_types"]
54
- @dimensions = opts["dimensions"]
55
- end
56
-
57
- def post_json(url, object_type, metadata)
58
- json_object = create_json_object(object_type, metadata)
59
- @conn.post do |req|
60
- req.url url
61
- req.headers["Content-Type"] = JSON_CONTENT_TYPE
62
- req.body = json_object
63
- end
64
- end
65
-
66
- def get_with_hash(url, hash_object = {})
67
- @conn.get url, hash_object
68
- end
69
-
70
- def create_json_object(object_type, metadata = {})
71
- json_object= {object_type => metadata}
72
- json_object.to_json
73
- end
74
-
75
- def create_metadata(hashmap)
76
- metadata = {}
77
- hashmap.each do |key, value|
78
- metadata[key] = value unless value == ""
79
- end
80
- metadata
81
- end
82
-
83
- def find_or_create_event_types(event_types)
84
- all_event_types = JSON.parse(get_with_hash("#{@service_location}/event_types.json").body)
85
- all_event_types["event_types"].each do |event_type|
86
- event_types.delete(event_type["name"]) if event_types.include?(event_type["name"])
87
- end
88
- event_types.each do |event_type|
89
- create_event_type(event_type)
90
- end
91
- event_types
92
- end
93
-
94
- def find_or_create_dimensions(dimensions)
95
- all_dimensions = get_all_dimensions
96
- dimensions.each do |dimension|
97
- dimension.each do |name, data_type|
98
- create_dimension(name, data_type) unless all_dimensions.include?(name)
99
- end
100
- end
101
- end
102
-
103
- def get_all_dimensions
104
- all_dimensions = []
105
- dimensions = JSON.parse(get_with_hash("#{@service_location}/dimensions.json").body)
106
- dimensions["dimensions"].each do |one_dimension|
107
- all_dimensions << one_dimension["name"]
108
- end
109
- all_dimensions
110
- end
111
-
112
- def find_or_create_service(service_name)
113
- service_location = find_service_location(service_name)
114
- if !service_location
115
- service_location = create_service(service_name)
116
- end
117
- service_location
118
- end
119
-
120
- def find_service_location(service_name)
121
- service_location = nil
122
- all_services = JSON.parse(get_with_hash("#{API_URL}.json").body)
123
- all_services["services"].each do |service|
124
- service_location = service if service["name"] == service_name
125
- end
126
- service_location
127
- end
128
-
129
- def create_service(name, description = "")
130
- metadata = create_metadata({:name => name, :description => description})
131
- post_json(API_URL, "service", metadata)
132
- end
133
-
134
- def parse_json_response(json_response)
135
- parsed_response = {}
136
- parsed_response["status"] = json_response.status if json_response.status
137
- parsed_response["body"] = json_response.body if json_response.body && json_response.body.strip != ""
138
- parsed_response["location"] = json_response.headers["location"] if json_response.headers && json_response.headers["location"]
139
- parsed_response
140
- end
141
-
142
- def faraday_connection
143
- return Faraday.new(@server_url) if @proxy == nil
144
- Faraday.new(@server_url, {:proxy => {:uri => @proxy}})
145
- end
146
-
1
+ require "faraday"
2
+ require "json"
3
+ require "analytics_reports"
4
+ require "analytics_services"
5
+ require "analytics_event_types"
6
+ require "analytics_dimension_properties"
7
+ require "analytics_dimensions"
8
+
9
+ class AnalyticsPSW
10
+
11
+ API_URL = "/services"
12
+ JSON_CONTENT_TYPE = "application/json"
13
+ SUM_CRITERIA_PARAM = "sum"
14
+ AVG_CRITERIA_PARAM = "avg"
15
+
16
+ PARSED_RESPONSE_STATUS = 'status'
17
+ PARSED_RESPONSE_BODY = 'body'
18
+ PARSED_RESPONSE_LOCATION = 'location'
19
+
20
+ include AnalyticsReports, AnalyticsServices, AnalyticsEventTypes, AnalyticsDimensions, AnalyticsDimensionProperties
21
+
22
+ attr_accessor :service_location
23
+
24
+ def initialize(opts = {})
25
+ set_vars_from_opts(opts)
26
+ @conn = faraday_connection
27
+ service = find_or_create_service(@service_name)
28
+ @service_location = service["location"] if service
29
+ find_or_create_event_types(@event_types) if @event_types
30
+ find_or_create_dimensions(@dimensions) if @dimensions
31
+ end
32
+
33
+ def record_event(event_type, metadata = {})
34
+ metadata[:event_type] = event_type
35
+ resp = post_json("#{@service_location}/events", "event", metadata)
36
+ parse_json_response(resp)
37
+ end
38
+
39
+
40
+ private
41
+
42
+ def set_vars_from_opts(opts)
43
+ @server_url = opts["server_url"]
44
+ @service_name = opts["service"].strip if opts["service"]
45
+ raise "Please ensure you have provided the appropriate server url and service name" unless @server_url && @service_name && @service_name != ""
46
+ @server_url = @server_url.chomp("/")
47
+ @proxy = opts["proxy"]
48
+ @proxy = "" if @server_url.start_with?("http://127.0.0.1") or @server_url.start_with?("http://localhost")
49
+ @event_types = opts["event_types"]
50
+ @dimensions = opts["dimensions"]
51
+ end
52
+
53
+ def post_json(url, object_type, metadata)
54
+ json_object = create_json_object(object_type, metadata)
55
+ @conn.post do |req|
56
+ req.url url
57
+ req.headers["Content-Type"] = JSON_CONTENT_TYPE
58
+ req.body = json_object
59
+ end
60
+ end
61
+
62
+ def put_json(url, object_type, metadata)
63
+ json_object = create_json_object(object_type, metadata)
64
+ @conn.put do |req|
65
+ req.url url
66
+ req.headers["Content-Type"] = JSON_CONTENT_TYPE
67
+ req.body = json_object
68
+ end
69
+ end
70
+
71
+ def get_with_hash(url, hash_object = {})
72
+ @conn.get url, hash_object
73
+ end
74
+
75
+ def create_json_object(object_type, metadata = {})
76
+ json_object= {object_type => metadata}
77
+ json_object.to_json
78
+ end
79
+
80
+ def create_metadata(hashmap)
81
+ metadata = {}
82
+ hashmap.each do |key, value|
83
+ metadata[key] = value unless value == ""
84
+ end
85
+ metadata
86
+ end
87
+
88
+ def find_or_create_event_types(event_types)
89
+ all_event_types = JSON.parse(get_with_hash("#{@service_location}/event_types.json").body)
90
+ all_event_types["event_types"].each do |event_type|
91
+ event_types.delete(event_type["name"]) if event_types.include?(event_type["name"])
92
+ end
93
+ event_types.each do |event_type|
94
+ create_event_type(event_type)
95
+ end
96
+ event_types
97
+ end
98
+
99
+ def find_or_create_dimensions(dimensions)
100
+ all_dimensions = get_all_dimension_names
101
+ dimensions.each do |dimension|
102
+ dimension.each do |name, data_type|
103
+ create_dimension(name, data_type) unless all_dimensions.include?(name)
104
+ end
105
+ end
106
+ end
107
+
108
+ def get_all_dimension_names
109
+ dimension_names = []
110
+ dimensions = JSON.parse(get_with_hash("#{@service_location}/dimensions.json").body)
111
+ dimensions["dimensions"].each do |one_dimension|
112
+ dimension_names << one_dimension["name"]
113
+ end
114
+ dimension_names
115
+ end
116
+
117
+ def find_or_create_service(service_name)
118
+ service_location = find_service_location(service_name)
119
+ if !service_location
120
+ service_location = create_service_private(service_name)
121
+ end
122
+ service_location
123
+ end
124
+
125
+ def find_service_location(service_name)
126
+ service_location = nil
127
+ all_services = JSON.parse(get_with_hash("#{API_URL}.json").body)
128
+ all_services["services"].each do |service|
129
+ service_location = service if service["name"] == service_name
130
+ end
131
+ service_location
132
+ end
133
+
134
+ def create_service_private(name, description = "")
135
+ metadata = create_metadata({:name => name, :description => description})
136
+ post_json(API_URL, "service", metadata)
137
+ end
138
+
139
+ def parse_json_response(json_response)
140
+ parsed_response = {}
141
+ parsed_response[PARSED_RESPONSE_STATUS] = json_response.status if json_response.status
142
+ parsed_response[PARSED_RESPONSE_BODY] = json_response.body if json_response.body && json_response.body.strip != ""
143
+ parsed_response[PARSED_RESPONSE_LOCATION] = json_response.headers["location"] if json_response.headers && json_response.headers["location"]
144
+ parsed_response
145
+ end
146
+
147
+ def delete_resource(url)
148
+ @conn.delete url
149
+ end
150
+
151
+ def faraday_connection
152
+ return Faraday.new(@server_url) if @proxy == nil
153
+ Faraday.new(@server_url, {:proxy => {:uri => @proxy}})
154
+ end
155
+
156
+
147
157
  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.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Keyes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-13 00:00:00.000000000 Z
11
+ date: 2014-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,56 +28,56 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ! '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ! '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: faraday
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ! '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ! '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  description: Analytics-psw is a wrapper providing access to the Perceptive Cloud Platform
@@ -99,17 +99,17 @@ require_paths:
99
99
  - lib
100
100
  required_ruby_version: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - '>='
102
+ - - ! '>='
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - '>='
107
+ - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
110
  requirements: []
111
111
  rubyforge_project:
112
- rubygems_version: 2.0.14
112
+ rubygems_version: 2.1.4
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: Perceptive Cloud Platform Analytics Service Wrapper