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 }