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  }