1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00
2019-07-15 09:06:49 -07:00

199 lines
6.8 KiB
Go

package datadog
import (
"fmt"
"net/url"
)
// SyntheticsTest represents a synthetics test, either api or browser
type SyntheticsTest struct {
PublicId *string `json:"public_id,omitempty"`
MonitorId *int `json:"monitor_id,omitempty"`
Name *string `json:"name,omitempty"`
Type *string `json:"type,omitempty"`
Tags []string `json:"tags"`
CreatedAt *string `json:"created_at,omitempty"`
ModifiedAt *string `json:"modified_at,omitempty"`
DeletedAt *string `json:"deleted_at,omitempty"`
Config *SyntheticsConfig `json:"config,omitempty"`
Message *string `json:"message,omitempty"`
Options *SyntheticsOptions `json:"options,omitempty"`
Locations []string `json:"locations,omitempty"`
CreatedBy *SyntheticsUser `json:"created_by,omitempty"`
ModifiedBy *SyntheticsUser `json:"modified_by,omitempty"`
Status *string `json:"status,omitempty"`
MonitorStatus *string `json:"monitor_status,omitempty"`
}
type SyntheticsConfig struct {
Request *SyntheticsRequest `json:"request,omitempty"`
Assertions []SyntheticsAssertion `json:"assertions,omitempty"`
Variables []interface{} `json:"variables,omitempty"`
}
type SyntheticsRequest struct {
Url *string `json:"url,omitempty"`
Method *string `json:"method,omitempty"`
Timeout *int `json:"timeout,omitempty"`
Headers map[string]string `json:"headers,omitempty"`
Body *string `json:"body,omitempty"`
}
type SyntheticsAssertion struct {
Operator *string `json:"operator,omitempty"`
Property *string `json:"property,omitempty"`
Type *string `json:"type,omitempty"`
// sometimes target is string ( like "text/html; charset=UTF-8" for header content-type )
// and sometimes target is int ( like 1200 for responseTime, 200 for statusCode )
Target interface{} `json:"target,omitempty"`
}
type SyntheticsOptions struct {
TickEvery *int `json:"tick_every,omitempty"`
FollowRedirects *bool `json:"follow_redirects,omitempty"`
MinFailureDuration *int `json:"min_failure_duration,omitempty"`
MinLocationFailed *int `json:"min_location_failed,omitempty"`
DeviceIds []string `json:"device_ids,omitempty"`
}
type SyntheticsUser struct {
Id *int `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Email *string `json:"email,omitempty"`
Handle *string `json:"handle,omitempty"`
}
type SyntheticsDevice struct {
Id *string `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Height *int `json:"height,omitempty"`
Width *int `json:"width,omitempty"`
IsLandscape *bool `json:"isLandscape,omitempty"`
IsMobile *bool `json:"isMobile,omitempty"`
UserAgent *string `json:"userAgent,omitempty"`
}
type SyntheticsLocation struct {
Id *int `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
DisplayName *string `json:"display_name,omitempty"`
Region *string `json:"region,omitempty"`
IsLandscape *bool `json:"is_active,omitempty"`
}
type ToggleStatus struct {
NewStatus *string `json:"new_status,omitempty"`
}
// GetSyntheticsTests get all tests of type API
func (client *Client) GetSyntheticsTests() ([]SyntheticsTest, error) {
var out struct {
SyntheticsTests []SyntheticsTest `json:"tests,omitempty"`
}
if err := client.doJsonRequest("GET", "/v1/synthetics/tests", nil, &out); err != nil {
return nil, err
}
return out.SyntheticsTests, nil
}
// GetSyntheticsTestsByType get all tests by type (e.g. api or browser)
func (client *Client) GetSyntheticsTestsByType(testType string) ([]SyntheticsTest, error) {
var out struct {
SyntheticsTests []SyntheticsTest `json:"tests,omitempty"`
}
query, err := url.ParseQuery(fmt.Sprintf("type=%v", testType))
if err != nil {
return nil, err
}
if err := client.doJsonRequest("GET", fmt.Sprintf("/v1/synthetics/tests?%v", query.Encode()), nil, &out); err != nil {
return nil, err
}
return out.SyntheticsTests, nil
}
// GetSyntheticsTest get test by public id
func (client *Client) GetSyntheticsTest(publicId string) (*SyntheticsTest, error) {
var out SyntheticsTest
if err := client.doJsonRequest("GET", "/v1/synthetics/tests/"+publicId, nil, &out); err != nil {
return nil, err
}
return &out, nil
}
// CreateSyntheticsTest creates a test
func (client *Client) CreateSyntheticsTest(syntheticsTest *SyntheticsTest) (*SyntheticsTest, error) {
var out SyntheticsTest
if err := client.doJsonRequest("POST", "/v1/synthetics/tests", syntheticsTest, &out); err != nil {
return nil, err
}
return &out, nil
}
// UpdateSyntheticsTest updates a test
func (client *Client) UpdateSyntheticsTest(publicId string, syntheticsTest *SyntheticsTest) (*SyntheticsTest, error) {
var out SyntheticsTest
if err := client.doJsonRequest("PUT", fmt.Sprintf("/v1/synthetics/tests/%s", publicId), syntheticsTest, &out); err != nil {
return nil, err
}
return &out, nil
}
// PauseSyntheticsTest set a test status to live
func (client *Client) PauseSyntheticsTest(publicId string) (*bool, error) {
payload := ToggleStatus{NewStatus: String("paused")}
out := Bool(false)
if err := client.doJsonRequest("PUT", fmt.Sprintf("/v1/synthetics/tests/%s/status", publicId), &payload, &out); err != nil {
return nil, err
}
return out, nil
}
// ResumeSyntheticsTest set a test status to live
func (client *Client) ResumeSyntheticsTest(publicId string) (*bool, error) {
payload := ToggleStatus{NewStatus: String("live")}
out := Bool(false)
if err := client.doJsonRequest("PUT", fmt.Sprintf("/v1/synthetics/tests/%s/status", publicId), &payload, &out); err != nil {
return nil, err
}
return out, nil
}
// string array of public_id
type DeleteSyntheticsTestsPayload struct {
PublicIds []string `json:"public_ids,omitempty"`
}
// DeleteSyntheticsTests deletes tests
func (client *Client) DeleteSyntheticsTests(publicIds []string) error {
req := DeleteSyntheticsTestsPayload{
PublicIds: publicIds,
}
if err := client.doJsonRequest("POST", "/v1/synthetics/tests/delete", req, nil); err != nil {
return err
}
return nil
}
// GetSyntheticsLocations get all test locations
func (client *Client) GetSyntheticsLocations() ([]SyntheticsLocation, error) {
var out struct {
Locations []SyntheticsLocation `json:"locations,omitempty"`
}
if err := client.doJsonRequest("GET", "/v1/synthetics/locations", nil, &out); err != nil {
return nil, err
}
return out.Locations, nil
}
// GetSyntheticsBrowserDevices get all test devices (for browser)
func (client *Client) GetSyntheticsBrowserDevices() ([]SyntheticsDevice, error) {
var out struct {
Devices []SyntheticsDevice `json:"devices,omitempty"`
}
if err := client.doJsonRequest("GET", "/v1/synthetics/browser/devices", nil, &out); err != nil {
return nil, err
}
return out.Devices, nil
}