Alerting: Send merged configuration to the remote alertmanager (#107004)
This commit is contained in:
@@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/grafana/e2e"
|
||||
gapi "github.com/grafana/grafana-api-golang-client"
|
||||
"github.com/grafana/grafana/pkg/services/ngalert/remote/client"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
@@ -43,6 +44,7 @@ type AlertmanagerScenario struct {
|
||||
Webhook *WebhookService
|
||||
Postgres *PostgresService
|
||||
Loki *LokiService
|
||||
Mimir *MimirService
|
||||
}
|
||||
|
||||
func NewAlertmanagerScenario() (*AlertmanagerScenario, error) {
|
||||
@@ -381,3 +383,10 @@ func mapInstancePeers(is []string) map[string][]string {
|
||||
|
||||
return mIs
|
||||
}
|
||||
|
||||
func (s *AlertmanagerScenario) NewMimirClient(tenantID string) (client.MimirClient, error) {
|
||||
if s.Mimir == nil {
|
||||
return nil, fmt.Errorf("mimir service not started")
|
||||
}
|
||||
return NewMimirClient("http://"+s.Mimir.HTTPEndpoint(), tenantID)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
package alertmanager
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
|
||||
"github.com/grafana/e2e"
|
||||
"github.com/grafana/grafana/pkg/infra/log"
|
||||
"github.com/grafana/grafana/pkg/infra/tracing"
|
||||
"github.com/grafana/grafana/pkg/services/ngalert/metrics"
|
||||
"github.com/grafana/grafana/pkg/services/ngalert/remote/client"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
const (
|
||||
mimirImage = "grafana/mimir:r348-017076d8"
|
||||
|
||||
mimirBinary = "/bin/mimir"
|
||||
mimirHTTPPort = 33667
|
||||
mimirGRPCPort = 33668
|
||||
)
|
||||
|
||||
type MimirService struct {
|
||||
*e2e.HTTPService
|
||||
}
|
||||
|
||||
func NewMimirService(name string) *MimirService {
|
||||
flags := map[string]string{
|
||||
"-target": "alertmanager",
|
||||
"-server.http-listen-port": fmt.Sprintf("%d", mimirHTTPPort),
|
||||
"-server.grpc-listen-port": fmt.Sprintf("%d", mimirGRPCPort),
|
||||
"-alertmanager.web.external-url": "http://localhost:8080/alertmanager",
|
||||
"-alertmanager-storage.backend": "filesystem",
|
||||
"-alertmanager-storage.filesystem.dir": "/tmp/mimir/alertmanager",
|
||||
"-alertmanager.grafana-alertmanager-compatibility-enabled": "true",
|
||||
}
|
||||
|
||||
return &MimirService{
|
||||
HTTPService: e2e.NewHTTPService(
|
||||
name,
|
||||
mimirImage,
|
||||
e2e.NewCommandWithoutEntrypoint(mimirBinary, e2e.BuildArgs(flags)...),
|
||||
e2e.NewHTTPReadinessProbe(mimirHTTPPort, "/ready", 200, 299),
|
||||
mimirHTTPPort,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
func NewMimirClient(mimirURL, tenantID string) (client.MimirClient, error) {
|
||||
u, err := url.Parse(mimirURL)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cfg := &client.Config{
|
||||
URL: u,
|
||||
TenantID: tenantID,
|
||||
Password: "", // No password needed for test
|
||||
Logger: log.NewNopLogger(),
|
||||
}
|
||||
|
||||
registry := prometheus.NewRegistry()
|
||||
metrics := metrics.NewRemoteAlertmanagerMetrics(registry)
|
||||
tracer := tracing.InitializeTracerForTest()
|
||||
|
||||
return client.New(cfg, metrics, tracer)
|
||||
}
|
||||
Reference in New Issue
Block a user