changeset 2187:7c83b5277c1c

Import queue: Removed boilerplate code to deserialize jobs from JSON by making it part of the import queue.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 11 Feb 2019 18:35:01 +0100
parents d0498088894f
children 005da2c21b11
files pkg/imports/agm.go pkg/imports/bn.go pkg/imports/dma.go pkg/imports/dmv.go pkg/imports/fa.go pkg/imports/fd.go pkg/imports/gm.go pkg/imports/queue.go pkg/imports/sr.go pkg/imports/st.go pkg/imports/wa.go pkg/imports/wg.go pkg/imports/wp.go pkg/imports/wx.go
diffstat 14 files changed, 18 insertions(+), 112 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/imports/agm.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/agm.go	Mon Feb 11 18:35:01 2019 +0100
@@ -28,7 +28,6 @@
 	"strings"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/misc"
 	"gemma.intevation.de/gemma/pkg/models"
 )
@@ -52,13 +51,7 @@
 	return "approved gauge measurements"
 }
 
-func (agmJobCreator) Create(data string) (Job, error) {
-	agm := new(ApprovedGaugeMeasurements)
-	if err := common.FromJSONString(data, agm); err != nil {
-		return nil, err
-	}
-	return agm, nil
-}
+func (agmJobCreator) Create() Job { return new(ApprovedGaugeMeasurements) }
 
 func (agmJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/bn.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/bn.go	Mon Feb 11 18:35:01 2019 +0100
@@ -21,7 +21,6 @@
 	"strconv"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/soap/ifbn"
 )
 
@@ -88,13 +87,7 @@
 
 func (bnJobCreator) AutoAccept() bool { return false }
 
-func (bnJobCreator) Create(data string) (Job, error) {
-	bn := new(Bottleneck)
-	if err := common.FromJSONString(data, bn); err != nil {
-		return nil, err
-	}
-	return bn, nil
-}
+func (bnJobCreator) Create() Job { return new(Bottleneck) }
 
 func (bnJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/dma.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/dma.go	Mon Feb 11 18:35:01 2019 +0100
@@ -22,7 +22,6 @@
 	"io"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/wfs"
 )
 
@@ -51,13 +50,7 @@
 
 func (dmaJobCreator) AutoAccept() bool { return true }
 
-func (dmaJobCreator) Create(data string) (Job, error) {
-	dma := new(DistanceMarksAshore)
-	if err := common.FromJSONString(data, dma); err != nil {
-		return nil, err
-	}
-	return dma, nil
-}
+func (dmaJobCreator) Create() Job { return new(DistanceMarksAshore) }
 
 func (dmaJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/dmv.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/dmv.go	Mon Feb 11 18:35:01 2019 +0100
@@ -22,7 +22,6 @@
 	"strings"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/models"
 	"gemma.intevation.de/gemma/pkg/soap"
 	"gemma.intevation.de/gemma/pkg/soap/erdms"
@@ -52,13 +51,7 @@
 
 func (dmvJobCreator) AutoAccept() bool { return true }
 
-func (dmvJobCreator) Create(data string) (Job, error) {
-	dmv := new(DistanceMarksVirtual)
-	if err := common.FromJSONString(data, dmv); err != nil {
-		return nil, err
-	}
-	return dmv, nil
-}
+func (dmvJobCreator) Create() Job { return new(DistanceMarksVirtual) }
 
 func (dmvJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/fa.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/fa.go	Mon Feb 11 18:35:01 2019 +0100
@@ -21,7 +21,6 @@
 
 	"github.com/jackc/pgx/pgtype"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/soap/ifaf"
 )
 
@@ -156,13 +155,7 @@
 	return "fairway availability"
 }
 
-func (faJobCreator) Create(data string) (Job, error) {
-	fa := new(FairwayAvailability)
-	if err := common.FromJSONString(data, fa); err != nil {
-		return nil, err
-	}
-	return fa, nil
-}
+func (faJobCreator) Create() Job { return new(FairwayAvailability) }
 
 func (faJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/fd.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/fd.go	Mon Feb 11 18:35:01 2019 +0100
@@ -21,7 +21,6 @@
 	"io"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/misc"
 	"gemma.intevation.de/gemma/pkg/wfs"
 )
@@ -75,13 +74,7 @@
 
 func (fdJobCreator) AutoAccept() bool { return false }
 
-func (fdJobCreator) Create(data string) (Job, error) {
-	fd := new(FairwayDimension)
-	if err := common.FromJSONString(data, fd); err != nil {
-		return nil, err
-	}
-	return fd, nil
-}
+func (fdJobCreator) Create() Job { return new(FairwayDimension) }
 
 func (fdJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/gm.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/gm.go	Mon Feb 11 18:35:01 2019 +0100
@@ -20,7 +20,6 @@
 	"strings"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/models"
 	"gemma.intevation.de/gemma/pkg/soap/nts"
 )
@@ -116,17 +115,9 @@
 	RegisterJobCreator(GMJobKind, gmJobCreator{})
 }
 
-func (gmJobCreator) Description() string {
-	return "gauge measurements"
-}
+func (gmJobCreator) Description() string { return "gauge measurements" }
 
