Use embedded metrics struct from pkg/controller

This rewrites the two reconcilers, and their initialisation in
main.go, to use the `Metrics` struct from pkg/controller.
This commit is contained in:
Michael Bridgen 2020-11-26 13:35:02 +00:00
parent b090d834cf
commit 0ccada4a0a
4 changed files with 25 additions and 30 deletions

View File

@ -34,8 +34,8 @@ import (
"sigs.k8s.io/controller-runtime/pkg/reconcile"
"sigs.k8s.io/controller-runtime/pkg/source"
"github.com/fluxcd/pkg/runtime/controller"
"github.com/fluxcd/pkg/runtime/events"
"github.com/fluxcd/pkg/runtime/metrics"
"github.com/fluxcd/pkg/version"
imagev1alpha1 "github.com/fluxcd/image-reflector-controller/api/v1alpha1"
@ -57,8 +57,8 @@ type ImagePolicyReconciler struct {
Scheme *runtime.Scheme
EventRecorder kuberecorder.EventRecorder
ExternalEventRecorder *events.Recorder
MetricsRecorder *metrics.Recorder
Database DatabaseReader
controller.Metrics
Database DatabaseReader
}
// +kubebuilder:rbac:groups=image.toolkit.fluxcd.io,resources=imagepolicies,verbs=get;list;watch;create;update;patch;delete
@ -76,14 +76,12 @@ func (r *ImagePolicyReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error)
log := r.Log.WithValues("controller", strings.ToLower(imagev1alpha1.ImagePolicyKind), "request", req.NamespacedName)
// record reconciliation duration
if r.MetricsRecorder != nil {
objRef, err := reference.GetReference(r.Scheme, &pol)
if err != nil {
return ctrl.Result{}, err
}
defer r.MetricsRecorder.RecordDuration(*objRef, reconcileStart)
objRef, refErr := reference.GetReference(r.Scheme, &pol)
if refErr != nil {
return ctrl.Result{}, refErr
}
// the duration is recorded, but there's no readiness condition at present
defer r.RecordDuration(objRef, reconcileStart)
var repo imagev1alpha1.ImageRepository
if err := r.Get(ctx, types.NamespacedName{

View File

@ -39,8 +39,8 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
"github.com/fluxcd/pkg/apis/meta"
"github.com/fluxcd/pkg/runtime/controller"
"github.com/fluxcd/pkg/runtime/events"
"github.com/fluxcd/pkg/runtime/metrics"
"github.com/fluxcd/pkg/runtime/predicates"
imagev1alpha1 "github.com/fluxcd/image-reflector-controller/api/v1alpha1"
@ -57,8 +57,8 @@ type ImageRepositoryReconciler struct {
Scheme *runtime.Scheme
EventRecorder kuberecorder.EventRecorder
ExternalEventRecorder *events.Recorder
MetricsRecorder *metrics.Recorder
Database interface {
controller.Metrics
Database interface {
DatabaseWriter
DatabaseReader
}
@ -83,8 +83,13 @@ func (r *ImageRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, er
log := r.Log.WithValues("controller", strings.ToLower(imagev1alpha1.ImageRepositoryKind), "request", req.NamespacedName)
// record rediness metric
defer r.recordReadinessMetric(&imageRepo)
objRef, err := reference.GetReference(r.Scheme, &imageRepo)
if err != nil {
return ctrl.Result{}, err
}
// this always gets recorded
defer r.RecordReadinessMetric(objRef, &imageRepo)
if imageRepo.Spec.Suspend {
msg := "ImageRepository is suspended, skipping reconciliation"
@ -102,14 +107,8 @@ func (r *ImageRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, er
return ctrl.Result{}, nil
}
// record reconciliation duration
if r.MetricsRecorder != nil {
objRef, err := reference.GetReference(r.Scheme, &imageRepo)
if err != nil {
return ctrl.Result{}, err
}
defer r.MetricsRecorder.RecordDuration(*objRef, reconcileStart)
}
// this gets recorded if it's not suspended
defer r.MetricsRecorder.RecordDuration(*objRef, reconcileStart)
ref, err := name.ParseReference(imageRepo.Spec.Image)
if err != nil {

1
go.sum
View File

@ -201,6 +201,7 @@ github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQo
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
github.com/fluxcd/pkg v0.0.4 h1:fMA6GG3FTSBFDrlB026gQJhxj4xVuvcvwP3rhX/Yqrw=
github.com/fluxcd/pkg/apis/meta v0.3.0 h1:o2YkfGgf0j8sKeZs8cBmmmMKLA7kEoS1qYViOial1Ds=
github.com/fluxcd/pkg/apis/meta v0.3.0/go.mod h1:wOzQQx8CdtUQCGaLzqGu4QgnNxYkI6/wvdvlovxWhF0=
github.com/fluxcd/pkg/apis/meta v0.4.0 h1:JChqB9GGgorW9HWKxirTVV0rzrcLyzBaVjinmqZ0iHA=

11
main.go
View File

@ -25,13 +25,12 @@ import (
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/healthz"
crtlmetrics "sigs.k8s.io/controller-runtime/pkg/metrics"
imagev1alpha1 "github.com/fluxcd/image-reflector-controller/api/v1alpha1"
"github.com/fluxcd/image-reflector-controller/controllers"
"github.com/fluxcd/pkg/runtime/controller"
"github.com/fluxcd/pkg/runtime/events"
"github.com/fluxcd/pkg/runtime/logger"
"github.com/fluxcd/pkg/runtime/metrics"
// +kubebuilder:scaffold:imports
)
@ -84,9 +83,6 @@ func main() {
}
}
metricsRecorder := metrics.NewRecorder()
crtlmetrics.Registry.MustRegister(metricsRecorder.Collectors()...)
watchNamespace := ""
if !watchAllNamespaces {
watchNamespace = os.Getenv("RUNTIME_NAMESPACE")
@ -109,6 +105,7 @@ func main() {
setupChecks(mgr)
db := controllers.NewDatabase()
metrics := controller.MustMakeMetrics()
if err = (&controllers.ImageRepositoryReconciler{
Client: mgr.GetClient(),
@ -116,7 +113,7 @@ func main() {
Scheme: mgr.GetScheme(),
EventRecorder: mgr.GetEventRecorderFor(controllerName),
ExternalEventRecorder: eventRecorder,
MetricsRecorder: metricsRecorder,
Metrics: metrics,
Database: db,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", imagev1alpha1.ImageRepositoryKind)
@ -128,7 +125,7 @@ func main() {
Scheme: mgr.GetScheme(),
EventRecorder: mgr.GetEventRecorderFor(controllerName),
ExternalEventRecorder: eventRecorder,
MetricsRecorder: metricsRecorder,
Metrics: metrics,
Database: db,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", imagev1alpha1.ImagePolicyKind)