118 lines
3.5 KiB
Go
118 lines
3.5 KiB
Go
package tests
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/influxdata/influxdb/v2"
|
|
influxhttp "github.com/influxdata/influxdb/v2/http"
|
|
"github.com/influxdata/influxdb/v2/kit/platform"
|
|
"github.com/influxdata/influxdb/v2/notification"
|
|
checks "github.com/influxdata/influxdb/v2/notification/check"
|
|
"github.com/influxdata/influxdb/v2/notification/endpoint"
|
|
"github.com/influxdata/influxdb/v2/notification/rule"
|
|
)
|
|
|
|
// ValidCustomNotificationEndpoint creates a NotificationEndpoint with a custom name
|
|
func ValidCustomNotificationEndpoint(org platform.ID, name string) influxdb.NotificationEndpoint {
|
|
return &endpoint.HTTP{
|
|
Base: endpoint.Base{
|
|
Name: name,
|
|
OrgID: &org,
|
|
Status: influxdb.Active,
|
|
CRUDLog: influxdb.CRUDLog{},
|
|
},
|
|
URL: "https://howdy.com",
|
|
AuthMethod: "none",
|
|
Method: http.MethodGet,
|
|
}
|
|
}
|
|
|
|
// ValidNotificationEndpoint returns a valid notification endpoint.
|
|
// This is the easiest way of "mocking" a influxdb.NotificationEndpoint.
|
|
func ValidNotificationEndpoint(org platform.ID) influxdb.NotificationEndpoint {
|
|
return ValidCustomNotificationEndpoint(org, "howdy")
|
|
}
|
|
|
|
// ValidNotificationRule returns a valid Notification Rule of type HTTP for testing
|
|
func ValidNotificationRule(org, endpoint platform.ID) influxdb.NotificationRule {
|
|
d, _ := notification.FromTimeDuration(time.Second * 5)
|
|
return &rule.HTTP{
|
|
Base: rule.Base{
|
|
Name: "little rule",
|
|
EndpointID: endpoint,
|
|
OrgID: org,
|
|
Every: &d,
|
|
CRUDLog: influxdb.CRUDLog{},
|
|
StatusRules: []notification.StatusRule{
|
|
{
|
|
CurrentLevel: notification.Critical,
|
|
},
|
|
},
|
|
TagRules: []notification.TagRule{},
|
|
},
|
|
}
|
|
}
|
|
|
|
// MockCheck returns a valid check to be used in tests.
|
|
func MockCheck(name string, orgID, userID platform.ID) *influxhttp.Check {
|
|
return &influxhttp.Check{
|
|
ID: userID,
|
|
OwnerID: userID,
|
|
Type: "threshold",
|
|
Status: influxdb.Active,
|
|
Name: name,
|
|
Description: "pipeline test check",
|
|
OrgID: orgID,
|
|
Every: "1m",
|
|
Offset: "0m",
|
|
Level: "CRIT",
|
|
StatusMessageTemplate: "Check: ${ r._check_name } is: ${ r._level }",
|
|
Query: &influxhttp.CheckQuery{
|
|
Name: name,
|
|
Text: `from(bucket: "db/rp") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "my_measurement") |> filter(fn: (r) => r._field == "my_field") |> count() |> yield(name: "count")`,
|
|
EditMode: "builder",
|
|
BuilderConfig: &influxhttp.CheckBuilderConfig{
|
|
Buckets: []string{"db/rp"},
|
|
Tags: []struct {
|
|
Key string `json:"key"`
|
|
Values []string `json:"values"`
|
|
AggregateFunctionType string `json:"aggregateFunctionType"`
|
|
}{
|
|
{
|
|
Key: "_measurement",
|
|
Values: []string{"my_measurement"},
|
|
AggregateFunctionType: "filter",
|
|
},
|
|
{
|
|
Key: "_field",
|
|
Values: []string{"my_field"},
|
|
AggregateFunctionType: "filter",
|
|
},
|
|
},
|
|
Functions: []struct {
|
|
Name string `json:"name"`
|
|
}{
|
|
{
|
|
Name: "count",
|
|
},
|
|
},
|
|
AggregateWindow: struct {
|
|
Period string `json:"period"`
|
|
}{
|
|
Period: "1m",
|
|
},
|
|
},
|
|
},
|
|
Thresholds: []*influxhttp.CheckThreshold{
|
|
{
|
|
Type: "greater",
|
|
Value: 9999,
|
|
ThresholdConfigBase: checks.ThresholdConfigBase{
|
|
Level: notification.Critical,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|