From 0672316e471d0ab60910d616c1dc9e6a094ecda2 Mon Sep 17 00:00:00 2001 From: user1 Date: Tue, 17 Oct 2023 18:31:31 +0300 Subject: [PATCH 1/7] fix: metric labels --- checks/common.go | 3 -- pkg/metrics/metrics.go | 72 ++++++++++++++++++++++++------------------ 2 files changed, 42 insertions(+), 33 deletions(-) diff --git a/checks/common.go b/checks/common.go index e39879348..3d6cc782f 100644 --- a/checks/common.go +++ b/checks/common.go @@ -115,9 +115,6 @@ func transform(ctx *context.Context, in *pkg.CheckResult) ([]*pkg.CheckResult, e } return results, nil } else if len(transformed) == 1 && t.Name == "" { - if ctx.IsTrace() { - ctx.Tracef("merging %v into %v", t, in) - } in.Metrics = append(in.Metrics, t.Metrics...) if t.Start != nil { in.Start = *t.Start diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go index 0f215091f..982b935c5 100644 --- a/pkg/metrics/metrics.go +++ b/pkg/metrics/metrics.go @@ -7,7 +7,6 @@ import ( v1 "github.com/flanksource/canary-checker/api/v1" "github.com/flanksource/canary-checker/pkg" "github.com/flanksource/canary-checker/pkg/runner" - "github.com/flanksource/canary-checker/pkg/utils" "github.com/flanksource/commons/logger" cmap "github.com/orcaman/concurrent-map" "github.com/prometheus/client_golang/prometheus" @@ -142,6 +141,12 @@ func GetMetrics(key string) (uptime pkg.Uptime, latency pkg.Latency) { } func Record(canary v1.Canary, result *pkg.CheckResult) (_uptime pkg.Uptime, _latency pkg.Latency) { + defer func() { + e := recover() + if e != nil { + logger.Errorf("panic recording metrics for %s/%s/%s ==> %s", canary.Namespace, canary.Name, result, e) + } + }() if result == nil || result.Check == nil { logger.Warnf("%s/%s returned a nil result", canary.Namespace, canary.Name) return _uptime, _latency @@ -240,60 +245,67 @@ func Record(canary v1.Canary, result *pkg.CheckResult) (_uptime pkg.Uptime, _lat return _uptime, _latency } -func getOrCreateGauge(m pkg.Metric) (e any) { - defer func() { - e = recover() - }() - +func getOrCreateGauge(m pkg.Metric) error { var gauge *prometheus.GaugeVec var ok bool - if gauge, ok = CustomGauges[m.Name]; !ok { + if gauge, ok = CustomGauges[m.ID()]; !ok { gauge = prometheus.V2.NewGaugeVec(prometheus.GaugeVecOpts{ + VariableLabels: prometheus.UnconstrainedLabels(m.LabelNames()), GaugeOpts: prometheus.GaugeOpts{ Name: m.Name, }, }) - CustomGauges[m.Name] = gauge + CustomGauges[m.ID()] = gauge } - gauge.With(m.Labels).Set(m.Value) - return nil + if metric, err := gauge.GetMetricWith(m.Labels); err != nil { + return err + } else { + metric.Set(m.Value) + return nil + } } -func getOrCreateCounter(m pkg.Metric) (e any) { - defer func() { - e = recover() - }() +func getOrCreateCounter(m pkg.Metric) error { var counter *prometheus.CounterVec var ok bool - if counter, ok = CustomCounters[m.Name]; !ok { - counter = prometheus.NewCounterVec( - prometheus.CounterOpts{Name: m.Name}, - utils.MapKeys(m.Labels), - ) - CustomCounters[m.Name] = counter + if counter, ok = CustomCounters[m.ID()]; !ok { + counter = prometheus.V2.NewCounterVec(prometheus.CounterVecOpts{ + VariableLabels: prometheus.UnconstrainedLabels(m.LabelNames()), + CounterOpts: prometheus.CounterOpts{ + Name: m.Name, + }, + }) + CustomCounters[m.ID()] = counter + } + + if metric, err := counter.GetMetricWith(m.Labels); err != nil { + return err + } else { + metric.Add(m.Value) + return nil } - counter.With(m.Labels).Add(m.Value) - return nil } -func getOrCreateHistogram(m pkg.Metric) (e any) { - defer func() { - e = recover() - }() +func getOrCreateHistogram(m pkg.Metric) error { var histogram *prometheus.HistogramVec var ok bool - if histogram, ok = CustomHistograms[m.Name]; !ok { + if histogram, ok = CustomHistograms[m.ID()]; !ok { histogram = prometheus.V2.NewHistogramVec(prometheus.HistogramVecOpts{ + VariableLabels: prometheus.UnconstrainedLabels(m.LabelNames()), HistogramOpts: prometheus.HistogramOpts{ Name: m.Name, }, }) - CustomHistograms[m.Name] = histogram + CustomHistograms[m.ID()] = histogram + } + if metric, err := histogram.GetMetricWith(m.Labels); err != nil { + return err + } else { + metric.Observe(m.Value) + return nil } - histogram.With(m.Labels).Observe(m.Value) - return nil } func FillLatencies(checkKey string, duration string, latency *pkg.Latency) error { From efa03c46a6e38b003d7cfaaf9909afbcce365873 Mon Sep 17 00:00:00 2001 From: user1 Date: Tue, 17 Oct 2023 18:32:54 +0300 Subject: [PATCH 2/7] fix: including namespaces,canaries,types --- checks/runchecks.go | 6 ++++++ cmd/operator.go | 27 +++++++++---------------- cmd/root.go | 6 ++++-- pkg/api.go | 14 +++++++++++++ pkg/controllers/canary_controller.go | 30 +++++++++------------------- pkg/db/canary.go | 8 ++++---- pkg/jobs/canary/canary_jobs.go | 17 +++++++++++----- pkg/runner/runner.go | 26 +++++++++++++++++++++++- 8 files changed, 83 insertions(+), 51 deletions(-) diff --git a/checks/runchecks.go b/checks/runchecks.go index 3c0523c32..7ebf954ef 100644 --- a/checks/runchecks.go +++ b/checks/runchecks.go @@ -16,6 +16,8 @@ import ( var checksCache = cache.New(5*time.Minute, 5*time.Minute) +var DisabledChecks []string + func getDisabledChecks(ctx *context.Context) (map[string]struct{}, error) { if val, ok := checksCache.Get("disabledChecks"); ok { return val.(map[string]struct{}), nil @@ -41,6 +43,10 @@ func getDisabledChecks(ctx *context.Context) (map[string]struct{}, error) { result[strings.TrimPrefix(name, "check.disabled.")] = struct{}{} } + for _, check := range DisabledChecks { + result[check] = struct{}{} + } + if rows.Err() != nil { return nil, rows.Err() } diff --git a/cmd/operator.go b/cmd/operator.go index 2d2b7d6a3..6c9c473c8 100644 --- a/cmd/operator.go +++ b/cmd/operator.go @@ -2,7 +2,6 @@ package cmd import ( "os" - "strings" "time" "github.com/flanksource/canary-checker/pkg/cache" @@ -31,7 +30,6 @@ import ( var webhookPort int var enableLeaderElection bool -var operatorNamespace string var operatorExecutor bool var disablePostgrest bool var Operator = &cobra.Command{ @@ -42,7 +40,7 @@ var Operator = &cobra.Command{ func init() { ServerFlags(Operator.Flags()) - Operator.Flags().StringVarP(&operatorNamespace, "namespace", "n", "", "Watch only specified namespaces, otherwise watch all") + Operator.Flags().StringVarP(&runner.WatchNamespace, "namespace", "n", "", "Watch only specified namespaces, otherwise watch all") Operator.Flags().BoolVar(&operatorExecutor, "executor", true, "If false, only serve the UI and sync the configs") Operator.Flags().IntVar(&webhookPort, "webhookPort", 8082, "Port for webhooks ") Operator.Flags().BoolVar(&enableLeaderElection, "enable-leader-election", false, "Enabling this will ensure there is only one active controller manager") @@ -88,7 +86,7 @@ func run(cmd *cobra.Command, args []string) { mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, LeaderElection: enableLeaderElection, - LeaderElectionNamespace: operatorNamespace, + LeaderElectionNamespace: runner.WatchNamespace, Metrics: ctrlMetrics.Options{ BindAddress: ":0", }, @@ -106,23 +104,16 @@ func run(cmd *cobra.Command, args []string) { } loggr.Sugar().Infof("Using runner name: %s", runner.RunnerName) - includeNamespaces := []string{} - if operatorNamespace != "" { - includeNamespaces = strings.Split(operatorNamespace, ",") - canaryJobs.CanaryNamespaces = includeNamespaces - } runner.RunnerLabels = labels.LoadFromFile("/etc/podinfo/labels") canaryReconciler := &controllers.CanaryReconciler{ - IncludeCheck: includeCheck, - IncludeNamespaces: includeNamespaces, - Client: mgr.GetClient(), - LogPass: logPass, - LogFail: logFail, - Log: ctrl.Log.WithName("controllers").WithName("canary"), - Scheme: mgr.GetScheme(), - RunnerName: runner.RunnerName, - CanaryCache: gocache.New(7*24*time.Hour, 1*time.Hour), + Client: mgr.GetClient(), + LogPass: logPass, + LogFail: logFail, + Log: ctrl.Log.WithName("controllers").WithName("canary"), + Scheme: mgr.GetScheme(), + RunnerName: runner.RunnerName, + CanaryCache: gocache.New(7*24*time.Hour, 1*time.Hour), } systemReconciler := &controllers.TopologyReconciler{ diff --git a/cmd/root.go b/cmd/root.go index 1f89b922e..08c4b24e7 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -31,7 +31,7 @@ var Root = &cobra.Command{ var httpPort = 8080 var publicEndpoint = "http://localhost:8080" -var includeCheck, prometheusURL string +var prometheusURL string var pushServers, pullServers []string var sharedLibrary []string var exposeEnv bool @@ -49,7 +49,9 @@ func ServerFlags(flags *pflag.FlagSet) { _ = flags.MarkDeprecated("dev", "") flags.StringVar(&publicEndpoint, "public-endpoint", publicEndpoint, "Host on which the health dashboard is exposed. Could be used for generting-links, redirects etc.") - flags.StringVar(&includeCheck, "include-check", "", "Run matching canaries - useful for debugging") + flags.StringSliceVar(&runner.IncludeCanaries, "include-check", []string{}, "Run matching canaries - useful for debugging") + flags.StringSliceVar(&runner.IncludeTypes, "include-type", []string{}, "Check type to disable") + flags.StringSliceVar(&runner.IncludeNamespaces, "include-namespace", []string{}, "Check type to disable") flags.IntVar(&cache.DefaultCacheCount, "maxStatusCheckCount", 5, "Maximum number of past checks in the in memory cache") flags.StringSliceVar(&pushServers, "push-servers", []string{}, "push check results to multiple canary servers") flags.StringSliceVar(&pullServers, "pull-servers", []string{}, "push check results to multiple canary servers") diff --git a/pkg/api.go b/pkg/api.go index 766ea3dac..4560b616f 100644 --- a/pkg/api.go +++ b/pkg/api.go @@ -2,6 +2,7 @@ package pkg import ( "fmt" + "sort" "strings" "time" @@ -525,6 +526,19 @@ type Metric struct { Value float64 `json:"value,omitempty"` } +func (m Metric) ID() string { + return fmt.Sprintf("%s-%s", m.Name, strings.Join(m.LabelNames(), "-")) +} + +func (m Metric) LabelNames() []string { + var names []string + for k := range m.Labels { + names = append(names, k) + } + sort.Strings(names) + return names +} + func (m Metric) String() string { labels := "" if len(m.Labels) > 0 { diff --git a/pkg/controllers/canary_controller.go b/pkg/controllers/canary_controller.go index 1dd374505..98686bb52 100644 --- a/pkg/controllers/canary_controller.go +++ b/pkg/controllers/canary_controller.go @@ -27,6 +27,7 @@ import ( v1 "github.com/flanksource/canary-checker/api/v1" "github.com/flanksource/canary-checker/pkg" canaryJobs "github.com/flanksource/canary-checker/pkg/jobs/canary" + "github.com/flanksource/canary-checker/pkg/runner" "github.com/flanksource/kommons" "github.com/go-logr/logr" jsontime "github.com/liamylian/jsontime/v2/v2" @@ -46,9 +47,7 @@ var json = jsontime.ConfigWithCustomTimeFormat // CanaryReconciler reconciles a Canary object type CanaryReconciler struct { - IncludeCheck string - IncludeNamespaces []string - LogPass, LogFail bool + LogPass, LogFail bool client.Client Kubernetes kubernetes.Interface Kommons *kommons.Client @@ -68,21 +67,19 @@ const FinalizerName = "canary.canaries.flanksource.com" // +kubebuilder:rbac:groups="",resources=pods/exec,verbs=* // +kubebuilder:rbac:groups="",resources=pods/logs,verbs=* func (r *CanaryReconciler) Reconcile(ctx gocontext.Context, req ctrl.Request) (ctrl.Result, error) { - if len(r.IncludeNamespaces) > 0 && !r.includeNamespace(req.Namespace) { - r.Log.V(2).Info("namespace not included, skipping") - return ctrl.Result{}, nil - } - if r.IncludeCheck != "" && r.IncludeCheck != req.Name { - r.Log.V(2).Info("check not included, skipping") - return ctrl.Result{}, nil - } - logger := r.Log.WithValues("canary", req.NamespacedName) canary := &v1.Canary{} err := r.Get(ctx, req.NamespacedName, canary) if errors.IsNotFound(err) { return ctrl.Result{}, nil + } else if err != nil { + return ctrl.Result{RequeueAfter: 10 * time.Minute}, corev1.ErrUnexpectedEndOfGroupGenerated } + + if runner.IsCanaryIgnored(&canary.ObjectMeta) { + return ctrl.Result{}, nil + } + canary.SetRunnerName(r.RunnerName) // Add finalizer first if not exist to avoid the race condition between init and delete if !controllerutil.ContainsFinalizer(canary, FinalizerName) { @@ -219,12 +216,3 @@ func (r *CanaryReconciler) Report() { } } } - -func (r *CanaryReconciler) includeNamespace(namespace string) bool { - for _, n := range r.IncludeNamespaces { - if n == namespace { - return true - } - } - return false -} diff --git a/pkg/db/canary.go b/pkg/db/canary.go index 2f6cdd0cf..fa21d4ddc 100644 --- a/pkg/db/canary.go +++ b/pkg/db/canary.go @@ -23,7 +23,7 @@ import ( "gorm.io/gorm/clause" ) -func GetAllCanariesForSync(namespaces ...string) ([]pkg.Canary, error) { +func GetAllCanariesForSync(namespace string) ([]pkg.Canary, error) { query := ` SELECT json_agg( jsonb_set_lax(to_jsonb(canaries),'{checks}', ( @@ -44,9 +44,9 @@ func GetAllCanariesForSync(namespaces ...string) ([]pkg.Canary, error) { args := make(pgx.NamedArgs) - if namespaces != nil { - query += " AND namespace = ANY(@namespaces)" - args["namespaces"] = namespaces + if namespace != "" { + query += " AND namespace = @namespace" + args["namespace"] = namespace } rows, err := Pool.Query(context.Background(), query, args) diff --git a/pkg/jobs/canary/canary_jobs.go b/pkg/jobs/canary/canary_jobs.go index 17d7b96fa..5fb8fd60a 100644 --- a/pkg/jobs/canary/canary_jobs.go +++ b/pkg/jobs/canary/canary_jobs.go @@ -14,6 +14,7 @@ import ( "github.com/flanksource/canary-checker/pkg/db" "github.com/flanksource/canary-checker/pkg/metrics" "github.com/flanksource/canary-checker/pkg/push" + "github.com/flanksource/canary-checker/pkg/runner" "github.com/flanksource/canary-checker/pkg/utils" "github.com/flanksource/commons/logger" "github.com/flanksource/duty/models" @@ -30,10 +31,6 @@ var DataFile string var Executor bool var LogPass, LogFail bool -// CanaryNamespaces is a list of namespaces whose canary specs should be synced. -// If empty, all namespaces will be synced -var CanaryNamespaces []string - var Kommons *kommons.Client var Kubernetes kubernetes.Interface var FuncScheduler = cron.New() @@ -69,6 +66,9 @@ var minimumTimeBetweenCanaryRuns = 10 * time.Second var canaryLastRuntimes = sync.Map{} func (job CanaryJob) Run() { + if runner.IsCanaryIgnored(&job.Canary.ObjectMeta) { + return + } canaryID := job.DBCanary.ID.String() val, _ := concurrentJobLocks.LoadOrStore(canaryID, &sync.Mutex{}) lock, ok := val.(*sync.Mutex) @@ -279,6 +279,9 @@ func ScanCanaryConfigs() { } for _, canary := range configs { + if runner.IsCanaryIgnored(&canary.ObjectMeta) { + continue + } _, err := db.PersistCanary(canary, path.Base(configfile)) if err != nil { logger.Errorf("could not persist %s: %v", canary.Name, err) @@ -303,6 +306,10 @@ func SyncCanaryJob(dbCanary pkg.Canary) error { return nil } + if runner.IsCanaryIgnored(&canary.ObjectMeta) { + return nil + } + if Kommons == nil { var err error Kommons, Kubernetes, err = pkg.NewKommonsClient() @@ -350,7 +357,7 @@ func SyncCanaryJob(dbCanary pkg.Canary) error { func SyncCanaryJobs() { logger.Debugf("Syncing canary jobs") - canaries, err := db.GetAllCanariesForSync(CanaryNamespaces...) + canaries, err := db.GetAllCanariesForSync(runner.WatchNamespace) if err != nil { logger.Errorf("Failed to get canaries: %v", err) diff --git a/pkg/runner/runner.go b/pkg/runner/runner.go index a1793d8a6..d24d34f30 100644 --- a/pkg/runner/runner.go +++ b/pkg/runner/runner.go @@ -1,6 +1,10 @@ package runner -import "github.com/flanksource/canary-checker/pkg/prometheus" +import ( + "github.com/flanksource/canary-checker/pkg/prometheus" + "github.com/flanksource/commons/collections" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) var RunnerName string @@ -9,3 +13,23 @@ var Version string var RunnerLabels map[string]string = make(map[string]string) var Prometheus *prometheus.PrometheusClient + +var IncludeNamespaces []string + +var WatchNamespace string + +var IncludeCanaries []string + +var IncludeTypes []string + +func IsCanaryIgnored(canary *metav1.ObjectMeta) bool { + if !collections.MatchItems(canary.Namespace, IncludeNamespaces...) { + return true + } + + if !collections.MatchItems(canary.Name, IncludeCanaries...) { + return true + } + + return canary.Annotations != nil && canary.Annotations["suspend"] == "true" +} From d9946f4e60a2f9b79ba0c514bd26b7494272764d Mon Sep 17 00:00:00 2001 From: user1 Date: Tue, 17 Oct 2023 18:33:17 +0300 Subject: [PATCH 3/7] chore: disable db-metrics by default --- cmd/root.go | 1 + pkg/db/init.go | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 08c4b24e7..b2bc0a3d7 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -84,6 +84,7 @@ func init() { Root.PersistentFlags().StringVar(&db.ConnectionString, "db", "DB_URL", "Connection string for the postgres database") Root.PersistentFlags().BoolVar(&db.RunMigrations, "db-migrations", false, "Run database migrations") + Root.PersistentFlags().BoolVar(&db.DbMetrics, "db-metrics", false, "Expose db metrics") Root.PersistentFlags().BoolVar(&logFail, "log-fail", true, "Log every failing check") Root.PersistentFlags().BoolVar(&logPass, "log-pass", false, "Log every passing check") Root.PersistentFlags().StringArrayVar(&sharedLibrary, "shared-library", []string{}, "Add javascript files to be shared by all javascript templates") diff --git a/pkg/db/init.go b/pkg/db/init.go index 0ea2e128e..21accfd3e 100644 --- a/pkg/db/init.go +++ b/pkg/db/init.go @@ -22,6 +22,7 @@ var Gorm *gorm.DB var ConnectionString string var DefaultExpiryDays int var RunMigrations bool +var DbMetrics bool var PostgresServer *embeddedpostgres.EmbeddedPostgres var HTTPEndpoint = "http://localhost:8080/db" @@ -101,17 +102,19 @@ func Init() error { return err } - go func() { - if err := Gorm.Use(prometheus.New(prometheus.Config{ - DBName: Pool.Config().ConnConfig.Database, - StartServer: false, - MetricsCollector: []prometheus.MetricsCollector{ - &prometheus.Postgres{}, - }, - })); err != nil { - logger.Warnf("Failed to register prometheus metrics: %v", err) - } - }() + if DbMetrics { + go func() { + if err := Gorm.Use(prometheus.New(prometheus.Config{ + DBName: Pool.Config().ConnConfig.Database, + StartServer: false, + MetricsCollector: []prometheus.MetricsCollector{ + &prometheus.Postgres{}, + }, + })); err != nil { + logger.Warnf("Failed to register prometheus metrics: %v", err) + } + }() + } if RunMigrations { opts := &migrate.MigrateOptions{IgnoreFiles: []string{"007_events.sql", "012_changelog.sql"}} From ed8f0af66629de59c2104600a99e64a26313f711 Mon Sep 17 00:00:00 2001 From: user1 Date: Tue, 17 Oct 2023 18:43:22 +0300 Subject: [PATCH 4/7] fix: test failure --- pkg/jobs/canary/canary_jobs_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/jobs/canary/canary_jobs_test.go b/pkg/jobs/canary/canary_jobs_test.go index 8b46e8bb1..d32f1fbfd 100644 --- a/pkg/jobs/canary/canary_jobs_test.go +++ b/pkg/jobs/canary/canary_jobs_test.go @@ -42,7 +42,7 @@ var _ = ginkgo.Describe("Test Sync Canary Job", ginkgo.Ordered, func() { err = db.Gorm.Create(canaryM).Error Expect(err).To(BeNil()) - response, err := db.GetAllCanariesForSync() + response, err := db.GetAllCanariesForSync("") Expect(err).To(BeNil()) Expect(len(response)).To(Equal(1)) }) From 48e2155a598e038f7c7912f70d919faafeb522db Mon Sep 17 00:00:00 2001 From: user1 Date: Tue, 17 Oct 2023 18:47:07 +0300 Subject: [PATCH 5/7] chore: fix lint error --- cmd/root.go | 2 +- pkg/db/init.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index b2bc0a3d7..9cc55d6d9 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -84,7 +84,7 @@ func init() { Root.PersistentFlags().StringVar(&db.ConnectionString, "db", "DB_URL", "Connection string for the postgres database") Root.PersistentFlags().BoolVar(&db.RunMigrations, "db-migrations", false, "Run database migrations") - Root.PersistentFlags().BoolVar(&db.DbMetrics, "db-metrics", false, "Expose db metrics") + Root.PersistentFlags().BoolVar(&db.DBMetrics, "db-metrics", false, "Expose db metrics") Root.PersistentFlags().BoolVar(&logFail, "log-fail", true, "Log every failing check") Root.PersistentFlags().BoolVar(&logPass, "log-pass", false, "Log every passing check") Root.PersistentFlags().StringArrayVar(&sharedLibrary, "shared-library", []string{}, "Add javascript files to be shared by all javascript templates") diff --git a/pkg/db/init.go b/pkg/db/init.go index 21accfd3e..cb96d75fd 100644 --- a/pkg/db/init.go +++ b/pkg/db/init.go @@ -22,7 +22,7 @@ var Gorm *gorm.DB var ConnectionString string var DefaultExpiryDays int var RunMigrations bool -var DbMetrics bool +var DBMetrics bool var PostgresServer *embeddedpostgres.EmbeddedPostgres var HTTPEndpoint = "http://localhost:8080/db" @@ -102,7 +102,7 @@ func Init() error { return err } - if DbMetrics { + if DBMetrics { go func() { if err := Gorm.Use(prometheus.New(prometheus.Config{ DBName: Pool.Config().ConnConfig.Database, From 03222f8f3d3e2e557c4e3cc4568441d7692f8435 Mon Sep 17 00:00:00 2001 From: Aditya Thebe Date: Tue, 17 Oct 2023 11:04:37 +0545 Subject: [PATCH 6/7] feat: upgrade upstream jobs --- cmd/root.go | 3 + go.mod | 15 +++-- go.sum | 26 ++++---- hack/generate-schemas/go.mod | 12 ++-- hack/generate-schemas/go.sum | 24 +++---- pkg/jobs/canary/sync_upstream.go | 109 +++++++++++++------------------ pkg/jobs/jobs.go | 29 ++++---- 7 files changed, 106 insertions(+), 112 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 9cc55d6d9..19405fed9 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "os" + "time" "github.com/flanksource/canary-checker/pkg/cache" "github.com/flanksource/canary-checker/pkg/db" @@ -69,6 +70,8 @@ func ServerFlags(flags *pflag.FlagSet) { flags.StringVar(&canary.UpstreamConf.Username, "upstream-user", "", "upstream username") flags.StringVar(&canary.UpstreamConf.Password, "upstream-password", "", "upstream password") flags.StringVar(&canary.UpstreamConf.AgentName, "agent-name", "", "name of this agent") + flags.IntVar(&canary.ReconcilePageSize, "upstream-page-size", 500, "upstream reconciliation page size") + flags.DurationVar(&canary.ReconcileMaxAge, "upstream-max-age", time.Hour*48, "upstream reconciliation max age") } func readFromEnv(v string) string { diff --git a/go.mod b/go.mod index 4598e39e3..fe6b6f849 100644 --- a/go.mod +++ b/go.mod @@ -22,10 +22,11 @@ require ( github.com/elastic/go-elasticsearch/v8 v8.10.0 github.com/fergusstrange/embedded-postgres v1.24.0 github.com/flanksource/commons v1.15.0 - github.com/flanksource/duty v1.0.191 + github.com/flanksource/duty v1.0.196 github.com/flanksource/gomplate/v3 v3.20.18 github.com/flanksource/is-healthy v0.0.0-20231003215854-76c51e3a3ff7 github.com/flanksource/kommons v0.31.4 + github.com/flanksource/postq v1.0.0 github.com/friendsofgo/errors v0.9.2 github.com/go-ldap/ldap/v3 v3.4.6 github.com/go-logr/logr v1.2.4 @@ -69,7 +70,7 @@ require ( google.golang.org/api v0.147.0 google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b gopkg.in/flanksource/yaml.v3 v3.2.3 - gorm.io/gorm v1.25.4 + gorm.io/gorm v1.25.5 gorm.io/plugin/prometheus v0.0.0-20230504115745-1aec2356381b k8s.io/api v0.28.2 k8s.io/apimachinery v0.28.2 @@ -121,7 +122,6 @@ require ( github.com/evanphx/json-patch v5.7.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/flanksource/mapstructure v1.6.0 // indirect - github.com/flanksource/postq v1.0.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/geoffgarside/ber v1.1.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect @@ -168,7 +168,7 @@ require ( github.com/hashicorp/go-getter v1.7.3 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hcl/v2 v2.18.0 // indirect + github.com/hashicorp/hcl/v2 v2.19.0 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/itchyny/gojq v0.12.13 // indirect @@ -208,6 +208,7 @@ require ( github.com/prometheus/procfs v0.12.0 // indirect github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect + github.com/sethvargo/go-retry v0.2.4 // indirect github.com/shopspring/decimal v1.3.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/stoewer/go-strcase v1.3.0 // indirect @@ -231,7 +232,7 @@ require ( github.com/xwb1989/sqlparser v0.0.0-20180606152119-120387863bf2 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect github.com/yuin/gopher-lua v1.1.0 // indirect - github.com/zclconf/go-cty v1.14.0 // indirect + github.com/zclconf/go-cty v1.14.1 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/otel v1.19.0 // indirect go.opentelemetry.io/otel/metric v1.19.0 // indirect @@ -257,12 +258,12 @@ require ( gopkg.in/sourcemap.v1 v1.0.5 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gorm.io/driver/postgres v1.5.2 // indirect + gorm.io/driver/postgres v1.5.3 // indirect k8s.io/apiextensions-apiserver v0.28.0 // indirect k8s.io/cli-runtime v0.28.0 // indirect k8s.io/component-base v0.28.1 // indirect k8s.io/klog/v2 v2.100.1 // indirect - k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect layeh.com/gopher-json v0.0.0-20201124131017-552bb3c4c3bf // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect diff --git a/go.sum b/go.sum index a41ee9728..46f071738 100644 --- a/go.sum +++ b/go.sum @@ -821,8 +821,8 @@ github.com/fergusstrange/embedded-postgres v1.24.0 h1:WqXbmYrBeT5JfNWQ8Qa+yHa5YJ github.com/fergusstrange/embedded-postgres v1.24.0/go.mod h1:wL562t1V+iuFwq0UcgMi2e9rp8CROY9wxWZEfP8Y874= github.com/flanksource/commons v1.15.0 h1:p74hrKzIz0r3H8YN3CuB8ePJOjzPFO0BRLVmpXmeqvY= github.com/flanksource/commons v1.15.0/go.mod h1:FMZFLcQr98JwBKuKLs44DvCQ2JNoHz5maRIzVufQ9Cs= -github.com/flanksource/duty v1.0.191 h1:acnvyTeQlfqmtyXxWprNFGK/vBTUlqkYwxEPLtXSPrk= -github.com/flanksource/duty v1.0.191/go.mod h1:ikyl/TcRy6Cc0R5b0wEHT7CecV7gyJvrDGq/4oIZHoc= +github.com/flanksource/duty v1.0.196 h1:hP7NrDI8CKOXQjod48fd6FbrQCPisoMcYsLzc8izgi4= +github.com/flanksource/duty v1.0.196/go.mod h1:OlD81nnevKmyiR1YORTi3A8f4pO6f5z6vUBmDIk2NU4= github.com/flanksource/gomplate/v3 v3.20.4/go.mod h1:27BNWhzzSjDed1z8YShO6W+z6G9oZXuxfNFGd/iGSdc= github.com/flanksource/gomplate/v3 v3.20.18 h1:qYiznMxhq+Zau5iWnVzW1yDzA1deHOsmo6yldCN7JhQ= github.com/flanksource/gomplate/v3 v3.20.18/go.mod h1:2GgHZ2vWmtDspJMBfUIryOuzJSwc8jU7Kw9fDLr0TMA= @@ -1131,8 +1131,8 @@ github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mO github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl/v2 v2.18.0 h1:wYnG7Lt31t2zYkcquwgKo6MWXzRUDIeIVU5naZwHLl8= -github.com/hashicorp/hcl/v2 v2.18.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= +github.com/hashicorp/hcl/v2 v2.19.0 h1:vq9ncaL/+JtHe2JFQo6h/D7HqkfrYQn+nRYG/WDKmLo= +github.com/hashicorp/hcl/v2 v2.19.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= github.com/henvic/httpretty v0.1.2 h1:EQo556sO0xeXAjP10eB+BZARMuvkdGqtfeS4Ntjvkiw= github.com/henvic/httpretty v0.1.2/go.mod h1:ViEsly7wgdugYtymX54pYp6Vv2wqZmNHayJ6q8tlKCc= github.com/hirochachacha/go-smb2 v1.1.0 h1:b6hs9qKIql9eVXAiN0M2wSFY5xnhbHAQoCwRKbaRTZI= @@ -1412,6 +1412,8 @@ github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfF github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/sethvargo/go-retry v0.2.4 h1:T+jHEQy/zKJf5s95UkguisicE0zuF9y7+/vgz08Ocec= +github.com/sethvargo/go-retry v0.2.4/go.mod h1:1afjQuvh7s4gflMObvjLPaWgluLLyhA1wmVZ6KLpICw= github.com/sevennt/echo-pprof v0.1.1-0.20220616082843-66a461746b5f h1:mx2Z/21bNtP+jXvuB9qHJbihaIhT3SsqL+qJUqbwoGg= github.com/sevennt/echo-pprof v0.1.1-0.20220616082843-66a461746b5f/go.mod h1:QPpsWWcK1TiLQ8uaSnmKJamNb2HryXeBxZapurHcGn0= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= @@ -1513,8 +1515,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE= github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= -github.com/zclconf/go-cty v1.14.0 h1:/Xrd39K7DXbHzlisFP9c4pHao4yyf+/Ug9LEz+Y/yhc= -github.com/zclconf/go-cty v1.14.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.14.1 h1:t9fyA35fwjjUMcmL5hLER+e/rEPqrbCK1/OSE4SI9KA= +github.com/zclconf/go-cty v1.14.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= @@ -2302,11 +2304,11 @@ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0= -gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8= +gorm.io/driver/postgres v1.5.3 h1:qKGY5CPHOuj47K/VxbCXJfFvIUeqMSXXadqdCY+MbBU= +gorm.io/driver/postgres v1.5.3/go.mod h1:F+LtvlFhZT7UBiA81mC9W6Su3D4WUhSboc/36QZU0gk= gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= -gorm.io/gorm v1.25.4 h1:iyNd8fNAe8W9dvtlgeRI5zSVZPsq3OpcTu37cYcpCmw= -gorm.io/gorm v1.25.4/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls= +gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= gorm.io/plugin/prometheus v0.0.0-20230504115745-1aec2356381b h1:uHPZdwwf4+AVvAEgZ/LQR1UTub8LJ2nh0wQDW3Dt4jE= gorm.io/plugin/prometheus v0.0.0-20230504115745-1aec2356381b/go.mod h1:FP7rlN/zp/5C2hOb3CVFQCRwk0pDO6H7M2Yvj7ivh8M= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= @@ -2344,8 +2346,8 @@ k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= diff --git a/hack/generate-schemas/go.mod b/hack/generate-schemas/go.mod index 5daa8f78b..543ae95ee 100644 --- a/hack/generate-schemas/go.mod +++ b/hack/generate-schemas/go.mod @@ -41,7 +41,7 @@ require ( github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/flanksource/duty v1.0.191 // indirect + github.com/flanksource/duty v1.0.196 // indirect github.com/flanksource/is-healthy v0.0.0-20231003215854-76c51e3a3ff7 // indirect github.com/flanksource/mapstructure v1.6.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect @@ -66,7 +66,7 @@ require ( github.com/hashicorp/go-getter v1.7.3 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect - github.com/hashicorp/hcl/v2 v2.18.0 // indirect + github.com/hashicorp/hcl/v2 v2.19.0 // indirect github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/itchyny/gojq v0.12.13 // indirect @@ -102,7 +102,7 @@ require ( github.com/ugorji/go/codec v1.2.11 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/yuin/gopher-lua v1.1.0 // indirect - github.com/zclconf/go-cty v1.14.0 // indirect + github.com/zclconf/go-cty v1.14.1 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.26.0 // indirect @@ -128,13 +128,13 @@ require ( gopkg.in/sourcemap.v1 v1.0.5 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gorm.io/driver/postgres v1.5.2 // indirect - gorm.io/gorm v1.25.4 // indirect + gorm.io/driver/postgres v1.5.3 // indirect + gorm.io/gorm v1.25.5 // indirect k8s.io/api v0.28.2 // indirect k8s.io/apimachinery v0.28.2 // indirect k8s.io/client-go v0.28.2 // indirect k8s.io/klog/v2 v2.100.1 // indirect - k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect layeh.com/gopher-json v0.0.0-20201124131017-552bb3c4c3bf // indirect sigs.k8s.io/controller-runtime v0.16.2 // indirect diff --git a/hack/generate-schemas/go.sum b/hack/generate-schemas/go.sum index 041eb2c5d..291a223ca 100644 --- a/hack/generate-schemas/go.sum +++ b/hack/generate-schemas/go.sum @@ -703,8 +703,8 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fergusstrange/embedded-postgres v1.24.0 h1:WqXbmYrBeT5JfNWQ8Qa+yHa5YJO/0sBIgL9k5rn3dFk= github.com/flanksource/commons v1.15.0 h1:p74hrKzIz0r3H8YN3CuB8ePJOjzPFO0BRLVmpXmeqvY= github.com/flanksource/commons v1.15.0/go.mod h1:FMZFLcQr98JwBKuKLs44DvCQ2JNoHz5maRIzVufQ9Cs= -github.com/flanksource/duty v1.0.191 h1:acnvyTeQlfqmtyXxWprNFGK/vBTUlqkYwxEPLtXSPrk= -github.com/flanksource/duty v1.0.191/go.mod h1:ikyl/TcRy6Cc0R5b0wEHT7CecV7gyJvrDGq/4oIZHoc= +github.com/flanksource/duty v1.0.196 h1:hP7NrDI8CKOXQjod48fd6FbrQCPisoMcYsLzc8izgi4= +github.com/flanksource/duty v1.0.196/go.mod h1:OlD81nnevKmyiR1YORTi3A8f4pO6f5z6vUBmDIk2NU4= github.com/flanksource/gomplate/v3 v3.20.4/go.mod h1:27BNWhzzSjDed1z8YShO6W+z6G9oZXuxfNFGd/iGSdc= github.com/flanksource/gomplate/v3 v3.20.18 h1:qYiznMxhq+Zau5iWnVzW1yDzA1deHOsmo6yldCN7JhQ= github.com/flanksource/gomplate/v3 v3.20.18/go.mod h1:2GgHZ2vWmtDspJMBfUIryOuzJSwc8jU7Kw9fDLr0TMA= @@ -904,8 +904,8 @@ github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mO github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl/v2 v2.18.0 h1:wYnG7Lt31t2zYkcquwgKo6MWXzRUDIeIVU5naZwHLl8= -github.com/hashicorp/hcl/v2 v2.18.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= +github.com/hashicorp/hcl/v2 v2.19.0 h1:vq9ncaL/+JtHe2JFQo6h/D7HqkfrYQn+nRYG/WDKmLo= +github.com/hashicorp/hcl/v2 v2.19.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0 h1:i462o439ZjprVSFSZLZxcsoAe592sZB1rci2Z8j4wdk= github.com/iancoleman/orderedmap v0.0.0-20190318233801-ac98e3ecb4b0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA= @@ -1116,8 +1116,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/gopher-lua v1.1.0 h1:BojcDhfyDWgU2f2TOzYK/g5p2gxMrku8oupLDqlnSqE= github.com/yuin/gopher-lua v1.1.0/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= -github.com/zclconf/go-cty v1.14.0 h1:/Xrd39K7DXbHzlisFP9c4pHao4yyf+/Ug9LEz+Y/yhc= -github.com/zclconf/go-cty v1.14.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.14.1 h1:t9fyA35fwjjUMcmL5hLER+e/rEPqrbCK1/OSE4SI9KA= +github.com/zclconf/go-cty v1.14.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1840,10 +1840,10 @@ gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gorm.io/driver/postgres v1.5.2 h1:ytTDxxEv+MplXOfFe3Lzm7SjG09fcdb3Z/c056DTBx0= -gorm.io/driver/postgres v1.5.2/go.mod h1:fmpX0m2I1PKuR7mKZiEluwrP3hbs+ps7JIGMUBpCgl8= -gorm.io/gorm v1.25.4 h1:iyNd8fNAe8W9dvtlgeRI5zSVZPsq3OpcTu37cYcpCmw= -gorm.io/gorm v1.25.4/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/driver/postgres v1.5.3 h1:qKGY5CPHOuj47K/VxbCXJfFvIUeqMSXXadqdCY+MbBU= +gorm.io/driver/postgres v1.5.3/go.mod h1:F+LtvlFhZT7UBiA81mC9W6Su3D4WUhSboc/36QZU0gk= +gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls= +gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1873,8 +1873,8 @@ k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= -k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= diff --git a/pkg/jobs/canary/sync_upstream.go b/pkg/jobs/canary/sync_upstream.go index bc3fcc696..4a3897378 100644 --- a/pkg/jobs/canary/sync_upstream.go +++ b/pkg/jobs/canary/sync_upstream.go @@ -1,7 +1,6 @@ package canary import ( - goctx "context" "encoding/json" "fmt" "net/http" @@ -14,34 +13,59 @@ import ( "github.com/flanksource/commons/logger" "github.com/flanksource/duty/models" "github.com/flanksource/duty/upstream" + "github.com/flanksource/postq/pg" "gorm.io/gorm/clause" ) -var UpstreamConf upstream.UpstreamConfig +var ( + ReconcilePageSize int -var tablesToReconcile = []string{ - "checks", - "check_statuses", -} + // Only sync data created/updated in the last ReconcileMaxAge duration + ReconcileMaxAge time.Duration + + // UpstreamConf is the global configuration for upstream + UpstreamConf upstream.UpstreamConfig +) -// ReconcileCanaryResults coordinates with upstream and pushes any resource +const ( + EventPushQueueCreate = "push_queue.create" + eventQueueUpdateChannel = "event_queue_updates" +) + +// ReconcileChecks coordinates with upstream and pushes any resource // that are missing on the upstream. -func ReconcileCanaryResults() { +func ReconcileChecks() { ctx := context.New(nil, nil, db.Gorm, db.Pool, v1.Canary{}) - jobHistory := models.NewJobHistory("PushCanaryResultsToUpstream", "Canary", "") + jobHistory := models.NewJobHistory("PushChecksToUpstream", "Canary", "") _ = db.PersistJobHistory(jobHistory.Start()) defer func() { _ = db.PersistJobHistory(jobHistory.End()) }() reconciler := upstream.NewUpstreamReconciler(UpstreamConf, 5) - for _, table := range tablesToReconcile { - if err := reconciler.Sync(ctx, table); err != nil { - jobHistory.AddError(err.Error()) - logger.Errorf("failed to sync table %s: %v", table, err) - } else { - jobHistory.IncrSuccess() - } + if err := reconciler.SyncAfter(ctx, "checks", ReconcileMaxAge); err != nil { + jobHistory.AddError(err.Error()) + logger.Errorf("failed to sync table 'checks': %v", err) + } else { + jobHistory.IncrSuccess() + } +} + +func SyncCheckStatuses() { + logger.Debugf("running check statuses sync job") + + jobHistory := models.NewJobHistory("SyncCheckStatusesWithUpstream", UpstreamConf.Host, "") + _ = db.PersistJobHistory(jobHistory.Start()) + defer func() { _ = db.PersistJobHistory(jobHistory.End()) }() + + ctx := context.New(nil, nil, db.Gorm, db.Pool, v1.Canary{}) + if err := upstream.SyncCheckStatuses(ctx, UpstreamConf, ReconcilePageSize); err != nil { + logger.Errorf("failed to run checkstatus sync job: %v", err) + jobHistory.AddError(err.Error()) + return } + + jobHistory.IncrSuccess() + return } type CanaryPullResponse struct { @@ -112,54 +136,15 @@ func (t *UpstreamPullJob) pull(config upstream.UpstreamConfig) error { }).Create(&response.Canaries).Error } -type UpstreamPushJob struct { - lastRuntime time.Time - - // MaxAge defines how far back we look into the past on startup whe - // lastRuntime is zero. - MaxAge time.Duration -} - -func (t *UpstreamPushJob) Run() { - jobHistory := models.NewJobHistory("UpstreamPushJob", "Canary", "") - _ = db.PersistJobHistory(jobHistory.Start()) - defer func() { _ = db.PersistJobHistory(jobHistory.End()) }() - - if err := t.run(); err != nil { - jobHistory.AddError(err.Error()) - logger.Errorf("error pushing to upstream: %v", err) - } else { - jobHistory.IncrSuccess() - } -} - -func (t *UpstreamPushJob) run() error { - logger.Tracef("running upstream push job") - - var currentTime time.Time - if err := db.Gorm.Raw("SELECT NOW()").Scan(¤tTime).Error; err != nil { - return err - } - - if t.lastRuntime.IsZero() { - t.lastRuntime = currentTime.Add(-t.MaxAge) - } - - pushData := &upstream.PushData{AgentName: UpstreamConf.AgentName} - if err := db.Gorm.Where("created_at > ?", t.lastRuntime).Find(&pushData.CheckStatuses).Error; err != nil { - return err - } - - if err := db.Gorm.Where("updated_at > ?", t.lastRuntime).Find(&pushData.Checks).Error; err != nil { +func StartUpstreamEventQueueConsumer(ctx *context.Context) error { + consumer, err := upstream.NewPushQueueConsumer(UpstreamConf).EventConsumer() + if err != nil { return err } - t.lastRuntime = currentTime - - if pushData.Count() == 0 { - return nil - } - logger.Tracef("pushing %d canary results to upstream", pushData.Count()) + pgNotifyChannel := make(chan string) + go pg.Listen(ctx, eventQueueUpdateChannel, pgNotifyChannel) - return upstream.Push(goctx.Background(), UpstreamConf, pushData) + go consumer.Listen(ctx, pgNotifyChannel) + return nil } diff --git a/pkg/jobs/jobs.go b/pkg/jobs/jobs.go index e87817b40..bcc06ebde 100644 --- a/pkg/jobs/jobs.go +++ b/pkg/jobs/jobs.go @@ -1,8 +1,8 @@ package jobs import ( - "time" - + "github.com/flanksource/canary-checker/api/context" + v1 "github.com/flanksource/canary-checker/api/v1" "github.com/flanksource/canary-checker/pkg/db" canaryJobs "github.com/flanksource/canary-checker/pkg/jobs/canary" systemJobs "github.com/flanksource/canary-checker/pkg/jobs/system" @@ -16,9 +16,10 @@ import ( var FuncScheduler = cron.New() const ( - PullCanaryFromUpstreamSchedule = "@every 30s" - PushCanaryToUpstreamSchedule = "@every 10s" - ReconcileCanaryToUpstreamSchedule = "@every 3h" + PullCanaryFromUpstreamSchedule = "@every 30s" + PushCheckStatusesSchedule = "@every 30s" + ReconcileCanaryToUpstreamSchedule = "@every 3h" + SyncCanaryJobsSchedule = "@every 2m" SyncSystemsJobsSchedule = "@every 5m" ComponentRunSchedule = "@every 2m" @@ -45,22 +46,24 @@ func Start() { FuncScheduler.Start() if canaryJobs.UpstreamConf.Valid() { - pushJob := &canaryJobs.UpstreamPushJob{MaxAge: time.Minute * 5} - pushJob.Run() - pullJob := &canaryJobs.UpstreamPullJob{} pullJob.Run() - if _, err := FuncScheduler.AddJob(PullCanaryFromUpstreamSchedule, pullJob); err != nil { logger.Fatalf("Failed to schedule job [canaryJobs.Pull]: %v", err) } - if _, err := FuncScheduler.AddJob(PushCanaryToUpstreamSchedule, pushJob); err != nil { - logger.Fatalf("Failed to schedule job [canaryJobs.UpstreamPushJob]: %v", err) + // Push checks to upstream in real-time + if err := canaryJobs.StartUpstreamEventQueueConsumer(context.New(nil, nil, db.Gorm, db.Pool, v1.Canary{})); err != nil { + logger.Fatalf("Failed to start upstream event queue consumer: %v", err) + } + + if _, err := ScheduleFunc(ReconcileCanaryToUpstreamSchedule, canaryJobs.ReconcileChecks); err != nil { + logger.Fatalf("Failed to schedule job [canaryJobs.ReconcileChecks]: %v", err) } - if _, err := ScheduleFunc(ReconcileCanaryToUpstreamSchedule, canaryJobs.ReconcileCanaryResults); err != nil { - logger.Fatalf("Failed to schedule job [canaryJobs.SyncWithUpstream]: %v", err) + canaryJobs.SyncCheckStatuses() + if _, err := ScheduleFunc(PushCheckStatusesSchedule, canaryJobs.SyncCheckStatuses); err != nil { + logger.Fatalf("Failed to schedule job [canaryJobs.SyncCheckStatuses]: %v", err) } } From 5b0474f43e9838e5c3d04fa04b44f1f1d8670158 Mon Sep 17 00:00:00 2001 From: Aditya Thebe Date: Wed, 18 Oct 2023 10:20:42 +0545 Subject: [PATCH 7/7] chore: bump duty --- go.mod | 8 ++++---- go.sum | 17 +++++++++-------- hack/generate-schemas/go.mod | 8 ++++---- hack/generate-schemas/go.sum | 16 ++++++++-------- pkg/jobs/canary/sync_upstream.go | 9 ++++----- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index fe6b6f849..a487941b8 100644 --- a/go.mod +++ b/go.mod @@ -21,8 +21,8 @@ require ( github.com/eko/gocache/store/bigcache/v4 v4.2.1 github.com/elastic/go-elasticsearch/v8 v8.10.0 github.com/fergusstrange/embedded-postgres v1.24.0 - github.com/flanksource/commons v1.15.0 - github.com/flanksource/duty v1.0.196 + github.com/flanksource/commons v1.15.1 + github.com/flanksource/duty v1.0.197 github.com/flanksource/gomplate/v3 v3.20.18 github.com/flanksource/is-healthy v0.0.0-20231003215854-76c51e3a3ff7 github.com/flanksource/kommons v0.31.4 @@ -96,7 +96,7 @@ require ( github.com/antonmedv/expr v1.15.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go v1.45.26 // indirect + github.com/aws/aws-sdk-go v1.45.27 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect @@ -252,7 +252,7 @@ require ( google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/grpc v1.58.3 // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/sourcemap.v1 v1.0.5 // indirect diff --git a/go.sum b/go.sum index 46f071738..5f7c3db33 100644 --- a/go.sum +++ b/go.sum @@ -674,8 +674,8 @@ github.com/asecurityteam/rolling v2.0.4+incompatible h1:WOSeokINZT0IDzYGc5BVcjLl github.com/asecurityteam/rolling v2.0.4+incompatible/go.mod h1:2D4ba5ZfYCWrIMleUgTvc8pmLExEuvu3PDwl+vnG58Q= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.263/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go v1.45.26 h1:PJ2NJNY5N/yeobLYe1Y+xLdavBi67ZI8gvph6ftwVCg= -github.com/aws/aws-sdk-go v1.45.26/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.45.27 h1:b+zOTPkAG4i2RvqPdHxkJZafmhhVaVHBp4r41Tu4I6U= +github.com/aws/aws-sdk-go v1.45.27/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= @@ -819,10 +819,10 @@ github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fergusstrange/embedded-postgres v1.24.0 h1:WqXbmYrBeT5JfNWQ8Qa+yHa5YJO/0sBIgL9k5rn3dFk= github.com/fergusstrange/embedded-postgres v1.24.0/go.mod h1:wL562t1V+iuFwq0UcgMi2e9rp8CROY9wxWZEfP8Y874= -github.com/flanksource/commons v1.15.0 h1:p74hrKzIz0r3H8YN3CuB8ePJOjzPFO0BRLVmpXmeqvY= -github.com/flanksource/commons v1.15.0/go.mod h1:FMZFLcQr98JwBKuKLs44DvCQ2JNoHz5maRIzVufQ9Cs= -github.com/flanksource/duty v1.0.196 h1:hP7NrDI8CKOXQjod48fd6FbrQCPisoMcYsLzc8izgi4= -github.com/flanksource/duty v1.0.196/go.mod h1:OlD81nnevKmyiR1YORTi3A8f4pO6f5z6vUBmDIk2NU4= +github.com/flanksource/commons v1.15.1 h1:cFvxQd5SBFe+q16ciz8Q2IeBMeQ7+atdACGanbW27hg= +github.com/flanksource/commons v1.15.1/go.mod h1:FMZFLcQr98JwBKuKLs44DvCQ2JNoHz5maRIzVufQ9Cs= +github.com/flanksource/duty v1.0.197 h1:KRw4EPAD2kcqNPkipnkHzlbf5wmLqg3JgtXqiPzCLhw= +github.com/flanksource/duty v1.0.197/go.mod h1:aO1uXnT1eVtiIcicriK4brqJLmeXgbrYWtNR0H5IkLE= github.com/flanksource/gomplate/v3 v3.20.4/go.mod h1:27BNWhzzSjDed1z8YShO6W+z6G9oZXuxfNFGd/iGSdc= github.com/flanksource/gomplate/v3 v3.20.18 h1:qYiznMxhq+Zau5iWnVzW1yDzA1deHOsmo6yldCN7JhQ= github.com/flanksource/gomplate/v3 v3.20.18/go.mod h1:2GgHZ2vWmtDspJMBfUIryOuzJSwc8jU7Kw9fDLr0TMA= @@ -1535,6 +1535,7 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.19.0 h1:Nw7Dv4lwvGrI68+wULbcq7su9K2cebeCUrDjVrUJHxM= go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE= go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o= @@ -2248,8 +2249,8 @@ google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= -google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/hack/generate-schemas/go.mod b/hack/generate-schemas/go.mod index 543ae95ee..b1b58b6c3 100644 --- a/hack/generate-schemas/go.mod +++ b/hack/generate-schemas/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/flanksource/canary-checker v1.0.0 - github.com/flanksource/commons v1.15.0 + github.com/flanksource/commons v1.15.1 github.com/invopop/jsonschema v0.7.0 github.com/spf13/cobra v1.7.0 ) @@ -36,12 +36,12 @@ require ( github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/antonmedv/expr v1.15.3 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect - github.com/aws/aws-sdk-go v1.45.26 // indirect + github.com/aws/aws-sdk-go v1.45.27 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/c2h5oh/datasize v0.0.0-20220606134207-859f65c6625b // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/flanksource/duty v1.0.196 // indirect + github.com/flanksource/duty v1.0.197 // indirect github.com/flanksource/is-healthy v0.0.0-20231003215854-76c51e3a3ff7 // indirect github.com/flanksource/mapstructure v1.6.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect @@ -121,7 +121,7 @@ require ( google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/grpc v1.58.3 // indirect + google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/flanksource/yaml.v3 v3.2.3 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/hack/generate-schemas/go.sum b/hack/generate-schemas/go.sum index 291a223ca..5073b2e5a 100644 --- a/hack/generate-schemas/go.sum +++ b/hack/generate-schemas/go.sum @@ -637,8 +637,8 @@ github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmms github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.45.26 h1:PJ2NJNY5N/yeobLYe1Y+xLdavBi67ZI8gvph6ftwVCg= -github.com/aws/aws-sdk-go v1.45.26/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.45.27 h1:b+zOTPkAG4i2RvqPdHxkJZafmhhVaVHBp4r41Tu4I6U= +github.com/aws/aws-sdk-go v1.45.27/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= @@ -701,10 +701,10 @@ github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQL github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fergusstrange/embedded-postgres v1.24.0 h1:WqXbmYrBeT5JfNWQ8Qa+yHa5YJO/0sBIgL9k5rn3dFk= -github.com/flanksource/commons v1.15.0 h1:p74hrKzIz0r3H8YN3CuB8ePJOjzPFO0BRLVmpXmeqvY= -github.com/flanksource/commons v1.15.0/go.mod h1:FMZFLcQr98JwBKuKLs44DvCQ2JNoHz5maRIzVufQ9Cs= -github.com/flanksource/duty v1.0.196 h1:hP7NrDI8CKOXQjod48fd6FbrQCPisoMcYsLzc8izgi4= -github.com/flanksource/duty v1.0.196/go.mod h1:OlD81nnevKmyiR1YORTi3A8f4pO6f5z6vUBmDIk2NU4= +github.com/flanksource/commons v1.15.1 h1:cFvxQd5SBFe+q16ciz8Q2IeBMeQ7+atdACGanbW27hg= +github.com/flanksource/commons v1.15.1/go.mod h1:FMZFLcQr98JwBKuKLs44DvCQ2JNoHz5maRIzVufQ9Cs= +github.com/flanksource/duty v1.0.197 h1:KRw4EPAD2kcqNPkipnkHzlbf5wmLqg3JgtXqiPzCLhw= +github.com/flanksource/duty v1.0.197/go.mod h1:aO1uXnT1eVtiIcicriK4brqJLmeXgbrYWtNR0H5IkLE= github.com/flanksource/gomplate/v3 v3.20.4/go.mod h1:27BNWhzzSjDed1z8YShO6W+z6G9oZXuxfNFGd/iGSdc= github.com/flanksource/gomplate/v3 v3.20.18 h1:qYiznMxhq+Zau5iWnVzW1yDzA1deHOsmo6yldCN7JhQ= github.com/flanksource/gomplate/v3 v3.20.18/go.mod h1:2GgHZ2vWmtDspJMBfUIryOuzJSwc8jU7Kw9fDLr0TMA= @@ -1788,8 +1788,8 @@ google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= -google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= +google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= diff --git a/pkg/jobs/canary/sync_upstream.go b/pkg/jobs/canary/sync_upstream.go index 4a3897378..7a31b448a 100644 --- a/pkg/jobs/canary/sync_upstream.go +++ b/pkg/jobs/canary/sync_upstream.go @@ -1,6 +1,7 @@ package canary import ( + gocontext "context" "encoding/json" "fmt" "net/http" @@ -8,9 +9,9 @@ import ( "time" "github.com/flanksource/canary-checker/api/context" - v1 "github.com/flanksource/canary-checker/api/v1" "github.com/flanksource/canary-checker/pkg/db" "github.com/flanksource/commons/logger" + dutyContext "github.com/flanksource/duty/context" "github.com/flanksource/duty/models" "github.com/flanksource/duty/upstream" "github.com/flanksource/postq/pg" @@ -35,12 +36,11 @@ const ( // ReconcileChecks coordinates with upstream and pushes any resource // that are missing on the upstream. func ReconcileChecks() { - ctx := context.New(nil, nil, db.Gorm, db.Pool, v1.Canary{}) - jobHistory := models.NewJobHistory("PushChecksToUpstream", "Canary", "") _ = db.PersistJobHistory(jobHistory.Start()) defer func() { _ = db.PersistJobHistory(jobHistory.End()) }() + ctx := dutyContext.NewContext(gocontext.TODO()).WithDB(db.Gorm, db.Pool) reconciler := upstream.NewUpstreamReconciler(UpstreamConf, 5) if err := reconciler.SyncAfter(ctx, "checks", ReconcileMaxAge); err != nil { jobHistory.AddError(err.Error()) @@ -57,7 +57,7 @@ func SyncCheckStatuses() { _ = db.PersistJobHistory(jobHistory.Start()) defer func() { _ = db.PersistJobHistory(jobHistory.End()) }() - ctx := context.New(nil, nil, db.Gorm, db.Pool, v1.Canary{}) + ctx := dutyContext.NewContext(gocontext.TODO()).WithDB(db.Gorm, db.Pool) if err := upstream.SyncCheckStatuses(ctx, UpstreamConf, ReconcilePageSize); err != nil { logger.Errorf("failed to run checkstatus sync job: %v", err) jobHistory.AddError(err.Error()) @@ -65,7 +65,6 @@ func SyncCheckStatuses() { } jobHistory.IncrSuccess() - return } type CanaryPullResponse struct {