diff --git a/database-4_test.go b/database-4_test.go index 1b1f11980a565f9fbf8a43bc5f9e615b0f9e0a16..7b9e78853450832bd6e00ff03f1f83274d50ec9b 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 6ce44a0bc70a291cfcaf1b7d261b953ca377cd86..e8591df9bb641a1d579f92a4462a20304dc8545a 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 8715b4ed834bb205666d50c93734cd8b4271f4e6..b05f0a4889b1fe66c9fd1cea5ffd8c9928550d50 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)) } }()