Files
karma/mapper/mapper.go
Łukasz Mierzwa 48848e2f08 Add mapper module allowing to pick Alertmanager schema handlers at runtime
This modules allows to have a dedicated path for unmarshaling Alertmanager reponse per Alertmanager version. It returns data in format handled internally by unsee (which is Alertmanager data + some additional attributes)
2017-04-06 19:24:47 -07:00

60 lines
1.6 KiB
Go

package mapper
import (
"fmt"
"github.com/cloudflare/unsee/models"
)
var (
alertMappers = []AlertMapper{}
silenceMappers = []SilenceMapper{}
)
// AlertMapper implements Alertmanager -> unsee alert data mapping that works
// for a specific range of Alertmanager versions
type AlertMapper interface {
IsSupported(version string) bool
GetAlerts() ([]models.UnseeAlertGroup, error)
}
// RegisterAlertMapper allows to register mapper implementing alert data
// handling for specific Alertmanager versions
func RegisterAlertMapper(m AlertMapper) {
alertMappers = append(alertMappers, m)
}
// GetAlertMapper returns mapper for given version
func GetAlertMapper(version string) (AlertMapper, error) {
for _, m := range alertMappers {
if m.IsSupported(version) {
return m, nil
}
}
return nil, fmt.Errorf("Can't find alert mapper for Alertmanager %s", version)
}
// SilenceMapper implements Alertmanager -> unsee silence data mapping that
// works for a specific range of Alertmanager versions
type SilenceMapper interface {
Release() string
IsSupported(version string) bool
GetSilences() ([]models.UnseeSilence, error)
}
// RegisterSilenceMapper allows to register mapper implementing silence data
// handling for specific Alertmanager versions
func RegisterSilenceMapper(m SilenceMapper) {
silenceMappers = append(silenceMappers, m)
}
// GetSilenceMapper returns mapper for given version
func GetSilenceMapper(version string) (SilenceMapper, error) {
for _, m := range silenceMappers {
if m.IsSupported(version) {
return m, nil
}
}
return nil, fmt.Errorf("Can't find silence mapper for Alertmanager %s", version)
}