82 lines
2.3 KiB
Go
82 lines
2.3 KiB
Go
package config
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
"time"
|
|
|
|
"github.com/spf13/pflag"
|
|
|
|
"github.com/grafana/alerting/notify/historian/lokiclient"
|
|
"github.com/grafana/grafana-app-sdk/simple"
|
|
)
|
|
|
|
const (
|
|
lokiDefaultMaxQueryLength = 721 * time.Hour // 30d1h, matches the default value in Loki
|
|
lokiDefaultMaxQuerySize = 65536 // 64kb
|
|
)
|
|
|
|
type LokiConfig struct {
|
|
lokiclient.LokiConfig
|
|
Transport http.RoundTripper
|
|
}
|
|
|
|
type NotificationConfig struct {
|
|
Enabled bool
|
|
Loki LokiConfig
|
|
}
|
|
|
|
type RuntimeConfig struct {
|
|
GetAlertStateHistoryHandler simple.AppCustomRouteHandler
|
|
Notification NotificationConfig
|
|
}
|
|
|
|
func (n *NotificationConfig) AddFlagsWithPrefix(prefix string, flags *pflag.FlagSet) {
|
|
flags.BoolVar(&n.Enabled, prefix+".enabled", false, "Enable notification query endpoints")
|
|
addLokiFlags(&n.Loki.LokiConfig, prefix+".loki", flags)
|
|
}
|
|
|
|
func (r *RuntimeConfig) AddFlagsWithPrefix(prefix string, flags *pflag.FlagSet) {
|
|
r.Notification.AddFlagsWithPrefix(prefix+".notification", flags)
|
|
}
|
|
|
|
func (r *RuntimeConfig) AddFlags(flags *pflag.FlagSet) {
|
|
r.AddFlagsWithPrefix("alerting.historian", flags)
|
|
}
|
|
|
|
type urlVar struct {
|
|
u **url.URL
|
|
}
|
|
|
|
// String implements flag.Value
|
|
func (v urlVar) String() string {
|
|
if v.u == nil || *v.u == nil {
|
|
return ""
|
|
}
|
|
return (*v.u).Redacted()
|
|
}
|
|
|
|
// Set implements flag.Value
|
|
func (v urlVar) Set(s string) error {
|
|
u, err := url.Parse(s)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*v.u = u
|
|
return nil
|
|
}
|
|
|
|
// Type implements flag.Value
|
|
func (v urlVar) Type() string {
|
|
return "url"
|
|
}
|
|
|
|
func addLokiFlags(l *lokiclient.LokiConfig, prefix string, flags *pflag.FlagSet) {
|
|
flags.Var(urlVar{&l.ReadPathURL}, prefix+".read-url", "URL to Loki instance for performing queries")
|
|
flags.StringVar(&l.BasicAuthUser, prefix+".user", "", "Basic auth Username to authenticate to the Loki instance")
|
|
flags.StringVar(&l.BasicAuthPassword, prefix+".password", "", "Basic auth password to authenticate to the Loki instance")
|
|
flags.StringVar(&l.TenantID, prefix+".tenant-id", "", "Value to use for X-Scope-OrgID")
|
|
flags.DurationVar(&l.MaxQueryLength, prefix+".max-query-length", lokiDefaultMaxQueryLength, "Maximum allowed time range for queries")
|
|
flags.IntVar(&l.MaxQuerySize, prefix+".max-query-size", lokiDefaultMaxQuerySize, "Maximum allowed size of a query string passed to Loki")
|
|
}
|