From db62cbb40a37d48a39de1be21eaf86b59f2587fb Mon Sep 17 00:00:00 2001 From: Volker Schukai <volker.schukai@schukai.com> Date: Wed, 17 Apr 2024 20:56:58 +0200 Subject: [PATCH] fix: save all stats #51 --- database-4_test.go | 11 ++++++----- database.go | 24 ++++++++++++++++++------ event-bus.go | 1 + 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/database-4_test.go b/database-4_test.go index 1b1f119..7b9e788 100644 --- a/database-4_test.go +++ b/database-4_test.go @@ -13,8 +13,9 @@ import ( func TestWriteToDB4(t *testing.T) { db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{}) + //db, err := gorm.Open(sqlite.Open("file:/home/vs/workspaces/alvine/cloud/framework/dummy.sqlite"), &gorm.Config{}) if err != nil { - t.Fatalf("a error occurred while opening the database: %v", err) + t.Fatalf("an error occurred while opening the database: %v", err) } manager := NewManager() @@ -45,13 +46,13 @@ func TestWriteToDB4(t *testing.T) { err = manager.ScheduleJob(job, scheduler) assert.Nil(t, err) - time.Sleep(200 * time.Millisecond) - - assert.Equal(t, 21, job.GetStats().RunCount) + time.Sleep(100 * time.Millisecond) + Info("WaitSync") manager.WaitSync() + assert.Equal(t, 21, job.GetStats().RunCount) - // check is stats are the values above + // check the stats are the values above var tmpJob JobPersistence err = db.Preload("Stats").First(&tmpJob, "id = ?", "job3").Error diff --git a/database.go b/database.go index 6ce44a0..e8591df 100644 --- a/database.go +++ b/database.go @@ -88,7 +88,7 @@ func (s *JobSyncer) ResetStats(job GenericJob) error { if s.manager == nil || s.manager.database == nil { return ErrNoDatabaseConnection } - return saveJob(job, s.manager.database) + return updateJob(job, s.manager.database) } @@ -137,13 +137,20 @@ func update(job *JobPersistence, db *gorm.DB) error { return ErrNoDatabaseConnection } - permJob := job.GetPersistence() - return db.Transaction(func(tx *gorm.DB) error { - if permJob.Stats != (JobStats{}) { - if err := tx.Model(&permJob).Select("Stats").Updates(map[string]interface{}{"stats": permJob.Stats}).Error; err != nil { - return err + if job.Stats != (JobStats{}) { + Info("Updating stats for job %s", job.ID) + + if job.Stats.RunCount == 0 { + Info("Stats runCount is 0, skipping update") + } + + if err := tx.Model(job.Stats). + Select("*"). + Omit("job_id", "created_at"). + Updates(job.Stats).Error; err != nil { + return err // Fehler beim Update } } @@ -180,6 +187,11 @@ func save(job *JobPersistence, db *gorm.DB) error { if job.Stats != (JobStats{}) { job.Stats.JobID = job.ID + + if job.Stats.RunCount == 0 { + Info("Stats runCount is 0, skipping update") + } + if err := tx.Save(&job.Stats).Error; err != nil { return err } diff --git a/event-bus.go b/event-bus.go index 8715b4e..b05f0a4 100644 --- a/event-bus.go +++ b/event-bus.go @@ -132,6 +132,7 @@ func (eb *EventBus) Publish(name EventName, data any) { defer func() { if r := recover(); r != nil { + Error("EventBus: publish panic: %v", r) eb.SetPublishError(msgID, fmt.Errorf("publish panic: %v", r)) } }() -- GitLab