Files

76 lines
1.6 KiB
Go

package alertmanager
import (
_ "embed"
"fmt"
"net/url"
"os"
"github.com/grafana/e2e"
gapi "github.com/grafana/grafana-api-golang-client"
)
const (
grafanaBinary = "/run.sh"
grafanaHTTPPort = 3000
)
// GetDefaultImage returns the Docker image to use to run the Grafana..
func GetGrafanaImage() string {
if img := os.Getenv("GRAFANA_IMAGE"); img != "" {
return img
}
if version := os.Getenv("GRAFANA_VERSION"); version != "" {
return "grafana/grafana-enterprise-dev:" + version
}
panic("Provide GRAFANA_VERSION or GRAFANA_IMAGE")
}
type GrafanaService struct {
*e2e.HTTPService
}
func NewGrafanaService(name string, flags, envVars map[string]string) *GrafanaService {
svc := &GrafanaService{
HTTPService: e2e.NewHTTPService(
name,
GetGrafanaImage(),
e2e.NewCommandWithoutEntrypoint(grafanaBinary, e2e.BuildArgs(flags)...),
e2e.NewHTTPReadinessProbe(grafanaHTTPPort, "/ready", 200, 299),
grafanaHTTPPort,
9094,
),
}
svc.SetEnvVars(envVars)
return svc
}
type GrafanaClient struct {
*gapi.Client
}
// NewGrafanaClient creates a client for using the Grafana API. Note we don't bother
// wrapping the client library, and just use it as-is, until we find a reason not to.
func NewGrafanaClient(host string, orgID int64) (*GrafanaClient, error) {
cfg := gapi.Config{
BasicAuth: url.UserPassword("admin", "admin"),
OrgID: orgID,
HTTPHeaders: map[string]string{
"X-Disable-Provenance": "true",
},
}
client, err := gapi.New(fmt.Sprintf("http://%s/", host), cfg)
if err != nil {
return nil, err
}
return &GrafanaClient{
Client: client,
}, nil
}