mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-27 14:39:40 -08:00
c61141ce51
Signed-off-by: Julien Pivotto <roidelapluie@inuits.eu>
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package godo
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
const billingHistoryBasePath = "v2/customers/my/billing_history"
|
|
|
|
// BillingHistoryService is an interface for interfacing with the BillingHistory
|
|
// endpoints of the DigitalOcean API
|
|
// See: https://developers.digitalocean.com/documentation/v2/#billing_history
|
|
type BillingHistoryService interface {
|
|
List(context.Context, *ListOptions) (*BillingHistory, *Response, error)
|
|
}
|
|
|
|
// BillingHistoryServiceOp handles communication with the BillingHistory related methods of
|
|
// the DigitalOcean API.
|
|
type BillingHistoryServiceOp struct {
|
|
client *Client
|
|
}
|
|
|
|
var _ BillingHistoryService = &BillingHistoryServiceOp{}
|
|
|
|
// BillingHistory represents a DigitalOcean Billing History
|
|
type BillingHistory struct {
|
|
BillingHistory []BillingHistoryEntry `json:"billing_history"`
|
|
Links *Links `json:"links"`
|
|
Meta *Meta `json:"meta"`
|
|
}
|
|
|
|
// BillingHistoryEntry represents an entry in a customer's Billing History
|
|
type BillingHistoryEntry struct {
|
|
Description string `json:"description"`
|
|
Amount string `json:"amount"`
|
|
InvoiceID *string `json:"invoice_id"`
|
|
InvoiceUUID *string `json:"invoice_uuid"`
|
|
Date time.Time `json:"date"`
|
|
Type string `json:"type"`
|
|
}
|
|
|
|
func (b BillingHistory) String() string {
|
|
return Stringify(b)
|
|
}
|
|
|
|
// List the Billing History for a customer
|
|
func (s *BillingHistoryServiceOp) List(ctx context.Context, opt *ListOptions) (*BillingHistory, *Response, error) {
|
|
path, err := addOptions(billingHistoryBasePath, opt)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
req, err := s.client.NewRequest(ctx, http.MethodGet, path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
root := new(BillingHistory)
|
|
resp, err := s.client.Do(ctx, req, root)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
if l := root.Links; l != nil {
|
|
resp.Links = l
|
|
}
|
|
if m := root.Meta; m != nil {
|
|
resp.Meta = m
|
|
}
|
|
|
|
return root, resp, err
|
|
}
|