diff --git a/events.go b/events.go new file mode 100644 index 0000000..fbb01aa --- /dev/null +++ b/events.go @@ -0,0 +1,51 @@ +package main + +import ( + "context" + "fmt" + "time" + + "github.com/jackc/pgx/v5" +) + +func enableHasuraEventCleaner() { + if cfg.HasuraEventCleaner.Enable { + if cfg.HasuraEventCleaner.EventMetadataDb == "" { + cfg.Logger.Warning("Event metadata db URL not specified, event cleaner not active", nil) + return + } + + ticker := time.NewTicker(1 * time.Hour) + defer ticker.Stop() + + go func() { + for { + select { + case <-ticker.C: + cleanEvents() + } + } + }() + } +} + +func cleanEvents() { + conn, err := pgx.Connect(context.Background(), cfg.HasuraEventCleaner.EventMetadataDb) + if err != nil { + cfg.Logger.Error("Failed to connect to event metadata db", map[string]interface{}{"error": err}) + return + } + defer conn.Close(context.Background()) + + delQueries := []string{ + fmt.Sprintf("DELETE FROM hdb_catalog.event_invocation_logs WHERE created_at < now() - interval '%d days';", cfg.HasuraEventCleaner.ClearOlderThan), + fmt.Sprintf("DELETE FROM hdb_catalog.event_log WHERE created_at < now() - interval '%d days';", cfg.HasuraEventCleaner.ClearOlderThan), + } + + for _, query := range delQueries { + _, err := conn.Exec(context.Background(), query) + if err != nil { + cfg.Logger.Error("Failed to execute query", map[string]interface{}{"query": query, "error": err}) + } + } +} diff --git a/logging/logging.go b/logging/logging.go index 45ec3be..7f1a42c 100644 --- a/logging/logging.go +++ b/logging/logging.go @@ -76,6 +76,9 @@ func (lw *LogConfig) log(w io.Writer, level zerolog.Level, message string, field } func (lw *LogConfig) logWithLevel(level zerolog.Level, message string, fields map[string]interface{}) { + if lw.logger.GetLevel() > level { + return + } if lw.logger.GetLevel() <= level { w := os.Stdout if level >= zerolog.ErrorLevel {