From 5931e4562dec6945bfbf96ae718fc079fb7352e1 Mon Sep 17 00:00:00 2001 From: Aditya Thebe Date: Wed, 4 Oct 2023 19:52:16 +0545 Subject: [PATCH] feat: only run sync jobs for canaries of specified namespaces --- cmd/operator.go | 2 ++ pkg/db/canary.go | 13 +++++++++++-- pkg/jobs/canary/canary_jobs.go | 6 +++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/cmd/operator.go b/cmd/operator.go index e805894eb..cdf43af84 100644 --- a/cmd/operator.go +++ b/cmd/operator.go @@ -9,6 +9,7 @@ import ( "github.com/flanksource/canary-checker/pkg/cache" "github.com/flanksource/canary-checker/pkg/db" "github.com/flanksource/canary-checker/pkg/jobs" + "github.com/flanksource/canary-checker/pkg/jobs/canary" canaryJobs "github.com/flanksource/canary-checker/pkg/jobs/canary" "github.com/flanksource/canary-checker/pkg/runner" "github.com/flanksource/canary-checker/pkg/utils" @@ -110,6 +111,7 @@ func run(cmd *cobra.Command, args []string) { includeNamespaces := []string{} if operatorNamespace != "" { includeNamespaces = strings.Split(operatorNamespace, ",") + canary.SyncCanaryNamspaces = includeNamespaces } runner.RunnerLabels = labels.LoadFromFile("/etc/podinfo/labels") diff --git a/pkg/db/canary.go b/pkg/db/canary.go index b0014b253..2f6cdd0cf 100644 --- a/pkg/db/canary.go +++ b/pkg/db/canary.go @@ -18,11 +18,12 @@ import ( "github.com/flanksource/duty/models" dutyTypes "github.com/flanksource/duty/types" "github.com/google/uuid" + "github.com/jackc/pgx/v5" "gorm.io/gorm" "gorm.io/gorm/clause" ) -func GetAllCanariesForSync() ([]pkg.Canary, error) { +func GetAllCanariesForSync(namespaces ...string) ([]pkg.Canary, error) { query := ` SELECT json_agg( jsonb_set_lax(to_jsonb(canaries),'{checks}', ( @@ -41,7 +42,14 @@ func GetAllCanariesForSync() ([]pkg.Canary, error) { agent_id = '00000000-0000-0000-0000-000000000000' ` - rows, err := Pool.Query(context.Background(), query) + args := make(pgx.NamedArgs) + + if namespaces != nil { + query += " AND namespace = ANY(@namespaces)" + args["namespaces"] = namespaces + } + + rows, err := Pool.Query(context.Background(), query, args) if err != nil { return nil, err } @@ -56,6 +64,7 @@ func GetAllCanariesForSync() ([]pkg.Canary, error) { return nil, fmt.Errorf("failed to unmarshal canaries:%w for %s", err, rows.RawValues()[0]) } } + return _canaries, nil } diff --git a/pkg/jobs/canary/canary_jobs.go b/pkg/jobs/canary/canary_jobs.go index a7555b182..3e30d151c 100644 --- a/pkg/jobs/canary/canary_jobs.go +++ b/pkg/jobs/canary/canary_jobs.go @@ -30,6 +30,10 @@ var DataFile string var Executor bool var LogPass, LogFail bool +// List of namespaces whose canary specs should be synced. +// If empty, all namespaces will be synced +var SyncCanaryNamspaces []string + var Kommons *kommons.Client var Kubernetes kubernetes.Interface var FuncScheduler = cron.New() @@ -346,7 +350,7 @@ func SyncCanaryJob(dbCanary pkg.Canary) error { func SyncCanaryJobs() { logger.Debugf("Syncing canary jobs") - canaries, err := db.GetAllCanariesForSync() + canaries, err := db.GetAllCanariesForSync(SyncCanaryNamspaces...) if err != nil { logger.Errorf("Failed to get canaries: %v", err)