74 lines
2.1 KiB
Go
74 lines
2.1 KiB
Go
package pagerduty
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/google/go-querystring/query"
|
|
)
|
|
|
|
// Vendor represents a specific type of integration. AWS Cloudwatch, Splunk, Datadog, etc are all examples of vendors that can be integrated in PagerDuty by making an integration.
|
|
type Vendor struct {
|
|
APIObject
|
|
Name string `json:"name,omitempty"`
|
|
LogoURL string `json:"logo_url,omitempty"`
|
|
LongName string `json:"long_name,omitempty"`
|
|
WebsiteURL string `json:"website_url,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Connectable bool `json:"connectable,omitempty"`
|
|
ThumbnailURL string `json:"thumbnail_url,omitempty"`
|
|
GenericServiceType string `json:"generic_service_type,omitempty"`
|
|
IntegrationGuideURL string `json:"integration_guide_url,omitempty"`
|
|
}
|
|
|
|
// ListVendorResponse is the data structure returned from calling the ListVendors API endpoint.
|
|
type ListVendorResponse struct {
|
|
APIListObject
|
|
Vendors []Vendor
|
|
}
|
|
|
|
// ListVendorOptions is the data structure used when calling the ListVendors API endpoint.
|
|
type ListVendorOptions struct {
|
|
APIListObject
|
|
}
|
|
|
|
// ListVendors lists existing vendors.
|
|
func (c *Client) ListVendors(o ListVendorOptions) (*ListVendorResponse, error) {
|
|
v, err := query.Values(o)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := c.get("/vendors?" + v.Encode())
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var result ListVendorResponse
|
|
return &result, c.decodeJSON(resp, &result)
|
|
}
|
|
|
|
// GetVendor gets details about an existing vendor.
|
|
func (c *Client) GetVendor(id string) (*Vendor, error) {
|
|
resp, err := c.get("/vendors/" + id)
|
|
return getVendorFromResponse(c, resp, err)
|
|
}
|
|
|
|
func getVendorFromResponse(c *Client, resp *http.Response, err error) (*Vendor, error) {
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var target map[string]Vendor
|
|
if dErr := c.decodeJSON(resp, &target); dErr != nil {
|
|
return nil, fmt.Errorf("Could not decode JSON response: %v", dErr)
|
|
}
|
|
rootNode := "vendor"
|
|
t, nodeOK := target[rootNode]
|
|
if !nodeOK {
|
|
return nil, fmt.Errorf("JSON response does not have %s field", rootNode)
|
|
}
|
|
return &t, nil
|
|
}
|