github.com/newrelic/newrelic-client-go@v1.1.0/pkg/alerts/plugins_conditions.go (about) 1 package alerts 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/newrelic/newrelic-client-go/pkg/errors" 8 ) 9 10 // PluginsCondition represents an alert condition for New Relic Plugins. 11 type PluginsCondition struct { 12 ID int `json:"id,omitempty"` 13 Name string `json:"name,omitempty"` 14 Enabled bool `json:"enabled"` 15 Entities []string `json:"entities,omitempty"` 16 Metric string `json:"metric,omitempty"` 17 MetricDescription string `json:"metric_description,omitempty"` 18 RunbookURL string `json:"runbook_url,omitempty"` 19 Terms []ConditionTerm `json:"terms,omitempty"` 20 ValueFunction string `json:"value_function,omitempty"` 21 Plugin AlertPlugin `json:"plugin,omitempty"` 22 } 23 24 // AlertPlugin represents a plugin to use with a Plugin alert condition. 25 type AlertPlugin struct { 26 ID string `json:"id,omitempty"` 27 GUID string `json:"guid,omitempty"` 28 } 29 30 // ListPluginsConditions returns alert conditions for New Relic plugins for a given alert policy. 31 func (a *Alerts) ListPluginsConditions(policyID int) ([]*PluginsCondition, error) { 32 return a.ListPluginsConditionsWithContext(context.Background(), policyID) 33 } 34 35 // ListPluginsConditionsWithContext returns alert conditions for New Relic plugins for a given alert policy. 36 func (a *Alerts) ListPluginsConditionsWithContext(ctx context.Context, policyID int) ([]*PluginsCondition, error) { 37 conditions := []*PluginsCondition{} 38 queryParams := listPluginsConditionsParams{ 39 PolicyID: policyID, 40 } 41 42 nextURL := a.config.Region().RestURL("/alerts_plugins_conditions.json") 43 44 for nextURL != "" { 45 response := pluginsConditionsResponse{} 46 resp, err := a.client.GetWithContext(ctx, nextURL, &queryParams, &response) 47 48 if err != nil { 49 return nil, err 50 } 51 52 conditions = append(conditions, response.PluginsConditions...) 53 54 paging := a.pager.Parse(resp) 55 nextURL = paging.Next 56 } 57 58 return conditions, nil 59 } 60 61 // GetPluginsCondition gets information about an alert condition for a plugin 62 // given a policy ID and plugin ID. 63 func (a *Alerts) GetPluginsCondition(policyID int, pluginID int) (*PluginsCondition, error) { 64 return a.GetPluginsConditionWithContext(context.Background(), policyID, pluginID) 65 } 66 67 // GetPluginsConditionWithContext gets information about an alert condition for a plugin 68 // given a policy ID and plugin ID. 69 func (a *Alerts) GetPluginsConditionWithContext(ctx context.Context, policyID int, pluginID int) (*PluginsCondition, error) { 70 conditions, err := a.ListPluginsConditionsWithContext(ctx, policyID) 71 72 if err != nil { 73 return nil, err 74 } 75 76 for _, condition := range conditions { 77 if condition.ID == pluginID { 78 return condition, nil 79 } 80 } 81 82 return nil, errors.NewNotFoundf("no condition found for policy %d and condition ID %d", policyID, pluginID) 83 } 84 85 // CreatePluginsCondition creates an alert condition for a plugin. 86 func (a *Alerts) CreatePluginsCondition(policyID int, condition PluginsCondition) (*PluginsCondition, error) { 87 return a.CreatePluginsConditionWithContext(context.Background(), policyID, condition) 88 } 89 90 // CreatePluginsConditionWithContext creates an alert condition for a plugin. 91 func (a *Alerts) CreatePluginsConditionWithContext(ctx context.Context, policyID int, condition PluginsCondition) (*PluginsCondition, error) { 92 reqBody := pluginConditionRequestBody{ 93 PluginsCondition: condition, 94 } 95 resp := pluginConditionResponse{} 96 97 url := fmt.Sprintf("/alerts_plugins_conditions/policies/%d.json", policyID) 98 _, err := a.client.PostWithContext(ctx, a.config.Region().RestURL(url), nil, &reqBody, &resp) 99 100 if err != nil { 101 return nil, err 102 } 103 104 return &resp.PluginsCondition, nil 105 } 106 107 // UpdatePluginsCondition updates an alert condition for a plugin. 108 func (a *Alerts) UpdatePluginsCondition(condition PluginsCondition) (*PluginsCondition, error) { 109 return a.UpdatePluginsConditionWithContext(context.Background(), condition) 110 } 111 112 // UpdatePluginsConditionWithContext updates an alert condition for a plugin. 113 func (a *Alerts) UpdatePluginsConditionWithContext(ctx context.Context, condition PluginsCondition) (*PluginsCondition, error) { 114 reqBody := pluginConditionRequestBody{ 115 PluginsCondition: condition, 116 } 117 resp := pluginConditionResponse{} 118 119 url := fmt.Sprintf("/alerts_plugins_conditions/%d.json", condition.ID) 120 _, err := a.client.PutWithContext(ctx, a.config.Region().RestURL(url), nil, &reqBody, &resp) 121 122 if err != nil { 123 return nil, err 124 } 125 126 return &resp.PluginsCondition, nil 127 } 128 129 // DeletePluginsCondition deletes a plugin alert condition. 130 func (a *Alerts) DeletePluginsCondition(id int) (*PluginsCondition, error) { 131 return a.DeletePluginsConditionWithContext(context.Background(), id) 132 } 133 134 // DeletePluginsConditionWithContext deletes a plugin alert condition. 135 func (a *Alerts) DeletePluginsConditionWithContext(ctx context.Context, id int) (*PluginsCondition, error) { 136 resp := pluginConditionResponse{} 137 url := fmt.Sprintf("/alerts_plugins_conditions/%d.json", id) 138 139 _, err := a.client.DeleteWithContext(ctx, a.config.Region().RestURL(url), nil, &resp) 140 141 if err != nil { 142 return nil, err 143 } 144 145 return &resp.PluginsCondition, nil 146 } 147 148 type listPluginsConditionsParams struct { 149 PolicyID int `url:"policy_id,omitempty"` 150 } 151 152 type pluginsConditionsResponse struct { 153 PluginsConditions []*PluginsCondition `json:"plugins_conditions,omitempty"` 154 } 155 156 type pluginConditionResponse struct { 157 PluginsCondition PluginsCondition `json:"plugins_condition,omitempty"` 158 } 159 160 type pluginConditionRequestBody struct { 161 PluginsCondition PluginsCondition `json:"plugins_condition,omitempty"` 162 }