github.com/newrelic/newrelic-client-go@v1.1.0/pkg/alerts/multi_location_synthetics_conditions.go (about)

     1  package alerts
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"strconv"
     7  
     8  	"github.com/newrelic/newrelic-client-go/pkg/errors"
     9  )
    10  
    11  // MultiLocationSyntheticsCondition represents a location-based failure condition.
    12  //
    13  // ViolationTimeLimitSeconds must be one of 3600, 7200, 14400, 28800, 43200, 86400.
    14  type MultiLocationSyntheticsCondition struct {
    15  	ID                        int                                    `json:"id,omitempty"`
    16  	Name                      string                                 `json:"name,omitempty"`
    17  	Enabled                   bool                                   `json:"enabled"`
    18  	RunbookURL                string                                 `json:"runbook_url,omitempty"`
    19  	Entities                  []string                               `json:"entities,omitempty"`
    20  	Terms                     []MultiLocationSyntheticsConditionTerm `json:"terms,omitempty"`
    21  	ViolationTimeLimitSeconds int                                    `json:"violation_time_limit_seconds,omitempty"`
    22  }
    23  
    24  // MultiLocationSyntheticsConditionTerm represents a single term for a location-based failure condition.
    25  //
    26  // Priority must be "warning" or "critical".
    27  // Threshold must be greater than zero.
    28  type MultiLocationSyntheticsConditionTerm struct {
    29  	Priority  string `json:"priority,omitempty"`
    30  	Threshold int    `json:"threshold,omitempty"`
    31  }
    32  
    33  // ListMultiLocationSyntheticsConditions returns alert conditions for a specified policy.
    34  func (a *Alerts) ListMultiLocationSyntheticsConditions(policyID int) ([]*MultiLocationSyntheticsCondition, error) {
    35  	return a.ListMultiLocationSyntheticsConditionsWithContext(context.Background(), policyID)
    36  }
    37  
    38  // ListMultiLocationSyntheticsConditionsWithContext returns alert conditions for a specified policy.
    39  func (a *Alerts) ListMultiLocationSyntheticsConditionsWithContext(ctx context.Context, policyID int) ([]*MultiLocationSyntheticsCondition, error) {
    40  	response := multiLocationSyntheticsConditionListResponse{}
    41  	queryParams := listMultiLocationSyntheticsConditionsParams{
    42  		PolicyID: policyID,
    43  	}
    44  
    45  	url := a.config.Region().RestURL("/alerts_location_failure_conditions/policies/", strconv.Itoa(policyID)+".json")
    46  	_, err := a.client.GetWithContext(ctx, url, &queryParams, &response)
    47  
    48  	if err != nil {
    49  		return nil, err
    50  	}
    51  
    52  	return response.MultiLocationSyntheticsConditions, nil
    53  }
    54  
    55  // GetMultiLocationSyntheticsCondition retrieves a specific Synthetics alert condition.
    56  func (a *Alerts) GetMultiLocationSyntheticsCondition(policyID int, conditionID int) (*MultiLocationSyntheticsCondition, error) {
    57  	return a.GetMultiLocationSyntheticsConditionWithContext(context.Background(), policyID, conditionID)
    58  }
    59  
    60  // GetMultiLocationSyntheticsConditionWithContext retrieves a specific Synthetics alert condition.
    61  func (a *Alerts) GetMultiLocationSyntheticsConditionWithContext(ctx context.Context, policyID int, conditionID int) (*MultiLocationSyntheticsCondition, error) {
    62  	conditions, err := a.ListMultiLocationSyntheticsConditionsWithContext(ctx, policyID)
    63  
    64  	if err != nil {
    65  		return nil, err
    66  	}
    67  
    68  	for _, c := range conditions {
    69  		if c.ID == conditionID {
    70  			return c, nil
    71  		}
    72  	}
    73  
    74  	return nil, errors.NewNotFoundf("no condition found for policy %d and condition ID %d", policyID, conditionID)
    75  }
    76  
    77  // CreateMultiLocationSyntheticsCondition creates an alert condition for a specified policy.
    78  func (a *Alerts) CreateMultiLocationSyntheticsCondition(condition MultiLocationSyntheticsCondition, policyID int) (*MultiLocationSyntheticsCondition, error) {
    79  	return a.CreateMultiLocationSyntheticsConditionWithContext(context.Background(), condition, policyID)
    80  
    81  }
    82  
    83  // CreateMultiLocationSyntheticsConditionWithContext creates an alert condition for a specified policy.
    84  func (a *Alerts) CreateMultiLocationSyntheticsConditionWithContext(ctx context.Context, condition MultiLocationSyntheticsCondition, policyID int) (*MultiLocationSyntheticsCondition, error) {
    85  	reqBody := multiLocationSyntheticsConditionRequestBody{
    86  		MultiLocationSyntheticsCondition: condition,
    87  	}
    88  	resp := multiLocationSyntheticsConditionCreateResponse{}
    89  
    90  	url := fmt.Sprintf("/alerts_location_failure_conditions/policies/%d.json", policyID)
    91  	_, err := a.client.PostWithContext(ctx, a.config.Region().RestURL(url), nil, &reqBody, &resp)
    92  	if err != nil {
    93  		return nil, err
    94  	}
    95  
    96  	return &resp.MultiLocationSyntheticsCondition, nil
    97  }
    98  
    99  // UpdateMultiLocationSyntheticsCondition updates an alert condition.
   100  func (a *Alerts) UpdateMultiLocationSyntheticsCondition(condition MultiLocationSyntheticsCondition) (*MultiLocationSyntheticsCondition, error) {
   101  	return a.UpdateMultiLocationSyntheticsConditionWithContext(context.Background(), condition)
   102  }
   103  
   104  // UpdateMultiLocationSyntheticsConditionWithContext updates an alert condition.
   105  func (a *Alerts) UpdateMultiLocationSyntheticsConditionWithContext(ctx context.Context, condition MultiLocationSyntheticsCondition) (*MultiLocationSyntheticsCondition, error) {
   106  	reqBody := multiLocationSyntheticsConditionRequestBody{
   107  		MultiLocationSyntheticsCondition: condition,
   108  	}
   109  	resp := multiLocationSyntheticsConditionCreateResponse{}
   110  
   111  	url := fmt.Sprintf("/alerts_location_failure_conditions/%d.json", condition.ID)
   112  	_, err := a.client.PutWithContext(ctx, a.config.Region().RestURL(url), nil, &reqBody, &resp)
   113  
   114  	if err != nil {
   115  		return nil, err
   116  	}
   117  
   118  	return &resp.MultiLocationSyntheticsCondition, nil
   119  }
   120  
   121  // DeleteMultiLocationSyntheticsCondition delete an alert condition.
   122  func (a *Alerts) DeleteMultiLocationSyntheticsCondition(conditionID int) (*MultiLocationSyntheticsCondition, error) {
   123  	return a.DeleteMultiLocationSyntheticsConditionWithContext(context.Background(), conditionID)
   124  }
   125  
   126  // DeleteMultiLocationSyntheticsConditionWithContext delete an alert condition.
   127  func (a *Alerts) DeleteMultiLocationSyntheticsConditionWithContext(ctx context.Context, conditionID int) (*MultiLocationSyntheticsCondition, error) {
   128  	resp := multiLocationSyntheticsConditionCreateResponse{}
   129  	url := fmt.Sprintf("/alerts_conditions/%d.json", conditionID)
   130  
   131  	_, err := a.client.DeleteWithContext(ctx, a.config.Region().RestURL(url), nil, &resp)
   132  
   133  	if err != nil {
   134  		return nil, err
   135  	}
   136  
   137  	return &resp.MultiLocationSyntheticsCondition, nil
   138  }
   139  
   140  type listMultiLocationSyntheticsConditionsParams struct {
   141  	PolicyID int `url:"policy_id,omitempty"`
   142  }
   143  
   144  type multiLocationSyntheticsConditionListResponse struct {
   145  	MultiLocationSyntheticsConditions []*MultiLocationSyntheticsCondition `json:"location_failure_conditions,omitempty"`
   146  }
   147  
   148  type multiLocationSyntheticsConditionCreateResponse struct {
   149  	MultiLocationSyntheticsCondition MultiLocationSyntheticsCondition `json:"location_failure_condition,omitempty"`
   150  }
   151  
   152  type multiLocationSyntheticsConditionRequestBody struct {
   153  	MultiLocationSyntheticsCondition MultiLocationSyntheticsCondition `json:"location_failure_condition,omitempty"`
   154  }