From ed9808fad6069a996db2ea3147d2ee762286c574 Mon Sep 17 00:00:00 2001 From: ZverGuy Date: Tue, 14 Apr 2026 14:44:38 +0300 Subject: [PATCH] perf(controller): resolve Prometheus URL once per reconcile, not per BucketClaim MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move resolvePrometheusURL call before the BucketClaim loop and pass the URL as parameter. Avoids redundant namespace lookups and reduces reconcile time from 2×N+1 to 2×N HTTP calls (where N = BucketClaims). Co-Authored-By: Claude Signed-off-by: ZverGuy --- internal/controller/workloadmonitor_controller.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/controller/workloadmonitor_controller.go b/internal/controller/workloadmonitor_controller.go index 5b450d75..cb070e0c 100644 --- a/internal/controller/workloadmonitor_controller.go +++ b/internal/controller/workloadmonitor_controller.go @@ -224,6 +224,7 @@ func (r *WorkloadMonitorReconciler) reconcileBucketClaimForMonitor( ctx context.Context, monitor *cozyv1alpha1.WorkloadMonitor, bc cosiv1alpha1.BucketClaim, + promURL string, ) error { logger := log.FromContext(ctx) workload := &cozyv1alpha1.Workload{ @@ -243,7 +244,6 @@ func (r *WorkloadMonitorReconciler) reconcileBucketClaimForMonitor( // bc.Status.BucketName is the COSI Bucket name, which the COSI driver // uses directly as the SeaweedFS bucket name. if bn := bc.Status.BucketName; bn != "" { - promURL := r.resolvePrometheusURL(ctx, bc.Namespace) if v, ok := r.queryPrometheusMetric(ctx, promURL, fmt.Sprintf(`SeaweedFS_s3_bucket_size_bytes{bucket="%s"}`, bn)); ok { resources["s3-storage-bytes"] = *resource.NewQuantity(v, resource.BinarySI) } @@ -563,8 +563,9 @@ func (r *WorkloadMonitorReconciler) Reconcile(ctx context.Context, req ctrl.Requ return ctrl.Result{}, err } + bucketPromURL := r.resolvePrometheusURL(ctx, monitor.Namespace) for _, bc := range bucketClaimList.Items { - if err := r.reconcileBucketClaimForMonitor(ctx, monitor, bc); err != nil { + if err := r.reconcileBucketClaimForMonitor(ctx, monitor, bc, bucketPromURL); err != nil { logger.Error(err, "Failed to reconcile Workload for BucketClaim", "BucketClaim", bc.Name) continue }