From d1438cc4195da9b0575481fc59b90595a9bb188f Mon Sep 17 00:00:00 2001 From: Jianrong Zhang Date: Wed, 2 Oct 2024 09:23:02 -0400 Subject: [PATCH] [issue-464] Create a Prometheus ServiceMonitor object that can capture/collect metrics from deployed SonataFlow instances:address review comments --- internal/controller/sonataflow_controller.go | 33 ++++++++++++++----- .../sonataflowplatform_controller.go | 19 +++++++---- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/internal/controller/sonataflow_controller.go b/internal/controller/sonataflow_controller.go index 3f3a1e2b7..7724a6378 100644 --- a/internal/controller/sonataflow_controller.go +++ b/internal/controller/sonataflow_controller.go @@ -24,6 +24,7 @@ import ( "fmt" "github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/knative" + "github.com/apache/incubator-kie-kogito-serverless-operator/internal/controller/monitoring" sourcesv1 "knative.dev/eventing/pkg/apis/sources/v1" servingv1 "knative.dev/serving/pkg/apis/serving/v1" @@ -220,15 +221,11 @@ func buildEnqueueRequestsFromMapFunc(c client.Client, b *operatorapi.SonataFlowB // SetupWithManager sets up the controller with the Manager. func (r *SonataFlowReconciler) SetupWithManager(mgr ctrl.Manager) error { - return ctrl.NewControllerManagedBy(mgr). + builder := ctrl.NewControllerManagedBy(mgr). For(&operatorapi.SonataFlow{}). Owns(&appsv1.Deployment{}). Owns(&corev1.Service{}). Owns(&corev1.ConfigMap{}). - Owns(&servingv1.Service{}). - Owns(&eventingv1.Trigger{}). - Owns(&sourcesv1.SinkBinding{}). - Owns(&prometheus.ServiceMonitor{}). Owns(&operatorapi.SonataFlowBuild{}). Watches(&operatorapi.SonataFlowPlatform{}, handler.EnqueueRequestsFromMapFunc(func(c context.Context, a client.Object) []reconcile.Request { plat, ok := a.(*operatorapi.SonataFlowPlatform) @@ -245,7 +242,27 @@ func (r *SonataFlowReconciler) SetupWithManager(mgr ctrl.Manager) error { return []reconcile.Request{} } return buildEnqueueRequestsFromMapFunc(mgr.GetClient(), build) - })). - Watches(&eventingv1.Trigger{}, handler.EnqueueRequestsFromMapFunc(knative.MapTriggerToPlatformRequests)). - Complete(r) + })) + + knativeAvail, err := knative.GetKnativeAvailability(mgr.GetConfig()) + if err != nil { + return err + } + if knativeAvail.Serving { + builder = builder.Owns(&servingv1.Service{}) + } + if knativeAvail.Eventing { + builder = builder.Owns(&eventingv1.Trigger{}). + Owns(&sourcesv1.SinkBinding{}). + Watches(&eventingv1.Trigger{}, handler.EnqueueRequestsFromMapFunc(knative.MapTriggerToPlatformRequests)) + } + promAvail, err := monitoring.GetPrometheusAvailability(mgr.GetConfig()) + if err != nil { + return err + } + if promAvail { + builder = builder.Owns(&prometheus.ServiceMonitor{}) + } + + return builder.Complete(r) } diff --git a/internal/controller/sonataflowplatform_controller.go b/internal/controller/sonataflowplatform_controller.go index b5fbbe269..75f3d1c5e 100644 --- a/internal/controller/sonataflowplatform_controller.go +++ b/internal/controller/sonataflowplatform_controller.go @@ -251,17 +251,24 @@ func (r *SonataFlowPlatformReconciler) updateIfActiveClusterPlatformExists(ctx c // SetupWithManager sets up the controller with the Manager. func (r *SonataFlowPlatformReconciler) SetupWithManager(mgr ctrlrun.Manager) error { - return ctrlrun.NewControllerManagedBy(mgr). + builder := ctrlrun.NewControllerManagedBy(mgr). For(&operatorapi.SonataFlowPlatform{}). Owns(&appsv1.Deployment{}). Owns(&corev1.Service{}). Owns(&corev1.ConfigMap{}). - Owns(&eventingv1.Trigger{}). - Owns(&sourcesv1.SinkBinding{}). Watches(&operatorapi.SonataFlowPlatform{}, handler.EnqueueRequestsFromMapFunc(r.mapPlatformToPlatformRequests)). - Watches(&operatorapi.SonataFlowClusterPlatform{}, handler.EnqueueRequestsFromMapFunc(r.mapClusterPlatformToPlatformRequests)). - Watches(&eventingv1.Trigger{}, handler.EnqueueRequestsFromMapFunc(knative.MapTriggerToPlatformRequests)). - Complete(r) + Watches(&operatorapi.SonataFlowClusterPlatform{}, handler.EnqueueRequestsFromMapFunc(r.mapClusterPlatformToPlatformRequests)) + + knativeAvail, err := knative.GetKnativeAvailability(mgr.GetConfig()) + if err != nil { + return err + } + if knativeAvail.Eventing { + builder = builder.Owns(&eventingv1.Trigger{}). + Owns(&sourcesv1.SinkBinding{}). + Watches(&eventingv1.Trigger{}, handler.EnqueueRequestsFromMapFunc(knative.MapTriggerToPlatformRequests)) + } + return builder.Complete(r) } // if active clusterplatform object is changed, reconcile all SonataFlowPlatforms in the cluster.