mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-14 01:24:04 -08:00
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
|
||
|
}
|