Vault::Usage::Client
Client provides a Ruby API for interacting with the Vault::Usage
HTTP API.
Setting up a development environment
Install dependencies and run the test suite:
bundle install --binstubs vendor/bin
rbenv rehash
rake
Run tests:
rake test
See tasks:
rake -T
Generate API documentation:
rake yard
Using the client from the command-line
The bin/vault-usage
command-line tool can be used to quickly see
usage data for a particular user:
export VAULT_USAGE_URL=https://username:[email protected]
bin/vault-usage [email protected] 2013-01-01 2013-02-01
Using the client in Ruby
The Vault::Usage
API may only be accessed with valid credentials.
You must supply these when you create a new client:
require 'vault-usage-client'
client = Vault::Usage::Client.new(
'https://username:[email protected]')
Usage events
Usage events represent usage of a product, for a period of time, by an app or user.
Opening a usage event
Each usage event must have a unique UUID provided by the service reporting it and the start time must be in UTC:
event_id = SecureRandom.uuid
product_name = 'platform:dyno:logical'
consumer_hid = '[email protected]'
start_time = Time.now.getutc
client.open_usage_event(event_id, product_name, consumer_hid, start_time)
Arbitrary data related to the usage event can optionally be provided by way of a detail object:
event_id = SecureRandom.uuid
product_name = 'platform:dyno:logical'
consumer_hid = '[email protected]'
start_time = Time.now.getutc
detail = {type: 'web',
description: 'bundle exec bin/web',
kernel: 'us-east-1-a'}
client.open_usage_event(event_id, product_name, consumer_hid, start_time,
detail)
Keys in the detail object must be of type Symbol
and values may only
be of type String
, Fixnum
, Bignum
, Float
, TrueClass
,
FalseClass
or NilClass
. In other words, it's not possible to use
nested structures in the detail object.
Closing a usage event
Closing a usage event works the same way as opening one:
event_id = SecureRandom.uuid
product_name = 'platform:dyno:logical'
consumer_hid = '[email protected]'
stop_time = Time.now.getutc
client.close_event(event_id, product_name, consumer_hid, stop_time)
Retrieving usage information
Usage information for a particular user can be retrieved by the client. The start and stop time must both be specified in UTC:
user_hid = '[email protected]'
start_time = Time.utc(2013, 1)
stop_time = Time.utc(2013, 2)
events = client.usage_for_user(user_hid, start_time, stop_time)
The events
result is an Array
of objects matching this format:
[{id: '<event-uuid>',
product: '<name>',
consumer: '<consumer-hid>',
start_time: <Time>,
stop_time: <Time>,
detail: {<key1>: <value1>,
<key2>: <value2>,
...}},
...]}
In some cases it can be useful to exclude event data for certain products:
user_hid = '[email protected]'
start_time = Time.utc(2013, 1)
stop_time = Time.utc(2013, 2)
events = client.usage_for_user(user_hid, start_time, stop_time,
['platform:dyno:physical'])
You can pass one or more product names to exclude.
App ownership events
App ownership events represent ownership of an app, for a period of time, by a user.
Opening an app ownership event
Each app ownership event must have a unique UUID provided by the service reporting it and the start time must be in UTC:
event_id = SecureRandom.uuid
user_hid = '[email protected]'
app_hid = '[email protected]'
start_time = Time.now.getutc
client.open_app_ownership_event(event_id, user_hid, app_hid, start_time)
Closing an app ownership event
Closing an app ownership event works the same way as opening one:
event_id = SecureRandom.uuid
user_hid = '[email protected]'
app_hid = '[email protected]'
stop_time = Time.now.getutc
client.close_app_ownership_event(event_id, user_hid, app_hid, stop_time)
License
The MIT License (MIT)
Copyright (c) 2014 Heroku
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.