github.com/newrelic/newrelic-client-go@v1.1.0/pkg/alerts/infrastructure_conditions.go (about) 1 package alerts 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/newrelic/newrelic-client-go/internal/serialization" 8 ) 9 10 // InfrastructureCondition represents a New Relic Infrastructure alert condition. 11 type InfrastructureCondition struct { 12 Comparison string `json:"comparison,omitempty"` 13 CreatedAt *serialization.EpochTime `json:"created_at_epoch_millis,omitempty"` 14 Critical *InfrastructureConditionThreshold `json:"critical_threshold,omitempty"` 15 Enabled bool `json:"enabled"` 16 Event string `json:"event_type,omitempty"` 17 ID int `json:"id,omitempty"` 18 IntegrationProvider string `json:"integration_provider,omitempty"` 19 Name string `json:"name,omitempty"` 20 PolicyID int `json:"policy_id,omitempty"` 21 ProcessWhere string `json:"process_where_clause,omitempty"` 22 RunbookURL string `json:"runbook_url,omitempty"` 23 Select string `json:"select_value,omitempty"` 24 Type string `json:"type,omitempty"` 25 UpdatedAt *serialization.EpochTime `json:"updated_at_epoch_millis,omitempty"` 26 ViolationCloseTimer *int `json:"violation_close_timer,omitempty"` 27 Warning *InfrastructureConditionThreshold `json:"warning_threshold,omitempty"` 28 Where string `json:"where_clause,omitempty"` 29 Description string `json:"description"` 30 } 31 32 // InfrastructureConditionThreshold represents an New Relic Infrastructure alert condition threshold. 33 type InfrastructureConditionThreshold struct { 34 Duration int `json:"duration_minutes,omitempty"` 35 Function string `json:"time_function,omitempty"` 36 Value *float64 `json:"value"` 37 } 38 39 // ListInfrastructureConditions is used to retrieve New Relic Infrastructure alert conditions. 40 func (a *Alerts) ListInfrastructureConditions(policyID int) ([]InfrastructureCondition, error) { 41 return a.ListInfrastructureConditionsWithContext(context.Background(), policyID) 42 } 43 44 // ListInfrastructureConditionsWithContext is used to retrieve New Relic Infrastructure alert conditions. 45 func (a *Alerts) ListInfrastructureConditionsWithContext(ctx context.Context, policyID int) ([]InfrastructureCondition, error) { 46 resp := infrastructureConditionsResponse{} 47 queryParams := listInfrastructureConditionsParams{ 48 PolicyID: policyID, 49 } 50 _, err := a.infraClient.GetWithContext(ctx, a.config.Region().InfrastructureURL("/alerts/conditions"), &queryParams, &resp) 51 52 if err != nil { 53 return nil, err 54 } 55 56 return resp.Conditions, nil 57 } 58 59 // GetInfrastructureCondition is used to retrieve a specific New Relic Infrastructure alert condition. 60 func (a *Alerts) GetInfrastructureCondition(conditionID int) (*InfrastructureCondition, error) { 61 return a.GetInfrastructureConditionWithContext(context.Background(), conditionID) 62 } 63 64 // GetInfrastructureConditionWithContext is used to retrieve a specific New Relic Infrastructure alert condition. 65 func (a *Alerts) GetInfrastructureConditionWithContext(ctx context.Context, conditionID int) (*InfrastructureCondition, error) { 66 resp := infrastructureConditionResponse{} 67 url := fmt.Sprintf("/alerts/conditions/%d", conditionID) 68 _, err := a.infraClient.GetWithContext(ctx, a.config.Region().InfrastructureURL(url), nil, &resp) 69 70 if err != nil { 71 return nil, err 72 } 73 74 return &resp.Condition, nil 75 } 76 77 // CreateInfrastructureCondition is used to create a New Relic Infrastructure alert condition. 78 func (a *Alerts) CreateInfrastructureCondition(condition InfrastructureCondition) (*InfrastructureCondition, error) { 79 return a.CreateInfrastructureConditionWithContext(context.Background(), condition) 80 } 81 82 // CreateInfrastructureConditionWithContext is used to create a New Relic Infrastructure alert condition. 83 func (a *Alerts) CreateInfrastructureConditionWithContext(ctx context.Context, condition InfrastructureCondition) (*InfrastructureCondition, error) { 84 resp := infrastructureConditionResponse{} 85 reqBody := infrastructureConditionRequest{condition} 86 87 _, err := a.infraClient.PostWithContext(ctx, a.config.Region().InfrastructureURL("/alerts/conditions"), nil, &reqBody, &resp) 88 89 if err != nil { 90 return nil, err 91 } 92 93 return &resp.Condition, nil 94 } 95 96 // UpdateInfrastructureCondition is used to update a New Relic Infrastructure alert condition. 97 func (a *Alerts) UpdateInfrastructureCondition(condition InfrastructureCondition) (*InfrastructureCondition, error) { 98 return a.UpdateInfrastructureConditionWithContext(context.Background(), condition) 99 } 100 101 // UpdateInfrastructureConditionWithContext is used to update a New Relic Infrastructure alert condition. 102 func (a *Alerts) UpdateInfrastructureConditionWithContext(ctx context.Context, condition InfrastructureCondition) (*InfrastructureCondition, error) { 103 resp := infrastructureConditionResponse{} 104 reqBody := infrastructureConditionRequest{condition} 105 106 url := fmt.Sprintf("/alerts/conditions/%d", condition.ID) 107 _, err := a.infraClient.PutWithContext(ctx, a.config.Region().InfrastructureURL(url), nil, &reqBody, &resp) 108 109 if err != nil { 110 return nil, err 111 } 112 113 return &resp.Condition, nil 114 } 115 116 // DeleteInfrastructureCondition is used to delete a New Relic Infrastructure alert condition. 117 func (a *Alerts) DeleteInfrastructureCondition(conditionID int) error { 118 return a.DeleteInfrastructureConditionWithContext(context.Background(), conditionID) 119 } 120 121 // DeleteInfrastructureConditionWithContext is used to delete a New Relic Infrastructure alert condition. 122 func (a *Alerts) DeleteInfrastructureConditionWithContext(ctx context.Context, conditionID int) error { 123 url := fmt.Sprintf("/alerts/conditions/%d", conditionID) 124 _, err := a.infraClient.DeleteWithContext(ctx, a.config.Region().InfrastructureURL(url), nil, nil) 125 126 if err != nil { 127 return err 128 } 129 130 return nil 131 } 132 133 type listInfrastructureConditionsParams struct { 134 PolicyID int `url:"policy_id,omitempty"` 135 } 136 137 type infrastructureConditionsResponse struct { 138 Conditions []InfrastructureCondition `json:"data,omitempty"` 139 } 140 141 type infrastructureConditionResponse struct { 142 Condition InfrastructureCondition `json:"data,omitempty"` 143 } 144 145 type infrastructureConditionRequest struct { 146 Condition InfrastructureCondition `json:"data,omitempty"` 147 }