cloudability 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +52 -18
- data/cloudability.gemspec +1 -0
- data/lib/cloudability.rb +65 -4
- data/lib/cloudability/client/billing_reports.rb +22 -0
- data/lib/cloudability/client/budgets.rb +15 -0
- data/lib/cloudability/client/cost_reports.rb +33 -0
- data/lib/cloudability/client/credentials.rb +15 -0
- data/lib/cloudability/client/organizations.rb +76 -0
- data/lib/cloudability/client/usage_reports.rb +33 -0
- data/lib/cloudability/version.rb +1 -1
- data/spec/cloduability/billing_spec.rb +16 -34
- data/spec/cloduability/budgets_spec.rb +14 -49
- data/spec/cloduability/cost_spec.rb +79 -0
- data/spec/cloduability/credentials_spec.rb +6 -15
- data/spec/cloduability/organizations_spec.rb +41 -22
- data/spec/cloduability/usage_spec.rb +44 -0
- data/spec/fixtures/billing_reports +18 -0
- data/spec/fixtures/budgets +18 -0
- data/spec/fixtures/{report_by_period → cost/filters} +7 -7
- data/spec/fixtures/cost/measures +18 -0
- data/spec/fixtures/cost/report +16 -0
- data/spec/fixtures/cost/reports +18 -0
- data/spec/fixtures/usage/filters +18 -0
- data/spec/fixtures/usage/measures +18 -0
- data/spec/fixtures/usage/reports +18 -0
- data/spec/spec_helper.rb +3 -1
- metadata +44 -13
- data/lib/cloudability/billing.rb +0 -65
- data/lib/cloudability/budgets.rb +0 -61
- data/lib/cloudability/credentials.rb +0 -34
- data/lib/cloudability/organizations.rb +0 -71
- data/lib/cloudability/time_helper.rb +0 -25
- data/spec/fixtures/all_budgets +0 -18
- data/spec/fixtures/report_by_account +0 -18
@@ -1,65 +1,30 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Cloudability::Budgets do
|
4
|
-
describe '#initialize' do
|
5
|
-
it 'should raise ArgumentError when auth_token is not provided' do
|
6
|
-
expect { Cloudability::Budgets.new }.to raise_exception(ArgumentError)
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'should not raise any exception when auth token is provided' do
|
10
|
-
expect { Cloudability::Budgets.new(auth_token: 'token') }.not_to raise_exception
|
11
|
-
end
|
12
|
-
end
|
3
|
+
describe Cloudability::Client::Budgets do
|
13
4
|
|
14
5
|
before do
|
15
|
-
@
|
6
|
+
@client = Cloudability::Client.new(auth_token: 'token')
|
16
7
|
end
|
17
|
-
|
18
|
-
describe '#
|
8
|
+
|
9
|
+
describe '#budgets' do
|
19
10
|
it 'should be an array' do
|
20
|
-
stub_get('/1/budgets/index?auth_token=token', '
|
21
|
-
@
|
11
|
+
stub_get('/1/budgets/index?auth_token=token', 'budgets')
|
12
|
+
@client.budgets.should be_kind_of Array
|
22
13
|
end
|
23
14
|
|
24
15
|
it 'should be an array of Hashie::Mashes' do
|
25
|
-
stub_get('/1/budgets/index?auth_token=token', '
|
26
|
-
@
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '#find_by_id' do
|
31
|
-
it 'should be a Hashie::Mash' do
|
32
|
-
stub_get('/1/budgets/index?auth_token=token', 'all_budgets')
|
33
|
-
@cloudability.find_by_id(2039).class.should == Hashie::Mash
|
16
|
+
stub_get('/1/budgets/index?auth_token=token', 'budgets')
|
17
|
+
@client.budgets.each{|budget| budget.should be_kind_of Hashie::Mash }
|
34
18
|
end
|
35
19
|
|
36
|
-
it 'should
|
37
|
-
stub_get('/1/budgets/index?auth_token=token', '
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe '#find_by_subject' do
|
43
|
-
it 'should be a Hashie::Mash' do
|
44
|
-
stub_get('/1/budgets/index?auth_token=token', 'all_budgets')
|
45
|
-
@cloudability.find_by_subject('1111-1111-1111').class.should == Hashie::Mash
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'should raise an ArgumentError when you give it a non valid key' do
|
49
|
-
stub_get('/1/budgets/index?auth_token=token', 'all_budgets')
|
50
|
-
expect { @cloudability.find_by_subject('1111-111-1111') }.to raise_exception(ArgumentError)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '#find_by_key' do
|
55
|
-
it 'should find a budget given a key value pair' do
|
56
|
-
stub_get('/1/budgets/index?auth_token=token', 'all_budgets')
|
57
|
-
@cloudability.find_by_key(key: :id, value: 2039).class.should == Hashie::Mash
|
20
|
+
it 'should be mappable by ID' do
|
21
|
+
stub_get('/1/budgets/index?auth_token=token', 'budgets')
|
22
|
+
@client.budgets.map(&:id).should be_kind_of Array
|
58
23
|
end
|
59
24
|
|
60
|
-
it 'should
|
61
|
-
stub_get('/1/budgets/index?auth_token=token', '
|
62
|
-
|
25
|
+
it 'should be mappable by ID and not be empty' do
|
26
|
+
stub_get('/1/budgets/index?auth_token=token', 'budgets')
|
27
|
+
@client.budgets.map(&:id).should_not be_empty
|
63
28
|
end
|
64
29
|
end
|
65
30
|
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cloudability::Client::CostReports do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@client = Cloudability::Client.new(auth_token: 'token')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#cost_reports' do
|
10
|
+
it 'should be an array' do
|
11
|
+
stub_get('/1/reporting/cost?auth_token=token', 'cost/reports')
|
12
|
+
@client.cost_reports.should be_kind_of Array
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should be mappable by ID' do
|
16
|
+
stub_get('/1/reporting/cost?auth_token=token', 'cost/reports')
|
17
|
+
@client.cost_reports.map(&:id).should be_kind_of Array
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should be mappable by ID and not be empty' do
|
21
|
+
stub_get('/1/reporting/cost?auth_token=token', 'cost/reports')
|
22
|
+
@client.cost_reports.map(&:id).should_not be_empty
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should be mappable by category and not be empty' do
|
26
|
+
stub_get('/1/reporting/cost?auth_token=token', 'cost/reports')
|
27
|
+
@client.cost_reports.map(&:category).should_not be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should be an array of Hashie::Mashes' do
|
31
|
+
stub_get('/1/reporting/cost?auth_token=token', 'cost/reports')
|
32
|
+
@client.cost_reports.each{|report| report.should be_kind_of Hashie::Mash }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#cost_measures' do
|
37
|
+
it 'should be an array' do
|
38
|
+
stub_get('/1/reporting/cost/measures?auth_token=token', 'cost/measures')
|
39
|
+
@client.cost_measures.should be_kind_of Array
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should be mappable by type' do
|
43
|
+
stub_get('/1/reporting/cost/measures?auth_token=token', 'cost/measures')
|
44
|
+
@client.cost_measures.map(&:type).should be_kind_of Array
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should be mappable by type and not be empty' do
|
48
|
+
stub_get('/1/reporting/cost/measures?auth_token=token', 'cost/measures')
|
49
|
+
@client.cost_measures.map(&:type).should_not be_empty
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should be an array of Hashie::Mashes' do
|
53
|
+
stub_get('/1/reporting/cost/measures?auth_token=token', 'cost/measures')
|
54
|
+
@client.cost_measures.each{|measure| measure.should be_kind_of Hashie::Mash }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '#cost_filters' do
|
59
|
+
it 'should be an array' do
|
60
|
+
stub_get('/1/reporting/cost/filters?auth_token=token', 'cost/filters')
|
61
|
+
@client.cost_filters.should be_kind_of Array
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should not be an empty array' do
|
65
|
+
stub_get('/1/reporting/cost/filters?auth_token=token', 'cost/filters')
|
66
|
+
@client.cost_filters.should_not be_empty
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should not be an empty array' do
|
70
|
+
stub_get('/1/reporting/cost/filters?auth_token=token', 'cost/filters')
|
71
|
+
@client.cost_filters.should_not be_empty
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should be an array of strings' do
|
75
|
+
stub_get('/1/reporting/cost/filters?auth_token=token', 'cost/filters')
|
76
|
+
@client.cost_filters.each{|filter| filter.should be_kind_of String }
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -1,29 +1,20 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Cloudability::Credentials do
|
4
|
-
describe '#initialize' do
|
5
|
-
it 'should raise ArgumentError when auth_token is not provided' do
|
6
|
-
expect { Cloudability::Credentials.new }.to raise_exception(ArgumentError)
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'should not raise any exception when auth token is provided' do
|
10
|
-
expect { Cloudability::Credentials.new(auth_token: 'token') }.not_to raise_exception
|
11
|
-
end
|
12
|
-
end
|
3
|
+
describe Cloudability::Client::Credentials do
|
13
4
|
|
14
5
|
before do
|
15
|
-
@
|
6
|
+
@client = Cloudability::Client.new(auth_token: 'token')
|
16
7
|
end
|
17
|
-
|
18
|
-
describe '#
|
8
|
+
|
9
|
+
describe '#credentials' do
|
19
10
|
it 'should be an array' do
|
20
11
|
stub_get('/0/credentials/index?auth_token=token', 'credentials')
|
21
|
-
@
|
12
|
+
@client.credentials.should be_kind_of Array
|
22
13
|
end
|
23
14
|
|
24
15
|
it 'should be an array of Hashie::Mashes' do
|
25
16
|
stub_get('/0/credentials/index?auth_token=token', 'credentials')
|
26
|
-
@
|
17
|
+
@client.credentials.each{|report| report.should be_kind_of Hashie::Mash }
|
27
18
|
end
|
28
19
|
end
|
29
20
|
end
|
@@ -1,64 +1,83 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Cloudability::Organizations do
|
4
|
-
describe '#initialize' do
|
5
|
-
it 'should raise ArgumentError when auth_token is not provided' do
|
6
|
-
expect { Cloudability::Organizations.new }.to raise_exception(ArgumentError)
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'should not raise any exception when auth token is provided' do
|
10
|
-
expect { Cloudability::Organizations.new(auth_token: 'token') }.not_to raise_exception
|
11
|
-
end
|
12
|
-
end
|
3
|
+
describe Cloudability::Client::Organizations do
|
13
4
|
|
14
5
|
before do
|
15
|
-
@
|
6
|
+
@client = Cloudability::Client.new(auth_token: 'token')
|
16
7
|
end
|
17
8
|
|
18
9
|
describe '#my_organization' do
|
19
10
|
it 'should be a Hashie::Mashe' do
|
20
11
|
stub_get('/1/organizations?auth_token=token', 'organization')
|
21
|
-
@
|
12
|
+
@client.my_organization.should be_kind_of Hashie::Mash
|
22
13
|
end
|
23
14
|
end
|
24
15
|
|
25
|
-
describe '#
|
16
|
+
describe '#organization_invitations' do
|
26
17
|
it 'should be an Array' do
|
27
18
|
stub_get('/1/organizations/invitations?auth_token=token', 'organization_invitations')
|
28
|
-
@
|
19
|
+
@client.organization_invitations.should be_kind_of Array
|
29
20
|
end
|
30
21
|
|
31
22
|
it 'should be an array of Hashie::Mashes' do
|
32
23
|
stub_get('/1/organizations/invitations?auth_token=token', 'organization_invitations')
|
33
|
-
@
|
24
|
+
@client.organization_invitations.each{|invite| invite.should be_kind_of Hashie::Mash }
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should be mappable by ID' do
|
28
|
+
stub_get('/1/organizations/invitations?auth_token=token', 'organization_invitations')
|
29
|
+
@client.organization_invitations.map(&:id).should be_kind_of Array
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should be mappable by ID and not be empty' do
|
33
|
+
stub_get('/1/organizations/invitations?auth_token=token', 'organization_invitations')
|
34
|
+
@client.organization_invitations.map(&:id).should_not be_empty
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
|
-
describe '#
|
38
|
+
describe '#organization_roles' do
|
38
39
|
it 'should be an Array' do
|
39
40
|
stub_get('/1/organizations/roles?auth_token=token', 'organization_roles')
|
40
|
-
@
|
41
|
+
@client.organization_roles.should be_kind_of Array
|
41
42
|
end
|
42
43
|
|
43
44
|
it 'should be an array of Hashie::Mashes' do
|
44
45
|
stub_get('/1/organizations/roles?auth_token=token', 'organization_roles')
|
45
|
-
@
|
46
|
+
@client.organization_roles.each{|role| role.should be_kind_of Hashie::Mash }
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
50
|
describe '#invite_user' do
|
50
51
|
it 'should be a Hashie::Mash' do
|
51
52
|
stub_post('/1/organizations/invitations?auth_token=token&email=colbyaleyrb%40gmail.com', 'organization_invitation')
|
52
|
-
@
|
53
|
+
@client.invite_user('colbyaleyrb@gmail.com').should be_kind_of Hashie::Mash
|
53
54
|
end
|
54
55
|
|
55
56
|
it 'should accept a hash with email and name' do
|
56
57
|
stub_post('/1/organizations/invitations?auth_token=token&email=colbyaleyrb%40gmail.com&name=colby', 'organization_invitation')
|
57
|
-
expect { @
|
58
|
+
expect { @client.invite_user('colbyaleyrb@gmail.com', name: 'colby') }.not_to raise_exception
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe '#delete_invite' do
|
63
|
+
it 'should should not raise an exception when id is provided' do
|
64
|
+
stub_delete('/1/organizations/invitations/1?auth_token=token', 'organization_invitation')
|
65
|
+
expect { @client.delete_invite(1) }.not_to raise_exception
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should require id as an argument' do
|
69
|
+
expect { @client.delete_invite }.to raise_exception(ArgumentError)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#update_invite' do
|
74
|
+
it 'should should not raise an exception when id and role_id are provided' do
|
75
|
+
stub_put('/1/organizations/invitations/1?role_id=1&auth_token=token', 'organization_invitation')
|
76
|
+
expect { @client.update_invite(1,1) }.not_to raise_exception
|
58
77
|
end
|
59
78
|
|
60
|
-
it 'should
|
61
|
-
expect { @
|
79
|
+
it 'should require id and role_id as arguments' do
|
80
|
+
expect { @client.update_invite }.to raise_exception(ArgumentError)
|
62
81
|
end
|
63
82
|
end
|
64
83
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Cloudability::Client::UsageReports do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@client = Cloudability::Client.new(auth_token: 'token')
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#usage_reports' do
|
10
|
+
it 'should be an array' do
|
11
|
+
stub_get('/1/reporting?auth_token=token', 'usage/reports')
|
12
|
+
@client.usage_reports.should be_kind_of Array
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should be an array of Hashie::Mashes' do
|
16
|
+
stub_get('/1/reporting?auth_token=token', 'usage/reports')
|
17
|
+
@client.usage_reports.each{|report| report.should be_kind_of Hashie::Mash }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#usage_measures' do
|
22
|
+
it 'should be an array' do
|
23
|
+
stub_get('/1/reporting/measures?auth_token=token', 'usage/measures')
|
24
|
+
@client.usage_measures.should be_kind_of Array
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should be an array of Hashie::Mashes' do
|
28
|
+
stub_get('/1/reporting/measures?auth_token=token', 'usage/measures')
|
29
|
+
@client.usage_measures.each{|measure| measure.should be_kind_of Hashie::Mash }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#usage_filters' do
|
34
|
+
it 'should be an array' do
|
35
|
+
stub_get('/1/reporting/filters?auth_token=token', 'usage/filters')
|
36
|
+
@client.usage_filters.should be_kind_of Array
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should be an array of strings' do
|
40
|
+
stub_get('/1/reporting/filters?auth_token=token', 'usage/filters')
|
41
|
+
@client.usage_filters.each{|filter| filter.should be_kind_of String }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Server: nginx/1.4.4
|
3
|
+
Date: Thu, 26 Dec 2013 07:07:35 GMT
|
4
|
+
Content-Type: application/json
|
5
|
+
Content-Length: 4325
|
6
|
+
Connection: keep-alive
|
7
|
+
Status: 200 OK
|
8
|
+
Strict-Transport-Security: max-age=31536000
|
9
|
+
Set-Cookie: _mkra_ctxt=3ffbcb8ced889a77eee33fc6e55f2f4f--200; path=/; secure
|
10
|
+
X-UA-Compatible: IE=Edge,chrome=1
|
11
|
+
ETag: "e1d3be175a896af8a2f5af1eab72f227"
|
12
|
+
Cache-Control: max-age=0, private, must-revalidate
|
13
|
+
X-Request-Id: 9fb37024fc9512947f1835a9f8477583
|
14
|
+
X-Runtime: 1.653713
|
15
|
+
X-Rack-Cache: miss
|
16
|
+
Origin: app.cloudability.com
|
17
|
+
|
18
|
+
[{"period":"2007-09-01","spend":577.42,"currency":"USD"},{"period":"2007-10-01","spend":1040.88,"currency":"USD"},{"period":"2007-11-01","spend":1089.0,"currency":"USD"},{"period":"2007-12-01","spend":1086.0,"currency":"USD"},{"period":"2008-01-01","spend":1103.59,"currency":"USD"},{"period":"2008-02-01","spend":1151.63,"currency":"USD"},{"period":"2008-03-01","spend":1343.76,"currency":"USD"},{"period":"2008-04-01","spend":1336.79,"currency":"USD"},{"period":"2008-05-01","spend":1336.79,"currency":"USD"},{"period":"2008-06-01","spend":1336.79,"currency":"USD"},{"period":"2008-07-01","spend":1931.27,"currency":"USD"},{"period":"2008-08-01","spend":1419.99,"currency":"USD"},{"period":"2008-09-01","spend":1419.99,"currency":"USD"},{"period":"2008-10-01","spend":1419.99,"currency":"USD"},{"period":"2008-11-01","spend":1423.19,"currency":"USD"},{"period":"2008-12-01","spend":1419.99,"currency":"USD"},{"period":"2009-01-01","spend":1419.99,"currency":"USD"},{"period":"2009-02-01","spend":1419.99,"currency":"USD"},{"period":"2009-03-01","spend":1678.93,"currency":"USD"},{"period":"2009-04-01","spend":1550.39,"currency":"USD"},{"period":"2009-05-01","spend":1550.39,"currency":"USD"},{"period":"2009-06-01","spend":1550.39,"currency":"USD"},{"period":"2009-07-01","spend":1550.39,"currency":"USD"},{"period":"2009-08-01","spend":1529.0,"currency":"USD"},{"period":"2009-09-01","spend":1529.0,"currency":"USD"},{"period":"2009-10-01","spend":1529.0,"currency":"USD"},{"period":"2009-11-01","spend":1532.2,"currency":"USD"},{"period":"2009-12-01","spend":1576.11,"currency":"USD"},{"period":"2010-01-01","spend":1906.34,"currency":"USD"},{"period":"2010-02-01","spend":1721.87,"currency":"USD"},{"period":"2010-03-01","spend":1675.0,"currency":"USD"},{"period":"2010-04-01","spend":1676.2,"currency":"USD"},{"period":"2010-05-01","spend":1700.25,"currency":"USD"},{"period":"2010-06-01","spend":1639.0,"currency":"USD"},{"period":"2010-07-01","spend":1926.39,"currency":"USD"},{"period":"2010-08-01","spend":1420.0,"currency":"USD"},{"period":"2010-09-01","spend":1420.0,"currency":"USD"},{"period":"2010-10-01","spend":1420.0,"currency":"USD"},{"period":"2010-11-01","spend":1534.8,"currency":"USD"},{"period":"2010-12-01","spend":1340.0,"currency":"USD"},{"period":"2011-01-01","spend":1362.92,"currency":"USD"},{"period":"2011-02-01","spend":1394.36,"currency":"USD"},{"period":"2011-03-01","spend":1113.0,"currency":"USD"},{"period":"2011-04-01","spend":1119.33,"currency":"USD"},{"period":"2011-05-01","spend":1060.91,"currency":"USD"},{"period":"2011-06-01","spend":1072.0,"currency":"USD"},{"period":"2011-07-01","spend":1449.69,"currency":"USD"},{"period":"2011-08-01","spend":1944.03,"currency":"USD"},{"period":"2011-09-01","spend":2310.35,"currency":"USD"},{"period":"2011-10-01","spend":2322.35,"currency":"USD"},{"period":"2011-11-01","spend":2385.37,"currency":"USD"},{"period":"2011-12-01","spend":2522.25,"currency":"USD"},{"period":"2012-01-01","spend":2059.59,"currency":"USD"},{"period":"2012-02-01","spend":1978.77,"currency":"USD"},{"period":"2012-03-01","spend":2025.13,"currency":"USD"},{"period":"2012-04-01","spend":1871.99,"currency":"USD"},{"period":"2012-05-01","spend":2155.67,"currency":"USD"},{"period":"2012-06-01","spend":2510.02,"currency":"USD"},{"period":"2012-07-01","spend":2698.46,"currency":"USD"},{"period":"2012-08-01","spend":2411.71,"currency":"USD"},{"period":"2012-09-01","spend":6457.44,"currency":"USD"},{"period":"2012-10-01","spend":8665.07,"currency":"USD"},{"period":"2012-11-01","spend":9503.68,"currency":"USD"},{"period":"2012-12-01","spend":11809.3,"currency":"USD"},{"period":"2013-01-01","spend":15392.17,"currency":"USD"},{"period":"2013-02-01","spend":14863.16,"currency":"USD"},{"period":"2013-03-01","spend":14544.94,"currency":"USD"},{"period":"2013-04-01","spend":12276.64,"currency":"USD"},{"period":"2013-05-01","spend":13375.0,"currency":"USD"},{"period":"2013-06-01","spend":14404.7,"currency":"USD"},{"period":"2013-07-01","spend":15060.31,"currency":"USD"},{"period":"2013-08-01","spend":13829.53,"currency":"USD"},{"period":"2013-09-01","spend":15918.8,"currency":"USD"},{"period":"2013-10-01","spend":20735.45,"currency":"USD"},{"period":"2013-11-01","spend":24589.83,"currency":"USD"},{"period":"2013-12-01","spend":10126.34,"currency":"USD"}]
|
@@ -0,0 +1,18 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Server: nginx/1.4.4
|
3
|
+
Date: Thu, 26 Dec 2013 07:21:11 GMT
|
4
|
+
Content-Type: application/json
|
5
|
+
Content-Length: 457
|
6
|
+
Connection: keep-alive
|
7
|
+
Status: 200 OK
|
8
|
+
Strict-Transport-Security: max-age=31536000
|
9
|
+
Set-Cookie: _mkra_ctxt=7c8b8e7eaf283b883c5bafacc5200436--200; path=/; secure
|
10
|
+
X-UA-Compatible: IE=Edge,chrome=1
|
11
|
+
ETag: "f337342c38dac852161666174d1514c8"
|
12
|
+
Cache-Control: max-age=0, private, must-revalidate
|
13
|
+
X-Request-Id: e9393a77a94b9047adec9b7a650a661a
|
14
|
+
X-Runtime: 0.194231
|
15
|
+
X-Rack-Cache: miss
|
16
|
+
Origin: app.cloudability.com
|
17
|
+
|
18
|
+
[{"predicted_monthly_spend":{"cents":1111111,"currency":{"id":111,"key":"usd","priority":1,"iso_code":"USD"}},"subject":"1111-1111-1111","type":"Account","currency":"USD","id":1111,"is_active":true,"threshold":"50000.0"},{"predicted_monthly_spend":{"cents":1111111,"currency":{"id":111,"key":"usd","priority":1,"iso_code":"USD"}},"subject":"colby@cloudability.com","type":"User","currency":"USD","id":1111,"is_active":true,"threshold":"100000.0"}]
|
@@ -1,18 +1,18 @@
|
|
1
1
|
HTTP/1.1 200 OK
|
2
2
|
Server: nginx/1.4.4
|
3
|
-
Date:
|
3
|
+
Date: Thu, 26 Dec 2013 07:51:33 GMT
|
4
4
|
Content-Type: application/json
|
5
|
-
Content-Length:
|
5
|
+
Content-Length: 39
|
6
6
|
Connection: keep-alive
|
7
7
|
Status: 200 OK
|
8
8
|
Strict-Transport-Security: max-age=31536000
|
9
|
-
Set-Cookie: _mkra_ctxt=
|
9
|
+
Set-Cookie: _mkra_ctxt=a24420f6d8da00e86ed98242a94c5153--200; path=/; secure
|
10
10
|
X-UA-Compatible: IE=Edge,chrome=1
|
11
|
-
ETag: "
|
11
|
+
ETag: "8762e8222fbc8f34a7359e143314adab"
|
12
12
|
Cache-Control: max-age=0, private, must-revalidate
|
13
|
-
X-Request-Id:
|
14
|
-
X-Runtime: 0.
|
13
|
+
X-Request-Id: ca2fcd7690fafc98c3875970e2e17347
|
14
|
+
X-Runtime: 0.009464
|
15
15
|
X-Rack-Cache: miss
|
16
16
|
Origin: app.cloudability.com
|
17
17
|
|
18
|
-
[]
|
18
|
+
["==","!=","<=",">=","<",">","=@","=~"]
|
@@ -0,0 +1,18 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Server: nginx/1.4.4
|
3
|
+
Date: Thu, 26 Dec 2013 07:55:18 GMT
|
4
|
+
Content-Type: application/json
|
5
|
+
Content-Length: 10352
|
6
|
+
Connection: keep-alive
|
7
|
+
Status: 200 OK
|
8
|
+
Strict-Transport-Security: max-age=31536000
|
9
|
+
Set-Cookie: _mkra_ctxt=a862cf891fb1e25947304e8e69966249--200; path=/; secure
|
10
|
+
X-UA-Compatible: IE=Edge,chrome=1
|
11
|
+
ETag: "3029e59c8da38f12b82f81ffa780975a"
|
12
|
+
Cache-Control: max-age=0, private, must-revalidate
|
13
|
+
X-Request-Id: 28b5bd1f20212224078aab710431181b
|
14
|
+
X-Runtime: 0.153894
|
15
|
+
X-Rack-Cache: miss
|
16
|
+
Origin: app.cloudability.com
|
17
|
+
|
18
|
+
[{"type":"metric","name":"taxes","label":"Taxes","description":"Taxes applied to line items","data_type":"currency","group":{"key":"billing","name":"Billing"},"sub_group":{"key":"costs","name":"Costs"}},{"type":"metric","name":"credits","label":"Credits","description":"Credits applied to line items","data_type":"currency","group":{"key":"billing","name":"Billing"},"sub_group":{"key":"costs","name":"Costs"}}]
|
@@ -0,0 +1,16 @@
|
|
1
|
+
HTTP/1.1 401 Unauthorized
|
2
|
+
Server: nginx/1.4.4
|
3
|
+
Date: Thu, 26 Dec 2013 07:48:50 GMT
|
4
|
+
Content-Type: application/json
|
5
|
+
Content-Length: 28
|
6
|
+
Connection: keep-alive
|
7
|
+
Status: 401 Unauthorized
|
8
|
+
Strict-Transport-Security: max-age=31536000
|
9
|
+
Set-Cookie: _mkra_ctxt=45efbe219662899fe9775a3ce1cf34a6--401; path=/; secure
|
10
|
+
X-UA-Compatible: IE=Edge,chrome=1
|
11
|
+
Cache-Control: no-cache
|
12
|
+
X-Request-Id: f71f1c66237f1f9d2596dc7f21b4a0ca
|
13
|
+
X-Runtime: 0.012704
|
14
|
+
X-Rack-Cache: miss
|
15
|
+
|
16
|
+
{"error":"401 Unauthorized"}
|