admin: Fix marshal of error in SyncReport

This commit is contained in:
nemunaire 2022-07-12 12:35:49 +02:00
parent 86d9a039c8
commit 95c992555c
2 changed files with 47 additions and 25 deletions

View File

@ -52,8 +52,11 @@ func declareSyncRoutes(router *gin.RouterGroup) {
apiSyncDeepRoutes.POST("", func(c *gin.Context) { apiSyncDeepRoutes.POST("", func(c *gin.Context) {
theme := c.MustGet("theme").(*fic.Theme) theme := c.MustGet("theme").(*fic.Theme)
st := sync.SyncThemeDeep(sync.GlobalImporter, theme, 0, 250) var st []string
sync.EditDeepReport(&sync.SyncReport{Themes: map[string][]error{theme.Name: st}}, false) 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 sync.DeepSyncProgress = 255
c.JSON(http.StatusOK, st) c.JSON(http.StatusOK, st)
}) })
@ -211,8 +214,11 @@ func autoSync(c *gin.Context) {
} }
} }
st := sync.SyncThemeDeep(sync.GlobalImporter, theme, 0, 250) var st []string
sync.EditDeepReport(&sync.SyncReport{Themes: map[string][]error{theme.Name: st}}, false) 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 sync.DeepSyncProgress = 255
settings.ForceRegeneration() settings.ForceRegeneration()

View File

@ -27,14 +27,14 @@ func avoidImporterSync() bool {
} }
type SyncReport struct { type SyncReport struct {
DateStart time.Time `json:"_started"` DateStart time.Time `json:"_started"`
DateEnd time.Time `json:"_ended"` DateEnd time.Time `json:"_ended"`
DateUpdated []time.Time `json:"_updated"` DateUpdated []time.Time `json:"_updated"`
Regeneration []error `json:"_regeneration"` Regeneration []string `json:"_regeneration"`
SyncError error `json:"_sync,omitempty"` SyncError error `json:"_sync,omitempty"`
SyncId string `json:"_id,omitempty"` SyncId string `json:"_id,omitempty"`
ThemesSync []error `json:"_themes,omitempty"` ThemesSync []string `json:"_themes,omitempty"`
Themes map[string][]error `json:"themes"` Themes map[string][]string `json:"themes"`
} }
// SpeedySyncDeep performs a recursive synchronisation without importing files. // SpeedySyncDeep performs a recursive synchronisation without importing files.
@ -48,7 +48,7 @@ func SpeedySyncDeep(i Importer) (errs SyncReport) {
}() }()
DeepSyncProgress = 1 DeepSyncProgress = 1
errs.Themes = map[string][]error{} errs.Themes = map[string][]string{}
startTime := time.Now() startTime := time.Now()
@ -60,7 +60,10 @@ func SpeedySyncDeep(i Importer) (errs SyncReport) {
} }
errs.DateStart = startTime 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 { if themes, err := fic.GetThemes(); err == nil {
DeepSyncProgress = 2 DeepSyncProgress = 2
@ -68,7 +71,10 @@ func SpeedySyncDeep(i Importer) (errs SyncReport) {
for tid, theme := range themes { for tid, theme := range themes {
DeepSyncProgress = 3 + uint8(tid)*themeStep 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 exercices, err := theme.GetExercices(); err == nil {
if len(exercices) == 0 { if len(exercices) == 0 {
@ -80,11 +86,15 @@ func SpeedySyncDeep(i Importer) (errs SyncReport) {
DeepSyncProgress = 3 + uint8(tid)*themeStep + uint8(eid)*exerciceStep DeepSyncProgress = 3 + uint8(tid)*themeStep + uint8(eid)*exerciceStep
flagsBindings, ferrs := SyncExerciceFlags(i, exercice) 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 DeepSyncProgress += exerciceStep / 2
_, herrs := SyncExerciceHints(i, exercice, flagsBindings) _, 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 DeepSyncProgress = 1
errs.Themes = map[string][]error{} errs.Themes = map[string][]string{}
startTime := time.Now() startTime := time.Now()
@ -118,14 +128,20 @@ func SyncDeep(i Importer) (errs SyncReport) {
} }
errs.DateStart = startTime 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 { if themes, err := fic.GetThemes(); err == nil && len(themes) > 0 {
DeepSyncProgress = 2 DeepSyncProgress = 2
var themeStep uint8 = uint8(250) / uint8(len(themes)) var themeStep uint8 = uint8(250) / uint8(len(themes))
for tid, theme := range 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) EditDeepReport(&errs, true)
if err := settings.ForceRegeneration(); err != nil { if err := settings.ForceRegeneration(); err != nil {
errs.Regeneration = append(errs.Regeneration, err) errs.Regeneration = append(errs.Regeneration, err.Error())
} }
DeepSyncProgress = 255 DeepSyncProgress = 255
@ -159,11 +175,11 @@ func readDeepReport() (ret *SyncReport, err error) {
} }
func EditDeepReport(errs *SyncReport, erase bool) { func EditDeepReport(errs *SyncReport, erase bool) {
errs.Regeneration = []error{} errs.Regeneration = []string{}
if !erase { if !erase {
if in, err := readDeepReport(); err != nil { if in, err := readDeepReport(); err != nil {
errs.Regeneration = append(errs.Regeneration, err) errs.Regeneration = append(errs.Regeneration, err.Error())
log.Println(err) log.Println(err)
} else { } else {
for k, v := range errs.Themes { for k, v := range errs.Themes {
@ -182,11 +198,11 @@ func EditDeepReport(errs *SyncReport, erase bool) {
if out, err := json.Marshal(errs); err == nil { if out, err := json.Marshal(errs); err == nil {
fdto.Write(out) fdto.Write(out)
} else { } else {
errs.Regeneration = append(errs.Regeneration, err) errs.Regeneration = append(errs.Regeneration, err.Error())
log.Println(err) log.Println(err)
} }
} else { } else {
errs.Regeneration = append(errs.Regeneration, err) errs.Regeneration = append(errs.Regeneration, err.Error())
log.Println(err) log.Println(err)
} }