-func (gmJobCreator) Create(data string) (Job, error) {
-	gm := new(GaugeMeasurement)
-	if err := common.FromJSONString(data, gm); err != nil {
-		return nil, err
-	}
-	return gm, nil
-}
+func (gmJobCreator) Create() Job { return new(GaugeMeasurement) }
 
 func (gmJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/queue.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/queue.go	Mon Feb 11 18:35:01 2019 +0100
@@ -27,6 +27,7 @@
 	"github.com/jackc/pgx/pgtype"
 
 	"gemma.intevation.de/gemma/pkg/auth"
+	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/config"
 )
 
@@ -73,10 +74,7 @@
 		// Description is the long name of the import.
 		Description() string
 		// Create build the actual job.
-		// data is a free form string to pass arguments to the creation
-		// process. This is useful to tell e.g. where to find data
-		// in the file system to be used for importing.
-		Create(data string) (Job, error)
+		Create() Job
 		// Depends returns a list of ressources locked by this type of import.
 		// Imports are run concurrently if they have disjoint sets
 		// of dependencies.
@@ -588,8 +586,8 @@
 				}
 			}()
 
-			job, err := jc.Create(idj.data)
-			if err != nil {
+			job := jc.Create()
+			if err := common.FromJSONString(idj.data, job); err != nil {
 				errorAndFail(idj.id, "failed to create job for import #%d: %v",
 					idj.id, err)
 				return
--- a/pkg/imports/sr.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/sr.go	Mon Feb 11 18:35:01 2019 +0100
@@ -77,13 +77,7 @@
 
 func (srJobCreator) AutoAccept() bool { return false }
 
-func (srJobCreator) Create(data string) (Job, error) {
-	sr := new(SoundingResult)
-	if err := common.FromJSONString(data, sr); err != nil {
-		return nil, err
-	}
-	return sr, nil
-}
+func (srJobCreator) Create() Job { return new(SoundingResult) }
 
 func (srJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/st.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/st.go	Mon Feb 11 18:35:01 2019 +0100
@@ -19,7 +19,6 @@
 	"errors"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/models"
 )
 
@@ -46,13 +45,7 @@
 
 func (stJobCreator) AutoAccept() bool { return false }
 
-func (stJobCreator) Create(data string) (Job, error) {
-	st := new(Stretch)
-	if err := common.FromJSONString(data, st); err != nil {
-		return nil, err
-	}
-	return st, nil
-}
+func (stJobCreator) Create() Job { return new(Stretch) }
 
 func (stJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/wa.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/wa.go	Mon Feb 11 18:35:01 2019 +0100
@@ -23,7 +23,6 @@
 	"strconv"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/wfs"
 )
 
@@ -53,13 +52,7 @@
 
 func (waJobCreator) AutoAccept() bool { return true }
 
-func (waJobCreator) Create(data string) (Job, error) {
-	wa := new(WaterwayArea)
-	if err := common.FromJSONString(data, wa); err != nil {
-		return nil, err
-	}
-	return wa, nil
-}
+func (waJobCreator) Create() Job { return new(WaterwayArea) }
 
 func (waJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/wg.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/wg.go	Mon Feb 11 18:35:01 2019 +0100
@@ -23,7 +23,6 @@
 
 	"github.com/jackc/pgx/pgtype"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/models"
 	"gemma.intevation.de/gemma/pkg/soap"
 	"gemma.intevation.de/gemma/pkg/soap/erdms"
@@ -53,13 +52,7 @@
 
 func (wgJobCreator) AutoAccept() bool { return true }
 
-func (wgJobCreator) Create(data string) (Job, error) {
-	wg := new(WaterwayGauge)
-	if err := common.FromJSONString(data, wg); err != nil {
-		return nil, err
-	}
-	return wg, nil
-}
+func (wgJobCreator) Create() Job { return new(WaterwayGauge) }
 
 func (wgJobCreator) Depends() []string {
 	return []string{
--- a/pkg/imports/wp.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/wp.go	Mon Feb 11 18:35:01 2019 +0100
@@ -30,7 +30,6 @@
 
 	"github.com/jackc/pgx/pgtype"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/misc"
 	"gemma.intevation.de/gemma/pkg/models"
 	"gemma.intevation.de/gemma/pkg/wfs"
@@ -61,13 +60,7 @@
 	RegisterJobCreator(WPJobKind, wpJobCreator{})
 }
 
-func (wpJobCreator) Create(data string) (Job, error) {
-	wp := new(WaterwayProfiles)
-	if err := common.FromJSONString(data, wp); err != nil {
-		return nil, err
-	}
-	return wp, nil
-}
+func (wpJobCreator) Create() Job { return new(WaterwayProfiles) }
 
 func (wpJobCreator) AutoAccept() bool { return false }
 
--- a/pkg/imports/wx.go	Mon Feb 11 16:49:18 2019 +0100
+++ b/pkg/imports/wx.go	Mon Feb 11 18:35:01 2019 +0100
@@ -22,7 +22,6 @@
 	"io"
 	"time"
 
-	"gemma.intevation.de/gemma/pkg/common"
 	"gemma.intevation.de/gemma/pkg/wfs"
 )
 
@@ -52,13 +51,7 @@
 
 func (wxJobCreator) AutoAccept() bool { return true }
 
-func (wxJobCreator) Create(data string) (Job, error) {
-	wx := new(WaterwayAxis)
-	if err := common.FromJSONString(data, wx); err != nil {
-		return nil, err
-	}
-	return wx, nil
-}
+func (wxJobCreator) Create() Job { return new(WaterwayAxis) }
 
 func (wxJobCreator) Depends() []string {
 	return []string{