influxdb/notification/endpoint/pagerduty.go

70 lines
1.7 KiB
Go

package endpoint
import (
"encoding/json"
"github.com/influxdata/influxdb/v2"
)
var _ influxdb.NotificationEndpoint = &PagerDuty{}
const routingKeySuffix = "-routing-key"
// PagerDuty is the notification endpoint config of pagerduty.
type PagerDuty struct {
Base
// ClientURL is the url that is presented in the PagerDuty UI when this alert is triggered
ClientURL string `json:"clientURL"`
// RoutingKey is a version 4 UUID expressed as a 32-digit hexadecimal number.
// This is the Integration Key for an integration on any given service.
RoutingKey influxdb.SecretField `json:"routingKey"`
}
// BackfillSecretKeys fill back fill the secret field key during the unmarshalling
// if value of that secret field is not nil.
func (s *PagerDuty) BackfillSecretKeys() {
if s.RoutingKey.Key == "" && s.RoutingKey.Value != nil {
s.RoutingKey.Key = s.idStr() + routingKeySuffix
}
}
// SecretFields return available secret fields.
func (s PagerDuty) SecretFields() []influxdb.SecretField {
return []influxdb.SecretField{
s.RoutingKey,
}
}
// Valid returns error if some configuration is invalid
func (s PagerDuty) Valid() error {
if err := s.Base.valid(); err != nil {
return err
}
if s.RoutingKey.Key == "" {
return &influxdb.Error{
Code: influxdb.EInvalid,
Msg: "pagerduty routing key is invalid",
}
}
return nil
}
type pagerdutyAlias PagerDuty
// MarshalJSON implement json.Marshaler interface.
func (s PagerDuty) MarshalJSON() ([]byte, error) {
return json.Marshal(
struct {
pagerdutyAlias
Type string `json:"type"`
}{
pagerdutyAlias: pagerdutyAlias(s),
Type: s.Type(),
})
}
// Type returns the type.
func (s PagerDuty) Type() string {
return PagerDutyType
}