1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
package usage
import (
"net/url"
"time"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/pagination"
)
// SingleTenantOpts are options for fetching usage of a single tenant.
type SingleTenantOpts struct {
// The ending time to calculate usage statistics on compute and storage resources.
End *time.Time `q:"end"`
// The beginning time to calculate usage statistics on compute and storage resources.
Start *time.Time `q:"start"`
}
// SingleTenantOptsBuilder allows extensions to add additional parameters to the
// SingleTenant request.
type SingleTenantOptsBuilder interface {
ToUsageSingleTenantQuery() (string, error)
}
// ToUsageSingleTenantQuery formats a SingleTenantOpts into a query string.
func (opts SingleTenantOpts) ToUsageSingleTenantQuery() (string, error) {
params := make(url.Values)
if opts.Start != nil {
params.Add("start", opts.Start.Format(gophercloud.RFC3339MilliNoZ))
}
if opts.End != nil {
params.Add("end", opts.End.Format(gophercloud.RFC3339MilliNoZ))
}
q := &url.URL{RawQuery: params.Encode()}
return q.String(), nil
}
// SingleTenant returns usage data about a single tenant.
func SingleTenant(client *gophercloud.ServiceClient, tenantID string, opts SingleTenantOptsBuilder) pagination.Pager {
url := getTenantURL(client, tenantID)
if opts != nil {
query, err := opts.ToUsageSingleTenantQuery()
if err != nil {
return pagination.Pager{Err: err}
}
url += query
}
return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
return SingleTenantPage{pagination.LinkedPageBase{PageResult: r}}
})
}
// AllTenantsOpts are options for fetching usage of all tenants.
type AllTenantsOpts struct {
// Detailed will return detailed results.
Detailed bool
// The ending time to calculate usage statistics on compute and storage resources.
End *time.Time `q:"end"`
// The beginning time to calculate usage statistics on compute and storage resources.
Start *time.Time `q:"start"`
}
// AllTenantsOptsBuilder allows extensions to add additional parameters to the
// AllTenants request.
type AllTenantsOptsBuilder interface {
ToUsageAllTenantsQuery() (string, error)
}
// ToUsageAllTenantsQuery formats a AllTenantsOpts into a query string.
func (opts AllTenantsOpts) ToUsageAllTenantsQuery() (string, error) {
params := make(url.Values)
if opts.Start != nil {
params.Add("start", opts.Start.Format(gophercloud.RFC3339MilliNoZ))
}
if opts.End != nil {
params.Add("end", opts.End.Format(gophercloud.RFC3339MilliNoZ))
}
if opts.Detailed == true {
params.Add("detailed", "1")
}
q := &url.URL{RawQuery: params.Encode()}
return q.String(), nil
}
// AllTenants returns usage data about all tenants.
func AllTenants(client *gophercloud.ServiceClient, opts AllTenantsOptsBuilder) pagination.Pager {
url := allTenantsURL(client)
if opts != nil {
query, err := opts.ToUsageAllTenantsQuery()
if err != nil {
return pagination.Pager{Err: err}
}
url += query
}
return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
return AllTenantsPage{pagination.LinkedPageBase{PageResult: r}}
})
}
|