Mercurial > gemma
comparison pkg/controllers/manualimports.go @ 2025:070ac9dd61a1 unify_imports
Bring manual imports to new import modeling.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 24 Jan 2019 18:19:43 +0100 |
parents | 9c65153bb56e |
children | 6b9f0fe741dc |
comparison
equal
deleted
inserted
replaced
2024:6d9fbc62c5a6 | 2025:070ac9dd61a1 |
---|---|
24 "gemma.intevation.de/gemma/pkg/common" | 24 "gemma.intevation.de/gemma/pkg/common" |
25 "gemma.intevation.de/gemma/pkg/imports" | 25 "gemma.intevation.de/gemma/pkg/imports" |
26 "gemma.intevation.de/gemma/pkg/models" | 26 "gemma.intevation.de/gemma/pkg/models" |
27 ) | 27 ) |
28 | 28 |
29 func importBottleneck(input interface{}) (interface{}, common.Attributes, bool) { | 29 func importBottleneck(input interface{}) interface{} { |
30 bi := input.(*models.BottleneckImport) | 30 bi := input.(*models.BottleneckImport) |
31 bn := &imports.Bottleneck{ | 31 return &imports.Bottleneck{ |
32 URL: bi.URL, | 32 URL: bi.URL, |
33 Insecure: bi.Insecure, | 33 Insecure: bi.Insecure, |
34 } | 34 } |
35 return bn, bi.Attributes, bi.SendEmail | 35 } |
36 } | 36 |
37 | 37 func importGaugeMeasurement(input interface{}) interface{} { |
38 func importGaugeMeasurement(input interface{}) (interface{}, common.Attributes, bool) { | |
39 gi := input.(*models.GaugeMeasurementImport) | 38 gi := input.(*models.GaugeMeasurementImport) |
40 gm := &imports.GaugeMeasurement{ | 39 return &imports.GaugeMeasurement{ |
41 URL: gi.URL, | 40 URL: gi.URL, |
42 Insecure: gi.Insecure, | 41 Insecure: gi.Insecure, |
43 } | 42 } |
44 return gm, gi.Attributes, gi.SendEmail | 43 } |
45 } | 44 |
46 | 45 func importFairwayAvailability(input interface{}) interface{} { |
47 func importFairwayAvailability(input interface{}) (interface{}, common.Attributes, bool) { | |
48 fai := input.(*models.FairwayAvailabilityImport) | 46 fai := input.(*models.FairwayAvailabilityImport) |
49 fa := &imports.FairwayAvailability{ | 47 return &imports.FairwayAvailability{ |
50 URL: fai.URL, | 48 URL: fai.URL, |
51 Insecure: fai.Insecure, | 49 Insecure: fai.Insecure, |
52 } | 50 } |
53 return fa, fai.Attributes, fai.SendEmail | 51 } |
54 } | 52 |
55 | 53 func importWaterwayAxis(input interface{}) interface{} { |
56 func importWaterwayAxis(input interface{}) (interface{}, common.Attributes, bool) { | |
57 wxi := input.(*models.WaterwayAxisImport) | 54 wxi := input.(*models.WaterwayAxisImport) |
58 wx := &imports.WaterwayAxis{ | 55 return &imports.WaterwayAxis{ |
59 URL: wxi.URL, | 56 URL: wxi.URL, |
60 FeatureType: wxi.FeatureType, | 57 FeatureType: wxi.FeatureType, |
61 SortBy: wxi.SortBy, | 58 SortBy: wxi.SortBy, |
62 } | 59 } |
63 return wx, wxi.Attributes, wxi.SendEmail | 60 } |
64 } | 61 |
65 | 62 func importWaterwayArea(input interface{}) interface{} { |
66 func importWaterwayArea(input interface{}) (interface{}, common.Attributes, bool) { | |
67 wai := input.(*models.WaterwayAreaImport) | 63 wai := input.(*models.WaterwayAreaImport) |
68 wa := &imports.WaterwayArea{ | 64 return &imports.WaterwayArea{ |
69 URL: wai.URL, | 65 URL: wai.URL, |
70 FeatureType: wai.FeatureType, | 66 FeatureType: wai.FeatureType, |
71 SortBy: wai.SortBy, | 67 SortBy: wai.SortBy, |
72 } | 68 } |
73 return wa, wai.Attributes, wai.SendEmail | 69 } |
74 } | 70 |
75 | 71 func importWaterwayGauge(input interface{}) interface{} { |
76 func importWaterwayGauge(input interface{}) (interface{}, common.Attributes, bool) { | |
77 wgi := input.(*models.WaterwayGaugeImport) | 72 wgi := input.(*models.WaterwayGaugeImport) |
78 username, _ := wgi.Attributes.Get("username") | 73 return &imports.WaterwayGauge{ |
79 password, _ := wgi.Attributes.Get("password") | 74 Username: nilString(wgi.User), |
80 insecure := wgi.Attributes.Bool("insecure") | 75 Password: nilString(wgi.Password), |
81 wg := &imports.WaterwayGauge{ | 76 Insecure: wgi.Insecure, |
82 URL: wgi.URL, | 77 } |
83 Username: username, | 78 } |
84 Password: password, | 79 |
85 Insecure: insecure, | 80 func importDistancemarksVirtual(input interface{}) interface{} { |
86 } | |
87 return wg, wgi.Attributes, wgi.SendEmail | |
88 } | |
89 | |
90 func importDistancemarksVirtual(input interface{}) (interface{}, common.Attributes, bool) { | |
91 dmvi := input.(*models.DistanceMarksVirtualImport) | 81 dmvi := input.(*models.DistanceMarksVirtualImport) |
92 username, _ := dmvi.Attributes.Get("username") | 82 return &imports.DistanceMarksVirtual{ |
93 password, _ := dmvi.Attributes.Get("password") | |
94 insecure := dmvi.Attributes.Bool("insecure") | |
95 wg := &imports.DistanceMarksVirtual{ | |
96 URL: dmvi.URL, | 83 URL: dmvi.URL, |
97 Username: username, | 84 Username: nilString(dmvi.User), |
98 Password: password, | 85 Password: nilString(dmvi.Password), |
99 Insecure: insecure, | 86 Insecure: dmvi.Insecure, |
100 } | 87 } |
101 return wg, dmvi.Attributes, dmvi.SendEmail | 88 } |
102 } | 89 |
103 | 90 func importFairwayDimension(input interface{}) interface{} { |
104 func importFairwayDimension(input interface{}) (interface{}, common.Attributes, bool) { | |
105 fdi := input.(*models.FairwayDimensionImport) | 91 fdi := input.(*models.FairwayDimensionImport) |
106 fd := &imports.FairwayDimension{ | 92 return &imports.FairwayDimension{ |
107 URL: fdi.URL, | 93 URL: fdi.URL, |
108 FeatureType: fdi.FeatureType, | 94 FeatureType: fdi.FeatureType, |
109 SortBy: fdi.SortBy, | 95 SortBy: fdi.SortBy, |
110 LOS: fdi.LOS, | 96 LOS: fdi.LOS, |
111 MinWidth: fdi.MinWidth, | 97 MinWidth: fdi.MinWidth, |
112 MaxWidth: fdi.MaxWidth, | 98 MaxWidth: fdi.MaxWidth, |
113 Depth: fdi.Depth, | 99 Depth: fdi.Depth, |
114 SourceOrganization: fdi.SourceOrganization, | 100 SourceOrganization: fdi.SourceOrganization, |
115 } | 101 } |
116 return fd, fdi.Attributes, fdi.SendEmail | 102 } |
117 } | 103 |
118 | 104 func importDistanceMarksAshore(input interface{}) interface{} { |
119 func importDistanceMarksAshore(input interface{}) (interface{}, common.Attributes, bool) { | |
120 dmai := input.(*models.DistanceMarksAshoreImport) | 105 dmai := input.(*models.DistanceMarksAshoreImport) |
121 dma := &imports.DistanceMarksAshore{ | 106 return &imports.DistanceMarksAshore{ |
122 URL: dmai.URL, | 107 URL: dmai.URL, |
123 FeatureType: dmai.FeatureType, | 108 FeatureType: dmai.FeatureType, |
124 SortBy: dmai.SortBy, | 109 SortBy: dmai.SortBy, |
125 } | 110 } |
126 return dma, dmai.Attributes, dmai.SendEmail | 111 } |
127 } | 112 |
128 | 113 func importStretch(input interface{}) interface{} { |
129 func importStretch(input interface{}) (interface{}, common.Attributes, bool) { | |
130 sti := input.(*models.StretchImport) | 114 sti := input.(*models.StretchImport) |
131 st := &imports.Stretch{ | 115 return &imports.Stretch{ |
132 Name: sti.Name, | 116 Name: sti.Name, |
133 From: sti.From, | 117 From: sti.From, |
134 To: sti.To, | 118 To: sti.To, |
135 ObjNam: sti.ObjNam, | 119 ObjNam: sti.ObjNam, |
136 NObjNam: sti.NObjNam, | 120 NObjNam: sti.NObjNam, |
137 Source: sti.Source, | 121 Source: sti.Source, |
138 Date: sti.Date, | 122 Date: sti.Date, |
139 Countries: sti.Countries, | 123 Countries: sti.Countries, |
140 } | 124 } |
141 return st, sti.Attributes, sti.SendEmail | |
142 } | 125 } |
143 | 126 |
144 func retry(a common.Attributes) (time.Time, *int, *time.Duration) { | 127 func retry(a common.Attributes) (time.Time, *int, *time.Duration) { |
145 due, _ := a.Time("due") | 128 due, _ := a.Time("due") |
146 ret, ok := a.Int("retries") | 129 ret, ok := a.Int("retries") |
154 duration = &dur | 137 duration = &dur |
155 } | 138 } |
156 return due, retries, duration | 139 return due, retries, duration |
157 } | 140 } |
158 | 141 |
142 func nilString(s *string) string { | |
143 if s != nil { | |
144 return *s | |
145 } | |
146 return "" | |
147 } | |
148 | |
159 func manualImport( | 149 func manualImport( |
160 kind imports.JobKind, | 150 kind imports.JobKind, |
161 setup func(interface{}) (interface{}, common.Attributes, bool), | 151 setup func(interface{}) interface{}, |
162 ) func(interface{}, *http.Request, *sql.Conn) (JSONResult, error) { | 152 ) func(interface{}, *http.Request, *sql.Conn) (JSONResult, error) { |
163 | 153 |
164 return func(input interface{}, req *http.Request, _ *sql.Conn) ( | 154 return func(input interface{}, req *http.Request, _ *sql.Conn) ( |
165 jr JSONResult, err error) { | 155 jr JSONResult, err error) { |
166 | 156 |
167 what, attrs, sendEmail := setup(input) | 157 what := setup(input) |
168 | |
169 due, retries, waitRetry := retry(attrs) | |
170 | |
171 var serialized string | 158 var serialized string |
172 if serialized, err = common.ToJSONString(what); err != nil { | 159 if serialized, err = common.ToJSONString(what); err != nil { |
173 return | 160 return |
161 } | |
162 | |
163 var ( | |
164 due time.Time | |
165 trys *int | |
166 waitRetry *time.Duration | |
167 email bool | |
168 ) | |
169 | |
170 if qctg, ok := input.(models.QueueConfigurationGetter); ok { | |
171 qct := qctg.GetQueueConfiguration() | |
172 if qct.Due != nil { | |
173 due = *qct.Due | |
174 } | |
175 trys = qct.Trys | |
176 waitRetry = qct.WaitRetry | |
177 email = qct.EMail | |
174 } | 178 } |
175 | 179 |
176 session, _ := auth.GetSession(req) | 180 session, _ := auth.GetSession(req) |
177 | 181 |
178 var jobID int64 | 182 var jobID int64 |
179 if jobID, err = imports.AddJob( | 183 if jobID, err = imports.AddJob( |
180 kind, | 184 kind, |
181 due, | 185 due, |
182 retries, | 186 trys, |
183 waitRetry, | 187 waitRetry, |
184 session.User, | 188 session.User, |
185 sendEmail, | 189 email, |
186 serialized, | 190 serialized, |
187 ); err != nil { | 191 ); err != nil { |
188 return | 192 return |
189 } | 193 } |
190 | 194 |