Mercurial > gemma
diff pkg/controllers/system.go @ 4214:49564382ffff
Added a import queue job to recalculate the contour lines of the sounding results if the heights have changed.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 16 Aug 2019 13:15:34 +0200 |
parents | 45be361f2d48 |
children | 8aff98c84a5a |
line wrap: on
line diff
--- a/pkg/controllers/system.go Wed Aug 14 17:12:23 2019 +0200 +++ b/pkg/controllers/system.go Fri Aug 16 13:15:34 2019 +0200 @@ -23,12 +23,15 @@ "net/http" "strings" "sync" + "time" "github.com/gorilla/mux" "gemma.intevation.de/gemma/pkg/auth" + "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/config" "gemma.intevation.de/gemma/pkg/geoserver" + "gemma.intevation.de/gemma/pkg/imports" "gemma.intevation.de/gemma/pkg/models" ) @@ -152,7 +155,7 @@ return } -type reconfFunc func(sql.NullString, string) (func(), error) +type reconfFunc func(sql.NullString, string) (func(*http.Request), error) var ( reconfigureFuncsMu sync.Mutex @@ -171,7 +174,11 @@ return reconfigureFuncs[key] } -func reconfigureClassBreaks(old sql.NullString, curr, which string, recalc func()) (func(), error) { +func reconfigureClassBreaks( + old sql.NullString, curr, + which string, + recalc func(*http.Request), +) (func(*http.Request), error) { // If new values are broken, don't proceed. currCVs, err := models.ParseColorValues(curr) @@ -179,10 +186,10 @@ return nil, err } - doBoth := func() { + doBoth := func(req *http.Request) { log.Printf("info: Trigger re-calculation of %s.", which) geoserver.ReconfigureStyle(which) - recalc() + recalc(req) } if !old.Valid { @@ -213,7 +220,7 @@ // Only the color changed -> no expensive recalc needed. if colorChanged { log.Println("info: Only colors changed.") - return func() { geoserver.ReconfigureStyle(which) }, nil + return func(*http.Request) { geoserver.ReconfigureStyle(which) }, nil } return nil, nil @@ -221,24 +228,52 @@ func init() { registerReconfigureFunc("morphology_classbreaks", - func(old sql.NullString, curr string) (func(), error) { + func(old sql.NullString, curr string) (func(*http.Request), error) { return reconfigureClassBreaks( old, curr, "sounding_results_contour_lines_geoserver", - func() { - log.Println( - "todo: Trigger expensive recalculation of sounding result contours.") + func(req *http.Request) { + if s, ok := auth.GetSession(req); ok { + triggerSoundingResultsContoursRecalc(s.User, curr) + } }) }) registerReconfigureFunc("morphology_classbreaks_compare", - func(old sql.NullString, curr string) (func(), error) { + func(old sql.NullString, curr string) (func(*http.Request), error) { return reconfigureClassBreaks( old, curr, "sounding_differences", - func() { go deleteSoundingDiffs() }) + func(*http.Request) { go deleteSoundingDiffs() }) }) } +func triggerSoundingResultsContoursRecalc(who, breaks string) { + var serialized string + job := &imports.IsoRefresh{ClassBreaks: breaks} + serialized, err := common.ToJSONString(job) + if err != nil { + log.Printf("error: %v\n", err) + return + } + var jobID int64 + if jobID, err = imports.AddJob( + imports.ISRJobKind, + time.Time{}, + nil, + nil, + who, + false, + serialized, + ); err != nil { + log.Printf("error: %v\n", err) + return + } + log.Printf( + "info: Recalculate sounding results contours in job %d.\n", + jobID) + +} + func deleteSoundingDiffs() { // TODO: Better do that in import queue? ctx := context.Background() @@ -279,7 +314,7 @@ } defer getStmt.Close() - reconfigure := map[string]func(){} + reconfigure := map[string]func(*http.Request){} for key, value := range *settings { var old sql.NullString @@ -292,7 +327,7 @@ } if cmp := reconfigureFunc(key); cmp != nil { - var fn func() + var fn func(*http.Request) if fn, err = cmp(old, value); err != nil { return } @@ -311,7 +346,7 @@ } for _, fn := range reconfigure { - fn() + fn(req) } jr = JSONResult{