From 5217132b525d3f8a27cde6ec769cf83f24ad5c4b Mon Sep 17 00:00:00 2001 From: Volker Schukai <volker.schukai@schukai.com> Date: Mon, 13 Nov 2023 10:33:20 +0100 Subject: [PATCH] feat: delete stats and logs function #20 --- database.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ database_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/database.go b/database.go index 9472b5c..7863b08 100644 --- a/database.go +++ b/database.go @@ -240,3 +240,47 @@ func (s *DBSaver) DeleteJob(job GenericJob) error { }) } + +func (s *DBSaver) DeleteLogs(job GenericJob) error { + s.mu.Lock() + defer s.mu.Unlock() + var db *gorm.DB + var err error + + if db, err = checkRunningSaver(s); err != nil { + return err + } + + return db.Transaction(func(tx *gorm.DB) error { + permJob := job.GetPersistence() + + dbErr := tx.Where("job_id = ?", permJob.GetID()).Delete(&JobLog{}).Error + if dbErr != nil { + return dbErr + } + + return nil + }) +} + +func (s *DBSaver) DeleteStats(job GenericJob) error { + s.mu.Lock() + defer s.mu.Unlock() + var db *gorm.DB + var err error + + if db, err = checkRunningSaver(s); err != nil { + return err + } + + return db.Transaction(func(tx *gorm.DB) error { + permJob := job.GetPersistence() + + dbErr := tx.Where("job_id = ?", permJob.GetID()).Delete(&JobStats{}).Error + if dbErr != nil { + return dbErr + } + + return nil + }) +} diff --git a/database_test.go b/database_test.go index 37f4c7d..c2b80e0 100644 --- a/database_test.go +++ b/database_test.go @@ -324,6 +324,38 @@ func TestWriteToDB(t *testing.T) { }) + wg.Add(1) + t.Run("TestDeleteJob", func(t *testing.T) { + defer wg.Done() + + mgr := NewManager() + mgr.SetDB(db) + worker := NewLocalWorker(1) + err := mgr.AddWorker(worker) + assert.Nil(t, err) + + err = mgr.Start() + assert.Nil(t, err) + + runner := &CounterRunnable{} + job := NewJob[CounterResult]("job1", runner) + + scheduler := &InstantScheduler{} + err = mgr.ScheduleJob(job, scheduler) + assert.Nil(t, err) + + time.Sleep(1 * time.Second) + err = mgr.DeleteJob(job.GetID()) + assert.Nil(t, err) + + // test is job in database + var tmpJob JobPersistence + if err := db.First(&tmpJob, "id = ?", "job1").Error; err == nil { + t.Error("job1 is still in database") + } + + }) + wg.Wait() var jobPersistence JobPersistence -- GitLab