vault-usage-client 0.0.1 → 0.0.4
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.
- data/.gitignore +3 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +12 -12
- data/bin/vault-usage +3 -3
- data/lib/vault-usage-client/client.rb +7 -3
- data/lib/vault-usage-client/version.rb +1 -1
- data/lib/vault-usage-client.rb +0 -3
- data/test/client_test.rb +26 -11
- data/vault-usage-client.gemspec +1 -0
- metadata +6 -5
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/heroku/vault-test-tools.git
|
3
|
-
revision:
|
3
|
+
revision: 14b52d0aad51aeefa58b7fc00dde63d5e578cbe8
|
4
4
|
specs:
|
5
|
-
vault-test-tools (0.2.
|
5
|
+
vault-test-tools (0.2.4)
|
6
6
|
minitest
|
7
7
|
nokogiri
|
8
8
|
rack-perftools_profiler
|
@@ -15,20 +15,20 @@ GIT
|
|
15
15
|
PATH
|
16
16
|
remote: .
|
17
17
|
specs:
|
18
|
-
vault-usage-client (0.0.
|
18
|
+
vault-usage-client (0.0.4)
|
19
19
|
colorize
|
20
20
|
excon
|
21
21
|
yajl-ruby
|
22
22
|
|
23
23
|
GEM
|
24
|
-
remote:
|
24
|
+
remote: https://rubygems.org/
|
25
25
|
specs:
|
26
26
|
ansi (1.4.3)
|
27
27
|
colorize (0.5.8)
|
28
|
-
excon (0.
|
29
|
-
json (1.7.
|
30
|
-
minitest (4.
|
31
|
-
nokogiri (1.5.
|
28
|
+
excon (0.20.1)
|
29
|
+
json (1.7.7)
|
30
|
+
minitest (4.7.1)
|
31
|
+
nokogiri (1.5.9)
|
32
32
|
open4 (1.3.0)
|
33
33
|
perftools.rb (2.0.0)
|
34
34
|
rack (1.5.2)
|
@@ -38,15 +38,15 @@ GEM
|
|
38
38
|
rack (~> 1.0)
|
39
39
|
rack-test (0.6.2)
|
40
40
|
rack (>= 1.0)
|
41
|
-
rake (10.0.
|
42
|
-
rdoc (
|
41
|
+
rake (10.0.4)
|
42
|
+
rdoc (4.0.1)
|
43
43
|
json (~> 1.4)
|
44
44
|
redcarpet (2.2.2)
|
45
|
-
rr (1.0.
|
45
|
+
rr (1.0.5)
|
46
46
|
turn (0.9.6)
|
47
47
|
ansi
|
48
48
|
yajl-ruby (1.1.0)
|
49
|
-
yard (0.8.
|
49
|
+
yard (0.8.6.1)
|
50
50
|
|
51
51
|
PLATFORMS
|
52
52
|
ruby
|
data/bin/vault-usage
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
require 'ostruct'
|
2
3
|
|
3
4
|
lib = File.expand_path('../../lib', __FILE__)
|
4
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
@@ -12,13 +13,13 @@ stop_time = Time.utc(*ARGV[2].split('-'))
|
|
12
13
|
|
13
14
|
client = Vault::Usage::Client.new
|
14
15
|
|
15
|
-
all_events = client.usage_for_user(user_hid, start_time, stop_time,
|
16
|
+
all_events = client.usage_for_user(user_hid, start_time, stop_time,
|
17
|
+
['platform:dyno:physical'])
|
16
18
|
|
17
19
|
all_events.group_by { |e| e[:consumer] }.each do |consumer, app_events|
|
18
20
|
puts "=== #{consumer} ===".blue
|
19
21
|
|
20
22
|
app_events.group_by { |e| e[:product] }.each do |product, product_events|
|
21
|
-
|
22
23
|
puts " #{product}"
|
23
24
|
product_events.
|
24
25
|
map { |event| OpenStruct.new(event) }.
|
@@ -31,7 +32,6 @@ all_events.group_by { |e| e[:consumer] }.each do |consumer, app_events|
|
|
31
32
|
end
|
32
33
|
puts
|
33
34
|
end
|
34
|
-
|
35
35
|
end
|
36
36
|
puts
|
37
37
|
end
|
@@ -104,7 +104,7 @@ module Vault::Usage
|
|
104
104
|
# ...}},
|
105
105
|
# ...]}
|
106
106
|
# ```
|
107
|
-
def usage_for_user(user_hid, start_time, stop_time, exclude=nil)
|
107
|
+
def usage_for_user(user_hid, start_time, stop_time, exclude=nil, callback_url = nil)
|
108
108
|
unless start_time.zone.eql?('UTC')
|
109
109
|
raise InvalidTimeError.new('Start time must be in UTC.')
|
110
110
|
end
|
@@ -113,12 +113,16 @@ module Vault::Usage
|
|
113
113
|
end
|
114
114
|
path = "/users/#{user_hid}/usage/#{iso_format(start_time)}/" +
|
115
115
|
"#{iso_format(stop_time)}"
|
116
|
+
query = {}
|
116
117
|
unless exclude.nil? || exclude.empty?
|
117
|
-
query =
|
118
|
+
query[:exclude] = exclude.join(',')
|
118
119
|
end
|
120
|
+
query[:callback_url] = callback_url if callback_url
|
119
121
|
connection = Excon.new(@url)
|
120
122
|
response = connection.get(path: path, expects: [200], query: query)
|
121
|
-
|
123
|
+
payload = JSON.parse(response.body, {symbolize_keys: true})
|
124
|
+
return payload[:job_id] if payload[:job_id]
|
125
|
+
events = payload[:events]
|
122
126
|
events.each do |event|
|
123
127
|
event.each do |key, value|
|
124
128
|
event[key] = parse_date(value) if date?(value)
|
data/lib/vault-usage-client.rb
CHANGED
data/test/client_test.rb
CHANGED
@@ -47,7 +47,8 @@ class ClientTest < Vault::TestCase
|
|
47
47
|
Excon.stub(method: :put) do |request|
|
48
48
|
assert_equal('Basic dXNlcm5hbWU6c2VjcmV0',
|
49
49
|
request[:headers]['Authorization'])
|
50
|
-
assert_equal('vault-usage.herokuapp.com
|
50
|
+
assert_equal('vault-usage.herokuapp.com', request[:host])
|
51
|
+
assert_equal('443', request[:port])
|
51
52
|
assert_equal("/products/#{@product_name}/usage/#{@app_hid}" +
|
52
53
|
"/events/#{@event_id}/open/#{iso_format(@start_time)}",
|
53
54
|
request[:path])
|
@@ -103,7 +104,8 @@ class ClientTest < Vault::TestCase
|
|
103
104
|
Excon.stub(method: :put) do |request|
|
104
105
|
assert_equal('Basic dXNlcm5hbWU6c2VjcmV0',
|
105
106
|
request[:headers]['Authorization'])
|
106
|
-
assert_equal('vault-usage.herokuapp.com
|
107
|
+
assert_equal('vault-usage.herokuapp.com', request[:host])
|
108
|
+
assert_equal('443', request[:port])
|
107
109
|
assert_equal("/products/#{@product_name}/usage/#{@app_hid}" +
|
108
110
|
"/events/#{@event_id}/close/#{iso_format(@stop_time)}",
|
109
111
|
request[:path])
|
@@ -144,12 +146,13 @@ class ClientTest < Vault::TestCase
|
|
144
146
|
Excon.stub(method: :get) do |request|
|
145
147
|
assert_equal('Basic dXNlcm5hbWU6c2VjcmV0',
|
146
148
|
request[:headers]['Authorization'])
|
147
|
-
assert_equal('vault-usage.herokuapp.com
|
149
|
+
assert_equal('vault-usage.herokuapp.com', request[:host])
|
150
|
+
assert_equal('443', request[:port])
|
148
151
|
assert_equal("/users/#{@user_hid}/usage/#{iso_format(@start_time)}/" +
|
149
152
|
"#{iso_format(@stop_time)}",
|
150
153
|
request[:path])
|
151
154
|
Excon.stubs.pop
|
152
|
-
{status: 200, body: JSON.generate([])}
|
155
|
+
{status: 200, body: JSON.generate({events: []})}
|
153
156
|
end
|
154
157
|
assert_equal([], @client.usage_for_user(@user_hid, @start_time,
|
155
158
|
@stop_time))
|
@@ -161,12 +164,22 @@ class ClientTest < Vault::TestCase
|
|
161
164
|
Excon.stub(method: :get) do |request|
|
162
165
|
assert_equal({exclude: 'platform:dyno:physical'}, request[:query])
|
163
166
|
Excon.stubs.pop
|
164
|
-
{status: 200, body: JSON.generate([])}
|
167
|
+
{status: 200, body: JSON.generate({events: []})}
|
165
168
|
end
|
166
169
|
assert_equal([], @client.usage_for_user(@user_hid, @start_time, @stop_time,
|
167
170
|
['platform:dyno:physical']))
|
168
171
|
end
|
169
172
|
|
173
|
+
def test_usage_for_user_with_callback_url
|
174
|
+
Excon.stub(method: :get) do |request|
|
175
|
+
assert_equal({callback_url: 'http://example.com'}, request[:query])
|
176
|
+
Excon.stubs.pop
|
177
|
+
{status: 200, body: JSON.generate({job_id: 'DEADBEEF'})}
|
178
|
+
end
|
179
|
+
assert_equal('DEADBEEF',
|
180
|
+
@client.usage_for_user(@user_hid, @start_time, @stop_time, nil,'http://example.com'))
|
181
|
+
end
|
182
|
+
|
170
183
|
# Client.usage_for_user comma-separates product names, when many are
|
171
184
|
# provided in the exclusion list, and passes them to the server using a
|
172
185
|
# single query argument.
|
@@ -175,7 +188,7 @@ class ClientTest < Vault::TestCase
|
|
175
188
|
assert_equal({exclude: 'platform:dyno:physical,addons:memcache:100mb'},
|
176
189
|
request[:query])
|
177
190
|
Excon.stubs.pop
|
178
|
-
{status: 200, body: JSON.generate([])}
|
191
|
+
{status: 200, body: JSON.generate({events: []})}
|
179
192
|
end
|
180
193
|
assert_equal([], @client.usage_for_user(@user_hid, @start_time, @stop_time,
|
181
194
|
['platform:dyno:physical',
|
@@ -186,9 +199,9 @@ class ClientTest < Vault::TestCase
|
|
186
199
|
# not passing one at all.
|
187
200
|
def test_usage_for_user_with_empty_exclude
|
188
201
|
Excon.stub(method: :get) do |request|
|
189
|
-
assert_equal(
|
202
|
+
assert_equal({}, request[:query])
|
190
203
|
Excon.stubs.pop
|
191
|
-
{status: 200, body: JSON.generate([])}
|
204
|
+
{status: 200, body: JSON.generate({events: []})}
|
192
205
|
end
|
193
206
|
assert_equal([], @client.usage_for_user(@user_hid, @start_time, @stop_time,
|
194
207
|
[]))
|
@@ -205,7 +218,7 @@ class ClientTest < Vault::TestCase
|
|
205
218
|
start_time: iso_format(@start_time),
|
206
219
|
stop_time: iso_format(@stop_time),
|
207
220
|
detail: {}}]
|
208
|
-
{status: 200, body: JSON.generate(events)}
|
221
|
+
{status: 200, body: JSON.generate({events: events})}
|
209
222
|
end
|
210
223
|
assert_equal([{id: @event_id,
|
211
224
|
product: @product_name,
|
@@ -256,7 +269,8 @@ class ClientTest < Vault::TestCase
|
|
256
269
|
Excon.stub(method: :put) do |request|
|
257
270
|
assert_equal('Basic dXNlcm5hbWU6c2VjcmV0',
|
258
271
|
request[:headers]['Authorization'])
|
259
|
-
assert_equal('vault-usage.herokuapp.com
|
272
|
+
assert_equal('vault-usage.herokuapp.com', request[:host])
|
273
|
+
assert_equal('443', request[:port])
|
260
274
|
assert_equal("/users/#{@user_hid}/apps/#{@app_hid}/open/#{@event_id}" +
|
261
275
|
"/#{iso_format(@start_time)}",
|
262
276
|
request[:path])
|
@@ -300,7 +314,8 @@ class ClientTest < Vault::TestCase
|
|
300
314
|
Excon.stub(method: :put) do |request|
|
301
315
|
assert_equal('Basic dXNlcm5hbWU6c2VjcmV0',
|
302
316
|
request[:headers]['Authorization'])
|
303
|
-
assert_equal('vault-usage.herokuapp.com
|
317
|
+
assert_equal('vault-usage.herokuapp.com', request[:host])
|
318
|
+
assert_equal('443', request[:port])
|
304
319
|
assert_equal("/users/#{@user_hid}/apps/#{@app_hid}/close/#{@event_id}" +
|
305
320
|
"/#{iso_format(@stop_time)}",
|
306
321
|
request[:path])
|
data/vault-usage-client.gemspec
CHANGED
@@ -14,6 +14,7 @@ Gem::Specification.new do |gem|
|
|
14
14
|
gem.files = `git ls-files`.split($/)
|
15
15
|
gem.test_files = gem.files.grep('^(test|spec|features)/')
|
16
16
|
gem.require_paths = ["lib"]
|
17
|
+
gem.executables = ['vault-usage']
|
17
18
|
|
18
19
|
gem.add_dependency 'excon'
|
19
20
|
gem.add_dependency 'yajl-ruby'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vault-usage-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-05-31 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: excon
|
@@ -64,7 +64,8 @@ description: Client for Vault::Usage
|
|
64
64
|
email:
|
65
65
|
- csquared@heroku.com
|
66
66
|
- jkakar@heroku.com
|
67
|
-
executables:
|
67
|
+
executables:
|
68
|
+
- vault-usage
|
68
69
|
extensions: []
|
69
70
|
extra_rdoc_files: []
|
70
71
|
files:
|
@@ -96,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
97
|
version: '0'
|
97
98
|
segments:
|
98
99
|
- 0
|
99
|
-
hash:
|
100
|
+
hash: 255738031400131991
|
100
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
102
|
none: false
|
102
103
|
requirements:
|
@@ -105,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
106
|
version: '0'
|
106
107
|
segments:
|
107
108
|
- 0
|
108
|
-
hash:
|
109
|
+
hash: 255738031400131991
|
109
110
|
requirements: []
|
110
111
|
rubyforge_project:
|
111
112
|
rubygems_version: 1.8.23
|