1
0
Fork 0
mirror of https://github.com/prometheus-operator/prometheus-operator.git synced 2025-04-21 03:38:43 +00:00

chore: refactor logger and eventrecorder creations ()

Signed-off-by: Simon Pasquier <spasquie@redhat.com>
This commit is contained in:
Simon Pasquier 2024-01-13 23:13:18 +01:00 committed by GitHub
parent 0502dfbb77
commit 34836082f8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 36 additions and 44 deletions
cmd/operator
pkg
alertmanager
operator
prometheus
thanos

View file

@ -254,11 +254,13 @@ func run(fs *flag.FlagSet) int {
cancel()
return 1
}
if !canEmitEvents {
for _, reason := range reasons {
level.Warn(logger).Log("msg", "missing permission to emit events", "reason", reason)
}
}
eventRecorderFactory := operator.NewEventRecorderFactory(canEmitEvents)
scrapeConfigSupported, err := checkPrerequisites(
ctx,
@ -280,7 +282,7 @@ func run(fs *flag.FlagSet) int {
return 1
}
po, err := prometheuscontroller.New(ctx, restConfig, cfg, log.With(logger, "component", prometheuscontroller.ControllerName), r, scrapeConfigSupported, canReadStorageClass, canEmitEvents)
po, err := prometheuscontroller.New(ctx, restConfig, cfg, logger, r, scrapeConfigSupported, canReadStorageClass, eventRecorderFactory)
if err != nil {
level.Error(logger).Log("msg", "instantiating prometheus controller failed", "err", err)
cancel()
@ -315,7 +317,7 @@ func run(fs *flag.FlagSet) int {
var pao *prometheusagentcontroller.Operator
if prometheusAgentSupported {
pao, err = prometheusagentcontroller.New(ctx, restConfig, cfg, log.With(logger, "component", prometheusagentcontroller.ControllerName), r, scrapeConfigSupported, canReadStorageClass, canEmitEvents)
pao, err = prometheusagentcontroller.New(ctx, restConfig, cfg, logger, r, scrapeConfigSupported, canReadStorageClass, eventRecorderFactory)
if err != nil {
level.Error(logger).Log("msg", "instantiating prometheus-agent controller failed", "err", err)
cancel()
@ -323,14 +325,14 @@ func run(fs *flag.FlagSet) int {
}
}
ao, err := alertmanagercontroller.New(ctx, restConfig, cfg, log.With(logger, "component", alertmanagercontroller.ControllerName), r, canReadStorageClass, canEmitEvents)
ao, err := alertmanagercontroller.New(ctx, restConfig, cfg, logger, r, canReadStorageClass, eventRecorderFactory)
if err != nil {
level.Error(logger).Log("msg", "instantiating alertmanager controller failed", "err", err)
cancel()
return 1
}
to, err := thanoscontroller.New(ctx, restConfig, cfg, log.With(logger, "component", thanoscontroller.ControllerName), r, canReadStorageClass, canEmitEvents)
to, err := thanoscontroller.New(ctx, restConfig, cfg, logger, r, canReadStorageClass, eventRecorderFactory)
if err != nil {
level.Error(logger).Log("msg", "instantiating thanos controller failed", "err", err)
cancel()

View file

@ -58,7 +58,7 @@ import (
const (
resyncPeriod = 5 * time.Minute
ControllerName = "alertmanager-controller"
controllerName = "alertmanager-controller"
)
// Config defines the operator's parameters for the Alertmanager controller.
@ -105,7 +105,9 @@ type Operator struct {
}
// New creates a new controller.
func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger log.Logger, r prometheus.Registerer, canReadStorageClass, canEmitEvents bool) (*Operator, error) {
func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger log.Logger, r prometheus.Registerer, canReadStorageClass bool, erf operator.EventRecorderFactory) (*Operator, error) {
logger = log.With(logger, "component", controllerName)
client, err := kubernetes.NewForConfig(restConfig)
if err != nil {
return nil, fmt.Errorf("instantiating kubernetes client failed: %w", err)
@ -124,11 +126,6 @@ func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger
// All the metrics exposed by the controller get the controller="alertmanager" label.
r = prometheus.WrapRegistererWith(prometheus.Labels{"controller": "alertmanager"}, r)
var eventsClient kubernetes.Interface
if canEmitEvents {
eventsClient = client
}
o := &Operator{
kclient: client,
mdClient: mdClient,
@ -140,7 +137,7 @@ func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger
metrics: operator.NewMetrics(r),
reconciliations: &operator.ReconciliationTracker{},
eventRecorder: operator.NewEventRecorder(eventsClient, ControllerName),
eventRecorder: erf(client, controllerName),
canReadStorageClass: canReadStorageClass,
config: Config{

View file

@ -268,17 +268,19 @@ func NewMetrics(r prometheus.Registerer) *Metrics {
return &m
}
func NewEventRecorder(client kubernetes.Interface, component string) record.EventRecorder {
type EventRecorderFactory func(client kubernetes.Interface, component string) record.EventRecorder
eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartStructuredLogging(0)
func NewEventRecorderFactory(emitEvents bool) EventRecorderFactory {
return func(client kubernetes.Interface, component string) record.EventRecorder {
eventBroadcaster := record.NewBroadcaster()
eventBroadcaster.StartStructuredLogging(0)
// Client can be nil in tests or when the operator doesn't have permissions to create events.
if client != nil {
eventBroadcaster.StartRecordingToSink(&typedv1.EventSinkImpl{Interface: client.CoreV1().Events("")})
if emitEvents {
eventBroadcaster.StartRecordingToSink(&typedv1.EventSinkImpl{Interface: client.CoreV1().Events("")})
}
return eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: component})
}
return eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: component})
}
// StsDeleteCreateCounter returns a counter to track statefulset's recreations.

View file

@ -52,7 +52,7 @@ import (
const (
resyncPeriod = 5 * time.Minute
ControllerName = "prometheusagent-controller"
controllerName = "prometheusagent-controller"
)
// Operator manages life cycle of Prometheus agent deployments and
@ -93,7 +93,9 @@ type Operator struct {
}
// New creates a new controller.
func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger log.Logger, r prometheus.Registerer, scrapeConfigSupported, canReadStorageClass, canEmitEvents bool) (*Operator, error) {
func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger log.Logger, r prometheus.Registerer, scrapeConfigSupported, canReadStorageClass bool, erf operator.EventRecorderFactory) (*Operator, error) {
logger = log.With(logger, "component", controllerName)
client, err := kubernetes.NewForConfig(restConfig)
if err != nil {
return nil, fmt.Errorf("instantiating kubernetes client failed: %w", err)
@ -112,11 +114,6 @@ func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger
// All the metrics exposed by the controller get the controller="prometheus-agent" label.
r = prometheus.WrapRegistererWith(prometheus.Labels{"controller": "prometheus-agent"}, r)
var eventsClient kubernetes.Interface
if canEmitEvents {
eventsClient = client
}
o := &Operator{
kclient: client,
mdClient: mdClient,
@ -134,7 +131,7 @@ func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger
reconciliations: &operator.ReconciliationTracker{},
scrapeConfigSupported: scrapeConfigSupported,
canReadStorageClass: canReadStorageClass,
eventRecorder: operator.NewEventRecorder(eventsClient, ControllerName),
eventRecorder: erf(client, controllerName),
}
o.metrics.MustRegister(
o.reconciliations,

View file

@ -52,7 +52,7 @@ import (
const (
resyncPeriod = 5 * time.Minute
ControllerName = "prometheus-controller"
controllerName = "prometheus-controller"
)
// Operator manages life cycle of Prometheus deployments and
@ -93,7 +93,9 @@ type Operator struct {
}
// New creates a new controller.
func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger log.Logger, r prometheus.Registerer, scrapeConfigSupported, canReadStorageClass, canEmitEvents bool) (*Operator, error) {
func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger log.Logger, r prometheus.Registerer, scrapeConfigSupported, canReadStorageClass bool, erf operator.EventRecorderFactory) (*Operator, error) {
logger = log.With(logger, "component", controllerName)
client, err := kubernetes.NewForConfig(restConfig)
if err != nil {
return nil, fmt.Errorf("instantiating kubernetes client failed: %w", err)
@ -112,11 +114,6 @@ func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger
// All the metrics exposed by the controller get the controller="prometheus" label.
r = prometheus.WrapRegistererWith(prometheus.Labels{"controller": "prometheus"}, r)
var eventsClient kubernetes.Interface
if canEmitEvents {
eventsClient = client
}
o := &Operator{
kclient: client,
mdClient: mdClient,
@ -138,7 +135,7 @@ func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger
scrapeConfigSupported: scrapeConfigSupported,
canReadStorageClass: canReadStorageClass,
eventRecorder: operator.NewEventRecorder(eventsClient, ControllerName),
eventRecorder: erf(client, controllerName),
}
o.metrics.MustRegister(o.reconciliations)

View file

@ -48,7 +48,7 @@ import (
const (
resyncPeriod = 5 * time.Minute
thanosRulerLabel = "thanos-ruler"
ControllerName = "thanos-controller"
controllerName = "thanos-controller"
)
// Operator manages life cycle of Thanos deployments and
@ -91,7 +91,9 @@ type Config struct {
}
// New creates a new controller.
func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger log.Logger, r prometheus.Registerer, canReadStorageClass, canEmitEvents bool) (*Operator, error) {
func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger log.Logger, r prometheus.Registerer, canReadStorageClass bool, erf operator.EventRecorderFactory) (*Operator, error) {
logger = log.With(logger, "component", controllerName)
client, err := kubernetes.NewForConfig(restConfig)
if err != nil {
return nil, fmt.Errorf("instantiating kubernetes client failed: %w", err)
@ -110,11 +112,6 @@ func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger
// All the metrics exposed by the controller get the controller="thanos" label.
r = prometheus.WrapRegistererWith(prometheus.Labels{"controller": "thanos"}, r)
var eventsClient kubernetes.Interface
if canEmitEvents {
eventsClient = client
}
o := &Operator{
kclient: client,
mdClient: mdClient,
@ -122,7 +119,7 @@ func New(ctx context.Context, restConfig *rest.Config, c operator.Config, logger
logger: logger,
accessor: operator.NewAccessor(logger),
metrics: operator.NewMetrics(r),
eventRecorder: operator.NewEventRecorder(eventsClient, ControllerName),
eventRecorder: erf(client, controllerName),
reconciliations: &operator.ReconciliationTracker{},
canReadStorageClass: canReadStorageClass,
config: Config{