1package newrelic
2
3// AlertCondition describes what triggers an alert for a specific policy.
4type AlertCondition struct {
5	ID          int                  `json:"id,omitempty"`
6	Type        string               `json:"type,omitempty"`
7	Name        string               `json:"name,omitempty"`
8	Enabled     bool                 `json:"name,omitempty"`
9	Entities    []string             `json:"entities,omitempty"`
10	Metric      string               `json:"metric,omitempty"`
11	RunbookURL  string               `json:"runbook_url,omitempty"`
12	Terms       []AlertConditionTerm `json:"terms,omitempty"`
13	UserDefined AlertUserDefined     `json:"user_defined,omitempty"`
14}
15
16// AlertConditionTerm defines thresholds that trigger an AlertCondition.
17type AlertConditionTerm struct {
18	Duration     string `json:"duration,omitempty"`
19	Operator     string `json:"operator,omitempty"`
20	Priority     string `json:"priority,omitempty"`
21	Threshold    string `json:"threshold,omitempty"`
22	TimeFunction string `json:"time_function,omitempty"`
23}
24
25// AlertUserDefined describes user-defined behavior for an AlertCondition.
26type AlertUserDefined struct {
27	Metric        string `json:"metric,omitempty"`
28	ValueFunction string `json:"value_function,omitempty"`
29}
30
31// AlertConditionOptions define filters for GetAlertConditions.
32type AlertConditionOptions struct {
33	policyID int
34	Page     int
35}
36
37func (o *AlertConditionOptions) String() string {
38	if o == nil {
39		return ""
40	}
41	return encodeGetParams(map[string]interface{}{
42		"policy_id": o.policyID,
43		"page":      o.Page,
44	})
45}
46
47// GetAlertConditions will return any AlertCondition defined for a given
48// policy, optionally filtered by AlertConditionOptions.
49func (c *Client) GetAlertConditions(policy int, options *AlertConditionOptions) ([]AlertCondition, error) {
50	resp := &struct {
51		Conditions []AlertCondition `json:"conditions,omitempty"`
52	}{}
53	options.policyID = policy
54	err := c.doGet("alerts_conditions.json", options, resp)
55	if err != nil {
56		return nil, err
57	}
58	return resp.Conditions, nil
59}
60