From 95c992555c63ae0ebf6ae44aa13fba36b1d965a3 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Tue, 12 Jul 2022 12:35:49 +0200 Subject: [PATCH] admin: Fix marshal of error in SyncReport --- admin/api/sync.go | 14 +++++++---- admin/sync/full.go | 58 +++++++++++++++++++++++++++++----------------- 2 files changed, 47 insertions(+), 25 deletions(-) diff --git a/admin/api/sync.go b/admin/api/sync.go index 6a17d392..8c17ac97 100644 --- a/admin/api/sync.go +++ b/admin/api/sync.go @@ -52,8 +52,11 @@ func declareSyncRoutes(router *gin.RouterGroup) { apiSyncDeepRoutes.POST("", func(c *gin.Context) { theme := c.MustGet("theme").(*fic.Theme) - st := sync.SyncThemeDeep(sync.GlobalImporter, theme, 0, 250) - sync.EditDeepReport(&sync.SyncReport{Themes: map[string][]error{theme.Name: st}}, false) + var st []string + for _, se := range sync.SyncThemeDeep(sync.GlobalImporter, theme, 0, 250) { + st = append(st, se.Error()) + } + sync.EditDeepReport(&sync.SyncReport{Themes: map[string][]string{theme.Name: st}}, false) sync.DeepSyncProgress = 255 c.JSON(http.StatusOK, st) }) @@ -211,8 +214,11 @@ func autoSync(c *gin.Context) { } } - st := sync.SyncThemeDeep(sync.GlobalImporter, theme, 0, 250) - sync.EditDeepReport(&sync.SyncReport{Themes: map[string][]error{theme.Name: st}}, false) + var st []string + for _, se := range sync.SyncThemeDeep(sync.GlobalImporter, theme, 0, 250) { + st = append(st, se.Error()) + } + sync.EditDeepReport(&sync.SyncReport{Themes: map[string][]string{theme.Name: st}}, false) sync.DeepSyncProgress = 255 settings.ForceRegeneration() diff --git a/admin/sync/full.go b/admin/sync/full.go index af2f1d55..161a4476 100644 --- a/admin/sync/full.go +++ b/admin/sync/full.go @@ -27,14 +27,14 @@ func avoidImporterSync() bool { } type SyncReport struct { - DateStart time.Time `json:"_started"` - DateEnd time.Time `json:"_ended"` - DateUpdated []time.Time `json:"_updated"` - Regeneration []error `json:"_regeneration"` - SyncError error `json:"_sync,omitempty"` - SyncId string `json:"_id,omitempty"` - ThemesSync []error `json:"_themes,omitempty"` - Themes map[string][]error `json:"themes"` + DateStart time.Time `json:"_started"` + DateEnd time.Time `json:"_ended"` + DateUpdated []time.Time `json:"_updated"` + Regeneration []string `json:"_regeneration"` + SyncError error `json:"_sync,omitempty"` + SyncId string `json:"_id,omitempty"` + ThemesSync []string `json:"_themes,omitempty"` + Themes map[string][]string `json:"themes"` } // SpeedySyncDeep performs a recursive synchronisation without importing files. @@ -48,7 +48,7 @@ func SpeedySyncDeep(i Importer) (errs SyncReport) { }() DeepSyncProgress = 1 - errs.Themes = map[string][]error{} + errs.Themes = map[string][]string{} startTime := time.Now() @@ -60,7 +60,10 @@ func SpeedySyncDeep(i Importer) (errs SyncReport) { } errs.DateStart = startTime - errs.ThemesSync = SyncThemes(i) + sterrs := SyncThemes(i) + for _, sterr := range sterrs { + errs.ThemesSync = append(errs.ThemesSync, sterr.Error()) + } if themes, err := fic.GetThemes(); err == nil { DeepSyncProgress = 2 @@ -68,7 +71,10 @@ func SpeedySyncDeep(i Importer) (errs SyncReport) { for tid, theme := range themes { DeepSyncProgress = 3 + uint8(tid)*themeStep - errs.Themes[theme.Name] = SyncExercices(i, theme) + seerrs := SyncExercices(i, theme) + for _, seerr := range seerrs { + errs.Themes[theme.Name] = append(errs.Themes[theme.Name], seerr.Error()) + } if exercices, err := theme.GetExercices(); err == nil { if len(exercices) == 0 { @@ -80,11 +86,15 @@ func SpeedySyncDeep(i Importer) (errs SyncReport) { DeepSyncProgress = 3 + uint8(tid)*themeStep + uint8(eid)*exerciceStep flagsBindings, ferrs := SyncExerciceFlags(i, exercice) - errs.Themes[theme.Name] = append(errs.Themes[theme.Name], ferrs...) + for _, ferr := range ferrs { + errs.Themes[theme.Name] = append(errs.Themes[theme.Name], ferr.Error()) + } DeepSyncProgress += exerciceStep / 2 _, herrs := SyncExerciceHints(i, exercice, flagsBindings) - errs.Themes[theme.Name] = append(errs.Themes[theme.Name], herrs...) + for _, herr := range herrs { + errs.Themes[theme.Name] = append(errs.Themes[theme.Name], herr.Error()) + } } } } @@ -109,7 +119,7 @@ func SyncDeep(i Importer) (errs SyncReport) { }() DeepSyncProgress = 1 - errs.Themes = map[string][]error{} + errs.Themes = map[string][]string{} startTime := time.Now() @@ -118,14 +128,20 @@ func SyncDeep(i Importer) (errs SyncReport) { } errs.DateStart = startTime - errs.ThemesSync = SyncThemes(i) + sterrs := SyncThemes(i) + for _, sterr := range sterrs { + errs.ThemesSync = append(errs.ThemesSync, sterr.Error()) + } if themes, err := fic.GetThemes(); err == nil && len(themes) > 0 { DeepSyncProgress = 2 var themeStep uint8 = uint8(250) / uint8(len(themes)) for tid, theme := range themes { - errs.Themes[theme.Name] = SyncThemeDeep(i, theme, tid, themeStep) + stderrs := SyncThemeDeep(i, theme, tid, themeStep) + for _, stderr := range stderrs { + errs.Themes[theme.Name] = append(errs.Themes[theme.Name], stderr.Error()) + } } } @@ -134,7 +150,7 @@ func SyncDeep(i Importer) (errs SyncReport) { EditDeepReport(&errs, true) if err := settings.ForceRegeneration(); err != nil { - errs.Regeneration = append(errs.Regeneration, err) + errs.Regeneration = append(errs.Regeneration, err.Error()) } DeepSyncProgress = 255 @@ -159,11 +175,11 @@ func readDeepReport() (ret *SyncReport, err error) { } func EditDeepReport(errs *SyncReport, erase bool) { - errs.Regeneration = []error{} + errs.Regeneration = []string{} if !erase { if in, err := readDeepReport(); err != nil { - errs.Regeneration = append(errs.Regeneration, err) + errs.Regeneration = append(errs.Regeneration, err.Error()) log.Println(err) } else { for k, v := range errs.Themes { @@ -182,11 +198,11 @@ func EditDeepReport(errs *SyncReport, erase bool) { if out, err := json.Marshal(errs); err == nil { fdto.Write(out) } else { - errs.Regeneration = append(errs.Regeneration, err) + errs.Regeneration = append(errs.Regeneration, err.Error()) log.Println(err) } } else { - errs.Regeneration = append(errs.Regeneration, err) + errs.Regeneration = append(errs.Regeneration, err.Error()) log.Println(err) }