Files
2025-04-18 10:37:23 -05:00

66 lines
2.0 KiB
Go

package options
import (
"log/slog"
"strconv"
"github.com/spf13/pflag"
genericfeatures "k8s.io/apiserver/pkg/features"
genericapiserver "k8s.io/apiserver/pkg/server"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/component-base/logs"
"k8s.io/klog/v2"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/log/slogadapter"
)
type ExtraOptions struct {
DevMode bool
ExternalAddress string
APIURL string
Verbosity int
}
func NewExtraOptions() *ExtraOptions {
return &ExtraOptions{
DevMode: false,
Verbosity: 0,
}
}
func (o *ExtraOptions) AddFlags(fs *pflag.FlagSet) {
fs.BoolVar(&o.DevMode, "grafana-apiserver-dev-mode", o.DevMode, "Enable dev mode")
fs.StringVar(&o.ExternalAddress, "grafana-apiserver-host", o.ExternalAddress, "Host")
fs.StringVar(&o.APIURL, "grafana-apiserver-api-url", o.APIURL, "API URL")
fs.IntVar(&o.Verbosity, "verbosity", o.Verbosity, "Verbosity")
}
func (o *ExtraOptions) Validate() []error {
return nil
}
func (o *ExtraOptions) ApplyTo(c *genericapiserver.RecommendedConfig) error {
handler := slogadapter.New(log.New("grafana-apiserver"))
logger := slog.New(handler)
if err := utilfeature.DefaultMutableFeatureGate.SetFromMap(map[string]bool{
string(genericfeatures.APIServerTracing): false,
}); err != nil {
return err
}
// if verbosity is 8+, response bodies will be logged. versboity of 7 should then be the max
if o.Verbosity > 7 {
o.Verbosity = 7
}
klog.SetSlogLogger(logger)
// at this point, the slog will be the background logger. set it as the default logger, as setting solely slog above
// won't update the verbosity because it is set as a contextual logger, and that function says "such a logger cannot
// rely on verbosity checking in klog"
klog.SetLogger(klog.Background())
if _, err := logs.GlogSetter(strconv.Itoa(o.Verbosity)); err != nil {
logger.Error("failed to set log level", "error", err)
}
c.ExternalAddress = o.ExternalAddress
return nil
}