Mercurial > gemma
diff pkg/controllers/manualimports.go @ 1708:49e047c2106e
Imports: Made imports re-runnable if they fail.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 08 Jan 2019 13:35:44 +0100 |
parents | 53304db85888 |
children | 807569b08513 |
line wrap: on
line diff
--- a/pkg/controllers/manualimports.go Tue Jan 08 12:34:29 2019 +0100 +++ b/pkg/controllers/manualimports.go Tue Jan 08 13:35:44 2019 +0100 @@ -18,6 +18,7 @@ "database/sql" "log" "net/http" + "time" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" @@ -25,52 +26,65 @@ "gemma.intevation.de/gemma/pkg/models" ) -func importBottleneck(input interface{}) (interface{}, bool, bool) { +func retry(a common.Attributes) (time.Time, int) { + due, _ := a.Time("due") + retries, ok := a.Int("retries") + if !ok { + retries = -1 + } + return due, retries +} + +func importBottleneck(input interface{}) (interface{}, time.Time, int, bool, bool) { bi := input.(*models.BottleneckImport) bn := &imports.Bottleneck{ URL: bi.URL, Insecure: bi.Insecure, } - return bn, bi.SendEmail, false + due, retries := retry(bi.Attributes) + return bn, due, retries, bi.SendEmail, false } -func importGaugeMeasurement(input interface{}) (interface{}, bool, bool) { +func importGaugeMeasurement(input interface{}) (interface{}, time.Time, int, bool, bool) { gi := input.(*models.GaugeMeasurementImport) gm := &imports.GaugeMeasurement{ URL: gi.URL, Insecure: gi.Insecure, } - return gm, gi.SendEmail, true + due, retries := retry(gi.Attributes) + return gm, due, retries, gi.SendEmail, true } -func importFairwayAvailability(input interface{}) (interface{}, bool, bool) { +func importFairwayAvailability(input interface{}) (interface{}, time.Time, int, bool, bool) { fai := input.(*models.FairwayAvailabilityImport) fa := &imports.FairwayAvailability{ URL: fai.URL, Insecure: fai.Insecure, } - return fa, fai.SendEmail, true + due, retries := retry(fai.Attributes) + return fa, due, retries, fai.SendEmail, true } -func importWaterwayAxis(input interface{}) (interface{}, bool, bool) { +func importWaterwayAxis(input interface{}) (interface{}, time.Time, int, bool, bool) { wxi := input.(*models.WaterwayAxisImport) wx := &imports.WaterwayAxis{ URL: wxi.URL, FeatureType: wxi.FeatureType, SortBy: wxi.SortBy, } - return wx, wxi.SendEmail, true + due, retries := retry(wxi.Attributes) + return wx, due, retries, wxi.SendEmail, true } func manualImport( kind imports.JobKind, - setup func(interface{}) (interface{}, bool, bool), + setup func(interface{}) (interface{}, time.Time, int, bool, bool), ) func(interface{}, *http.Request, *sql.Conn) (JSONResult, error) { return func(input interface{}, req *http.Request, _ *sql.Conn) ( jr JSONResult, err error) { - what, sendEmail, autoAccept := setup(input) + what, due, retries, sendEmail, autoAccept := setup(input) var serialized string if serialized, err = common.ToJSONString(what); err != nil { @@ -82,6 +96,7 @@ var jobID int64 if jobID, err = imports.AddJob( kind, + due, retries, session.User, sendEmail, autoAccept, serialized,