Files
cybertron/pkg/jobs/jobScheduler.go

58 lines
1.6 KiB
Go
Raw Normal View History

2024-12-10 13:24:49 +05:30
package jobs
import (
2024-12-10 14:57:21 +05:30
"cybertron/configs"
2024-12-10 13:24:49 +05:30
"cybertron/internal/client/elastic"
"cybertron/pkg/log"
"cybertron/pkg/utils"
"github.com/go-co-op/gocron/v2"
"go.uber.org/zap"
"time"
)
type JobScheduler struct {
logger *log.Logger
scheduler gocron.Scheduler
elasticSearchClient *elastic.ElasticSearchClient
2024-12-10 14:57:21 +05:30
config configs.JobSchedulerConfig
2024-12-10 13:24:49 +05:30
}
2024-12-10 14:57:21 +05:30
func NewJobScheduler(logger *log.Logger, elasticSearchClient *elastic.ElasticSearchClient, jonSchedulerConfig *configs.JobSchedulerConfig) *JobScheduler {
2024-12-10 13:24:49 +05:30
s, err := gocron.NewScheduler()
if err != nil {
logger.Error("Failed to start scheduler", zap.Error(err))
}
return &JobScheduler{
logger: logger,
scheduler: s,
elasticSearchClient: elasticSearchClient,
2024-12-10 14:57:21 +05:30
config: *jonSchedulerConfig,
2024-12-10 13:24:49 +05:30
}
}
func (s *JobScheduler) ScheduleEsCleanUpJob() {
2024-12-10 14:57:21 +05:30
s.scheduler.NewJob(gocron.DurationJob(2*time.Second), gocron.NewTask(esCleanUpJob, s))
2024-12-10 13:24:49 +05:30
}
func esCleanUpJob(s *JobScheduler) {
2024-12-10 14:57:21 +05:30
2024-12-10 13:24:49 +05:30
now := time.Now().Unix()
// Subtract 7 days (7 days * 24 hours * 60 minutes * 60 seconds)
2024-12-10 14:57:21 +05:30
retentionDays := s.config.GetMaxRetentionDays()
if retentionDays <= 0 {
retentionDays = 7
}
sevenDaysAgo := now - (int64(retentionDays) * 24 * 60 * 60)
2024-12-10 13:24:49 +05:30
rangeQuery := utils.CreateRangeQueryForLteString("created_at", sevenDaysAgo)
search_query := utils.CreateSearchQuery(rangeQuery)
es_query := utils.CreateEsQuery(search_query)
println("final query %v", es_query)
s.elasticSearchClient.DeleteDocuments(es_query)
}
func (s *JobScheduler) Start() {
s.logger.Info("Starting job scheduler")
s.scheduler.Start()
}