annotate pkg/imports/gm.go @ 5591:0011f50cf216 surveysperbottleneckid

Removed no longer used alternative api for surveys/ endpoint. As bottlenecks in the summary for SR imports are now identified by their id and no longer by the (not guarantied to be unique!) name, there is no longer the need to request survey data by the name+date tuple (which isn't reliable anyway). So the workaround was now reversed.
author Sascha Wilde <wilde@sha-bang.de>
date Wed, 06 Apr 2022 13:30:29 +0200
parents f2204f91d286
children 7724bb582e80
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
3 //
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
6 //
3176
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2849
diff changeset
7 // Copyright (C) 2018, 2019 by via donau
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
10 //
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
11 // Author(s):
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
12 // * Raimund Renkert <raimund.renkert@intevation.de>
2245
7d784840a9a7 Uploaded gauge measurements: Initial commit. TODO: Add endpoint.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2244
diff changeset
13 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
3176
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2849
diff changeset
14 // * Tom Gottfried <tom.gottfried@intevation.de>
1694
4a2fad8f57de Imports: Resolved golint issues unrelated to exported symbols commenting.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1688
diff changeset
15
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
16 package imports
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18 import (
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19 "context"
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
20 "database/sql"
1772
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
21 "fmt"
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
22 "sort"
5545
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
23 "strconv"
1772
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
24 "strings"
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
25 "time"
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
26
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5035
diff changeset
27 "github.com/jackc/pgx/pgtype"
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5035
diff changeset
28
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5035
diff changeset
29 "gemma.intevation.de/gemma/pkg/log"
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
30 "gemma.intevation.de/gemma/pkg/models"
4062
6c760abcff0e Move handling of PostgreSQL errors to own package
Tom Gottfried <tom@intevation.de>
parents: 4058
diff changeset
31 "gemma.intevation.de/gemma/pkg/pgxutils"
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 "gemma.intevation.de/gemma/pkg/soap/nts"
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
33 )
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
34
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
35 // GaugeMeasurement is an import job to import
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
36 // gauges measurement data from a NtS SOAP service.
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
37 type GaugeMeasurement struct {
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
38 // URL is the URL of the SOAP service.
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
39 URL string `json:"url"`
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
40 // Insecure indicates if HTTPS traffic
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
41 // should validate certificates or not.
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
42 Insecure bool `json:"insecure"`
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
43 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
44
4852
046a07a33b19 Fixed the golint issues of the imports package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4848
diff changeset
45 // Description gives a short info about relevant facts of this import.
5560
f2204f91d286 Join the log lines of imports to the log exports to recover data from them.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5551
diff changeset
46 func (gm *GaugeMeasurement) Description([]string) (string, error) {
4799
f32d086b5dbf Removed the mechanical touch of the last commit.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4798
diff changeset
47 return gm.URL, nil
4798
ca6a5f722471 Added Description method to most imports.
Sascha Wilde <wilde@intevation.de>
parents: 4505
diff changeset
48 }
ca6a5f722471 Added Description method to most imports.
Sascha Wilde <wilde@intevation.de>
parents: 4505
diff changeset
49
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
50 // GMJobKind is the import queue type identifier.
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
51 const GMJobKind JobKind = "gm"
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
52
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
53 const (
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
54 listGaugesSQL = `
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
55 SELECT
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
56 (location).country_code,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
57 (location).locode,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
58 (location).fairway_section,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
59 (location).orc,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
60 (location).hectometre
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
61 FROM waterway.gauges
4158
5466562cca60 Remove utility function with possibly bad performance impact
Tom Gottfried <tom@intevation.de>
parents: 4147
diff changeset
62 WHERE (location).country_code = (
5466562cca60 Remove utility function with possibly bad performance impact
Tom Gottfried <tom@intevation.de>
parents: 4147
diff changeset
63 SELECT country FROM users.list_users WHERE username = current_user)
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
64 OR pg_has_role('sys_admin', 'MEMBER')
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
65 `
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
66
2849
b8972e4671fa Preserve old predictions on raw gauge measurement import.
Sascha Wilde <wilde@intevation.de>
parents: 2245
diff changeset
67 // Note: we do not expect corrections of data through this service. So
3302
ec6163c6687d 'Historicise' gauges on import
Tom Gottfried <tom@intevation.de>
parents: 3301
diff changeset
68 // any constraint conflicts are triggered by redundant data which
2849
b8972e4671fa Preserve old predictions on raw gauge measurement import.
Sascha Wilde <wilde@intevation.de>
parents: 2245
diff changeset
69 // can be dropped.
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
70 insertGMSQL = `
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
71 INSERT INTO waterway.gauge_measurements (
3302
ec6163c6687d 'Historicise' gauges on import
Tom Gottfried <tom@intevation.de>
parents: 3301
diff changeset
72 location,
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
73 measure_date,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 sender,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
75 language_code,
1766
e51db2a365a2 Insert country code in gm import.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1761
diff changeset
76 country_code,
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 date_issue,
1775
fcb0106ec510 Gauge measurement import: Added reference_code column.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1772
diff changeset
78 reference_code,
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 water_level,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
80 date_info,
1780
48791416bea5 (Approved) gauge measurement import: Fixed row level security.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1776
diff changeset
81 source_organization,
48791416bea5 (Approved) gauge measurement import: Fixed row level security.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1776
diff changeset
82 staging_done
3302
ec6163c6687d 'Historicise' gauges on import
Tom Gottfried <tom@intevation.de>
parents: 3301
diff changeset
83 ) VALUES (
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
84 ($1, $2, $3, $4, $5),
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
85 $6,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
86 $7,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
87 $8,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
88 $9,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 $10,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 $11,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91 $12,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
92 $13,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
93 $14,
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
94 true
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
95 )
2849
b8972e4671fa Preserve old predictions on raw gauge measurement import.
Sascha Wilde <wilde@intevation.de>
parents: 2245
diff changeset
96 ON CONFLICT DO NOTHING
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
97 RETURNING 1
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
98 `
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
99
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
100 insertGPSQL = `
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
101 INSERT INTO waterway.gauge_predictions (
3302
ec6163c6687d 'Historicise' gauges on import
Tom Gottfried <tom@intevation.de>
parents: 3301
diff changeset
102 location,
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
103 measure_date,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
104 sender,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
105 language_code,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
106 country_code,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
107 date_issue,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
108 reference_code,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
109 water_level,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
110 conf_interval,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
111 date_info,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
112 source_organization
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
113 ) VALUES(
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
114 ($1, $2, $3, $4, $5),
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
115 $6,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
116 $7,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
117 $8,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
118 $9,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
119 $10,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
120 $11,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
121 $12,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
122 $13,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
123 $14,
3278
831193935739 Avoid storing of NtS messages other than water level
Tom Gottfried <tom@intevation.de>
parents: 3277
diff changeset
124 $15
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
125 )
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
126 ON CONFLICT DO NOTHING
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
127 RETURNING 1
1978
0a8fa6893181 Import: Upsert gauge measurement data to avoid unique contraint violation.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1954
diff changeset
128 `
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
129 )
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
130
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
131 type gmJobCreator struct{}
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
132
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
133 func init() {
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
134 RegisterJobCreator(GMJobKind, gmJobCreator{})
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
135 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
136
2187
7c83b5277c1c Import queue: Removed boilerplate code to deserialize jobs from JSON by making it part of the import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2168
diff changeset
137 func (gmJobCreator) Description() string { return "gauge measurements" }
1646
a0982c38eac0 Import queue: Implemented email notifications.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1641
diff changeset
138
2187
7c83b5277c1c Import queue: Removed boilerplate code to deserialize jobs from JSON by making it part of the import queue.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2168
diff changeset
139 func (gmJobCreator) Create() Job { return new(GaugeMeasurement) }
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
140
3219
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3176
diff changeset
141 func (gmJobCreator) Depends() [2][]string {
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3176
diff changeset
142 return [2][]string{
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3176
diff changeset
143 {"gauge_measurements"},
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3176
diff changeset
144 {"gauges"},
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
145 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
146 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
147
1754
807569b08513 Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1696
diff changeset
148 func (gmJobCreator) AutoAccept() bool { return true }
807569b08513 Import queue: Auto acceptance is now a property of the import kind itself and is not configurable any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1696
diff changeset
149
5035
56c589f7435d Enhance comments on implementations of StageDone()
Tom Gottfried <tom@intevation.de>
parents: 5034
diff changeset
150 // StageDone is a NOP for gauge measurements imports.
5034
59a99655f34d Added feedback support for StageDone.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4852
diff changeset
151 func (gmJobCreator) StageDone(context.Context, *sql.Tx, int64, Feedback) error {
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
152 return nil
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
153 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
154
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
155 // CleanUp of a gauge measurement import is a NOP.
1676
4407ecaa2192 Imports: Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1664
diff changeset
156 func (*GaugeMeasurement) CleanUp() error { return nil }
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
157
4845
8c46b845b406 Fix comment
Tom Gottfried <tom@intevation.de>
parents: 4813
diff changeset
158 // Do executes the actual import.
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
159 func (gm *GaugeMeasurement) Do(
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
160 ctx context.Context,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
161 importID int64,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
162 conn *sql.Conn,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
163 feedback Feedback,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
164 ) (interface{}, error) {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
165
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
166 fetch := func() ([]*nts.RIS_Message_Type, error) {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
167 client := nts.NewINtSMessageService(gm.URL, gm.Insecure, nil)
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
168
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
169 mt := nts.Message_type_typeWRM
4504
b7e3d42fd9e7 When fetching gauge measurements look 1day into past and future.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4197
diff changeset
170 now := time.Now()
4505
30c499f996d7 Simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4504
diff changeset
171 dis := []*nts.Date_pair{{
4504
b7e3d42fd9e7 When fetching gauge measurements look 1day into past and future.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4197
diff changeset
172 Date_start: nts.Date{Time: now.AddDate(0, 0, -1)},
b7e3d42fd9e7 When fetching gauge measurements look 1day into past and future.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4197
diff changeset
173 Date_end: nts.Date{Time: now.AddDate(0, 0, +1)},
4505
30c499f996d7 Simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4504
diff changeset
174 }}
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
175
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
176 req := &nts.Get_messages_query{
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
177 Message_type: &mt,
3709
d4a8d084eab4 import: Use dates_issue parameter in gm imports.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3583
diff changeset
178 Dates_issue: dis,
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
179 }
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
180
3582
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
181 const maxTries = 3
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
182
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
183 tries := 0
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
184
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
185 again:
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
186 resp, err := client.Get_messages(req)
3582
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
187
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
188 if err != nil {
3582
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
189 if t, ok := err.(interface{ Timeout() bool }); ok && t.Timeout() && tries < maxTries {
5490
5f47eeea988d Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5035
diff changeset
190 log.Warnln("NtS SOAP request timed out. Trying again.")
3582
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
191 tries++
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
192 goto again
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
193 }
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
194 return nil, fmt.Errorf(
317d176ef38c GM import: Try three times when timeouts happen on SOAP service. Increase SOAP timeout to 3 minutes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3580
diff changeset
195 "Error requesting NtS service: %v", err)
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
196 }
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
197
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
198 result := resp.Result_message
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
199 if result == nil {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
200 for _, e := range resp.Result_error {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
201 if e != nil {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
202 feedback.Error("Error code: %s", *e)
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
203 } else {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
204 feedback.Error("Unknown error")
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
205 }
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
206 }
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
207 }
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
208 return result, nil
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
209 }
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
210
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
211 return storeGaugeMeasurements(
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
212 ctx,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
213 importID,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
214 fetch,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
215 conn,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
216 feedback,
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
217 )
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
218 }
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
219
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
220 func loadGauges(ctx context.Context, conn *sql.Conn) ([]string, error) {
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
221
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
222 rows, err := conn.QueryContext(ctx, listGaugesSQL)
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
223 if err != nil {
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
224 return nil, err
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
225 }
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
226 defer rows.Close()
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
227
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
228 var gauges []string
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
229
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
230 for rows.Next() {
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
231 var g models.Isrs
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
232 if err = rows.Scan(
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
233 &g.CountryCode,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
234 &g.LoCode,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
235 &g.FairwaySection,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
236 &g.Orc,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
237 &g.Hectometre,
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
238 ); err != nil {
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
239 return nil, err
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
240 }
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
241 gauges = append(gauges, g.String())
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
242 }
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
243
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
244 if err = rows.Err(); err != nil {
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
245 return nil, err
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
246 }
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
247
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
248 if len(gauges) == 0 {
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
249 return nil, UnchangedError(
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
250 "No gauges for which measurements can be imported in database")
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
251 }
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
252
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
253 sort.Strings(gauges)
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
254
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
255 return gauges, nil
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
256 }
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
257
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
258 func storeGaugeMeasurements(
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
259 ctx context.Context,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
260 importID int64,
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
261 fetch func() ([]*nts.RIS_Message_Type, error),
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
262 conn *sql.Conn,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
263 feedback Feedback,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
264 ) (interface{}, error) {
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
265
2233
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2187
diff changeset
266 start := time.Now()
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
267
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
268 // Get gauges from database, for which user is allowed to import data
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
269 gauges, err := loadGauges(ctx, conn)
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
270 if err != nil {
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
271 return nil, err
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
272 }
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
273
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
274 gids, err := doForGM(ctx, gauges, fetch, conn, feedback)
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
275 if err != nil {
1761
0145537d5474 Gauge measument import: Die with an error if something went wrong.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1754
diff changeset
276 return nil, err
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
277 }
2233
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2187
diff changeset
278
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
279 if len(gids) == 0 {
2233
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2187
diff changeset
280 return nil, UnchangedError("No new gauge measurements found")
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
281 }
2233
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2187
diff changeset
282
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2187
diff changeset
283 feedback.Info(
3176
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2849
diff changeset
284 "Importing gauge measurements took %s", time.Since(start))
2233
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2187
diff changeset
285
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
286 // TODO: needs to be filled more useful.
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
287 summary := struct {
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
288 GaugeMeasuremets []string `json:"gaugeMeasurements"`
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
289 }{
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
290 GaugeMeasuremets: gids,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
291 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
292 return &summary, err
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
293 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
294
1772
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
295 // rescale returns a scaling function to bring the unit all to cm.
3264
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
296 func rescale(unit string) (func(*float32), error) {
1772
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
297
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
298 var scale float32
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
299
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
300 switch strings.ToLower(unit) {
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
301 case "mm":
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
302 scale = 0.1
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
303 case "cm":
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
304 scale = 1.0
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
305 case "dm":
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
306 scale = 10.0
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
307 case "m":
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
308 scale = 100.0
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
309 case "hm":
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
310 scale = 10000.0
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
311 case "km":
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
312 scale = 100000.0
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
313 default:
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
314 return nil, fmt.Errorf("unknown unit '%s'", unit)
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
315 }
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
316
3264
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
317 fn := func(x *float32) {
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
318 if x != nil {
3266
3dee5cf16a58 Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3264
diff changeset
319 *x *= scale
3264
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
320 }
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
321 }
1772
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
322 return fn, nil
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
323 }
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
324
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
325 type gmLog struct {
5529
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
326 gid string
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
327 unknown bool
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
328 assumedZPG bool
5529
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
329 ignoredMeasureCodes []string
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
330 rescaleErrors []string
5531
84f0c53e6ffe Completed GM logging aggregation. TODO: cleanup and dedup.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5530
diff changeset
331 missingValues []string
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
332 assumedCM int
5530
3ccbb6162112 WIP: More on GM import aggregation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5529
diff changeset
333 badValues int
5531
84f0c53e6ffe Completed GM logging aggregation. TODO: cleanup and dedup.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5530
diff changeset
334 measurements int
84f0c53e6ffe Completed GM logging aggregation. TODO: cleanup and dedup.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5530
diff changeset
335 predictions int
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
336 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
337
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
338 type gmLogs []*gmLog
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
339
5529
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
340 func extend(haystack []string, needle string) []string {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
341 for _, straw := range haystack {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
342 if straw == needle {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
343 return haystack
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
344 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
345 }
5529
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
346 return append(haystack, needle)
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
347 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
348
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
349 func (gl *gmLog) addRescaleError(err error) {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
350 gl.rescaleErrors = extend(gl.rescaleErrors, err.Error())
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
351 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
352
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
353 func (gl *gmLog) ignoreMeasureCode(mc nts.Measure_code_enum) {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
354 gl.ignoredMeasureCodes = extend(gl.ignoredMeasureCodes, string(mc))
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
355 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
356
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
357 func (gls gmLogs) find(gid string) *gmLog {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
358 for _, gl := range gls {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
359 if gl.gid == gid {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
360 return gl
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
361 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
362 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
363 return nil
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
364 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
365
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
366 func (gls gmLogs) logging(feedback Feedback) {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
367
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
368 gls.logBool(
5551
e9ef27c75e5c Fixed minor typo.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5547
diff changeset
369 (*gmLog).getUnknown,
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
370 "Cannot find following gauges: ",
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
371 feedback.Warn)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
372
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
373 gls.logBool(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
374 (*gmLog).getAssumedZPG,
5537
2e5e51288a6c Fixed typo in generated logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5533
diff changeset
375 "'Reference_code' not specified. Assuming 'ZPG': ",
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
376 feedback.Warn)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
377
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
378 gls.logInt(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
379 (*gmLog).getAssumedCM,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
380 "'Unit' not specified. Assuming 'cm': ",
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
381 feedback.Warn)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
382
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
383 gls.logInt(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
384 (*gmLog).getBadValues,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
385 "Ignored measurements with value -99999: ",
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
386 feedback.Warn)
5531
84f0c53e6ffe Completed GM logging aggregation. TODO: cleanup and dedup.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5530
diff changeset
387
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
388 gls.logString(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
389 (*gmLog).getMissingValues,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
390 "Missing mandatory values: ",
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
391 feedback.Warn)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
392
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
393 gls.logString(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
394 (*gmLog).getRescaleErrors,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
395 "Cannot convert units: ",
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
396 feedback.Error)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
397
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
398 gls.logString(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
399 (*gmLog).getRescaleErrors,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
400 "Ignored measure codes: ",
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
401 feedback.Warn)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
402
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
403 gls.logInt(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
404 (*gmLog).getPredictions,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
405 "New predictions: ",
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
406 feedback.Info)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
407
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
408 gls.logInt(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
409 (*gmLog).getMeasurements,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
410 "New measurements: ",
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
411 feedback.Info)
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
412
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
413 gls.logBool(
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
414 (*gmLog).nothingChanged,
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
415 "No changes for: ",
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
416 feedback.Info)
5531
84f0c53e6ffe Completed GM logging aggregation. TODO: cleanup and dedup.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5530
diff changeset
417 }
84f0c53e6ffe Completed GM logging aggregation. TODO: cleanup and dedup.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5530
diff changeset
418
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
419 func (gl *gmLog) getAssumedZPG() bool { return gl.assumedZPG }
5551
e9ef27c75e5c Fixed minor typo.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5547
diff changeset
420 func (gl *gmLog) getUnknown() bool { return gl.unknown }
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
421 func (gl *gmLog) getIgnoredMeasureCodes() []string { return gl.ignoredMeasureCodes }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
422 func (gl *gmLog) getRescaleErrors() []string { return gl.rescaleErrors }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
423 func (gl *gmLog) getMissingValues() []string { return gl.missingValues }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
424 func (gl *gmLog) getAssumedCM() int { return gl.assumedCM }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
425 func (gl *gmLog) getBadValues() int { return gl.badValues }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
426 func (gl *gmLog) getPredictions() int { return gl.predictions }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
427 func (gl *gmLog) getMeasurements() int { return gl.measurements }
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
428 func (gl *gmLog) nothingChanged() bool { return gl.measurements == 0 && gl.predictions == 0 }
5531
84f0c53e6ffe Completed GM logging aggregation. TODO: cleanup and dedup.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5530
diff changeset
429
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
430 func (gls gmLogs) logBool(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
431 access func(*gmLog) bool,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
432 header string,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
433 log func(string, ...interface{}),
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
434 ) {
5530
3ccbb6162112 WIP: More on GM import aggregation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5529
diff changeset
435 var sb strings.Builder
3ccbb6162112 WIP: More on GM import aggregation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5529
diff changeset
436 for _, gl := range gls {
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
437 if access(gl) {
5530
3ccbb6162112 WIP: More on GM import aggregation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5529
diff changeset
438 if sb.Len() == 0 {
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
439 sb.WriteString(header)
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
440 } else {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
441 sb.WriteString(", ")
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
442 }
5529
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
443 sb.WriteString(gl.gid)
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
444 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
445 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
446 if sb.Len() > 0 {
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
447 log(sb.String())
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
448 }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
449 }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
450
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
451 func (gls gmLogs) logInt(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
452 access func(*gmLog) int,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
453 header string,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
454 log func(string, ...interface{}),
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
455 ) {
5545
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
456 gs := make(gmLogs, 0, len(gls))
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
457 for _, g := range gls {
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
458 if access(g) > 0 {
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
459 gs = append(gs, g)
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
460 }
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
461 }
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
462
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
463 if len(gs) == 0 {
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
464 return
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
465 }
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
466
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
467 sort.SliceStable(gs, func(i, j int) bool {
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
468 return access(gs[i]) < access(gs[j])
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
469 })
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
470
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
471 var sb strings.Builder
5545
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
472 var last int
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
473
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
474 for _, g := range gs {
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
475 if c := access(g); c != last {
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
476 if sb.Len() == 0 {
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
477 sb.WriteString(header)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
478 } else {
5545
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
479 sb.WriteString("); ")
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
480 }
5545
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
481 sb.WriteString(strconv.Itoa(c))
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
482 sb.WriteString(" (")
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
483 last = c
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
484 } else {
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
485 sb.WriteString(", ")
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
486 }
5545
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
487 sb.WriteString(g.gid)
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
488 }
5545
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
489
5547
f8c370af9e6f Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5545
diff changeset
490 sb.WriteByte(')')
5545
a4fa1bf9b208 Aggregate to 'bla: 1 (baz); 2 (foo, bar)' instead of 'bla: foo (2), baz (1), bar (2)'.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5537
diff changeset
491 log(sb.String())
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
492 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
493
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
494 func (gls gmLogs) logString(
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
495 access func(*gmLog) []string,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
496 header string,
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
497 log func(string, ...interface{}),
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
498 ) {
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
499 var sb strings.Builder
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
500 for _, gl := range gls {
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
501 if s := access(gl); len(s) > 0 {
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
502 if sb.Len() == 0 {
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
503 sb.WriteString(header)
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
504 } else {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
505 sb.WriteString(", ")
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
506 }
5547
f8c370af9e6f Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5545
diff changeset
507 sb.WriteString(gl.gid)
f8c370af9e6f Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5545
diff changeset
508 sb.WriteString(" (")
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
509 for i, v := range s {
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
510 if i > 0 {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
511 sb.WriteString("; ")
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
512 }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
513 sb.WriteString(v)
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
514 }
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
515 sb.WriteByte(')')
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
516 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
517 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
518 if sb.Len() > 0 {
5532
7e21a9e6353d Cleaned up and simplified code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5531
diff changeset
519 log(sb.String())
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
520 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
521 }
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
522
5529
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
523 // logFinder is a helper to search recently used logs
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
524 // or create a new one if no log for a given gauge
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
525 // existed before.
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
526 func logFinder(logs *gmLogs) func(string) *gmLog {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
527 var lastLog *gmLog
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
528 return func(gid string) *gmLog {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
529 if lastLog != nil && lastLog.gid == gid {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
530 return lastLog
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
531 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
532 if ll := logs.find(gid); ll != nil {
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
533 lastLog = ll
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
534 return ll
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
535 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
536 lastLog = &gmLog{gid: gid}
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
537 *logs = append(*logs, lastLog)
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
538 return lastLog
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
539 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
540 }
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
541
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
542 func doForGM(
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
543 ctx context.Context,
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
544 gauges []string,
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
545 fetch func() ([]*nts.RIS_Message_Type, error),
3176
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2849
diff changeset
546 conn *sql.Conn,
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
547 feedback Feedback,
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
548 ) ([]string, error) {
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
549
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
550 insertGPStmt, err := conn.PrepareContext(ctx, insertGPSQL)
2234
9b2f8e94671e Gauge measurement import: Moved preparation of insert statement out of gauge iteration loop.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2233
diff changeset
551 if err != nil {
9b2f8e94671e Gauge measurement import: Moved preparation of insert statement out of gauge iteration loop.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2233
diff changeset
552 return nil, err
9b2f8e94671e Gauge measurement import: Moved preparation of insert statement out of gauge iteration loop.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2233
diff changeset
553 }
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
554 defer insertGPStmt.Close()
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
555
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
556 insertGMStmt, err := conn.PrepareContext(ctx, insertGMSQL)
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
557 if err != nil {
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
558 return nil, err
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
559 }
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
560 defer insertGMStmt.Close()
2234
9b2f8e94671e Gauge measurement import: Moved preparation of insert statement out of gauge iteration loop.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2233
diff changeset
561
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
562 // lookup to see if data can be imported for gauge
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
563 isKnown := func(s string) bool {
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
564 idx := sort.SearchStrings(gauges, s)
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
565 return idx < len(gauges) && gauges[idx] == s
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
566 }
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
567
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
568 result, err := fetch()
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
569 if err != nil {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
570 return nil, err
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
571 }
1981
e89368aec538 Import: Make one request per gauge for gauge measurement data.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1978
diff changeset
572
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
573 var gids []string
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
574
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
575 // To prevent spamming the log actual logging
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
576 // is defered to be presented in an aggregated way.
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
577 var logs gmLogs
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
578 defer func() { logs.logging(feedback) }()
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
579
5529
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
580 findLog := logFinder(&logs)
f95f268a83bd WIP: Continued work on aggregating GM logs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5528
diff changeset
581
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
582 for _, msg := range result {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
583 for _, wrm := range msg.Wrm {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
584 curr := string(*wrm.Geo_object.Id)
3718
7431c6680b90 import: Trim whitespaces in ISRS code and improved log messsage.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3709
diff changeset
585 curr = strings.TrimSpace(curr)
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
586 currIsrs, err := models.IsrsFromString(curr)
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
587 if err != nil {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
588 feedback.Warn("Invalid ISRS code %v", err)
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
589 continue
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
590 }
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
591 logger := findLog(curr)
5528
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
592 gids = append(gids, curr)
133dc5b3076a WIP: Started to log GM imports in a more agregated way.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5490
diff changeset
593
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
594 if !isKnown(curr) {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
595 logger.unknown = true
3301
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
596 continue
6514b943654e Re-enable checking of gauge availability
Tom Gottfried <tom@intevation.de>
parents: 3284
diff changeset
597 }
1981
e89368aec538 Import: Make one request per gauge for gauge measurement data.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1978
diff changeset
598
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
599 var referenceCode string
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
600 if wrm.Reference_code == nil {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
601 logger.assumedZPG = true
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
602 referenceCode = "ZPG"
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
603 } else {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
604 referenceCode = string(*wrm.Reference_code)
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
605 }
2849
b8972e4671fa Preserve old predictions on raw gauge measurement import.
Sascha Wilde <wilde@intevation.de>
parents: 2245
diff changeset
606
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
607 for _, measure := range wrm.Measure {
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
608 var unit string
3723
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
609 if *measure.Measure_code != nts.Measure_code_enumWAL {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
610 logger.ignoreMeasureCode(*measure.Measure_code)
3723
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
611 continue
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
612 }
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
613 if measure.Unit == nil {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
614 logger.assumedCM++
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
615 unit = "cm"
1772
70c4dc694d61 Gauge measurement import: Added a rescale function that brings all numerical values into cm.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1766
diff changeset
616 } else {
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
617 unit = string(*measure.Unit)
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
618 }
4813
0644c2b3af54 Check for mandatory measurement value in GM import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4812
diff changeset
619
0644c2b3af54 Check for mandatory measurement value in GM import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4812
diff changeset
620 if measure.Value == nil {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
621 logger.missingValues = append(
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
622 logger.missingValues,
5531
84f0c53e6ffe Completed GM logging aggregation. TODO: cleanup and dedup.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5530
diff changeset
623 measure.Measuredate.Time.Format(time.RFC3339))
4813
0644c2b3af54 Check for mandatory measurement value in GM import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4812
diff changeset
624 continue
0644c2b3af54 Check for mandatory measurement value in GM import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4812
diff changeset
625 }
0644c2b3af54 Check for mandatory measurement value in GM import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4812
diff changeset
626
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
627 convert, err := rescale(unit)
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
628 if err != nil {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
629 logger.addRescaleError(err)
4848
8584197232ec Handle unknown units gracefully
Tom Gottfried <tom@intevation.de>
parents: 4845
diff changeset
630 continue
2242
786c3fb7efe1 Gauge measurements import: Re-factored to be re-usable for upcoming uploaded gauge measurements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2238
diff changeset
631 }
3264
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
632 convert(measure.Value)
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
633 convert(measure.Value_min)
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
634 convert(measure.Value_max)
9ae43313b463 Handle some possibly missing elements in NtS response
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
635
3847
d7b9d5c0ebad gm import: Ignore (and warn for) water levels of -99999.
Sascha Wilde <wilde@intevation.de>
parents: 3723
diff changeset
636 // -99999 is used by some gauges to signal an error
4813
0644c2b3af54 Check for mandatory measurement value in GM import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4812
diff changeset
637 if *measure.Value == -99999 {
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
638 logger.badValues++
3847
d7b9d5c0ebad gm import: Ignore (and warn for) water levels of -99999.
Sascha Wilde <wilde@intevation.de>
parents: 3723
diff changeset
639 continue
d7b9d5c0ebad gm import: Ignore (and warn for) water levels of -99999.
Sascha Wilde <wilde@intevation.de>
parents: 3723
diff changeset
640 }
d7b9d5c0ebad gm import: Ignore (and warn for) water levels of -99999.
Sascha Wilde <wilde@intevation.de>
parents: 3723
diff changeset
641
3580
d38b20ccb6f9 GM import: Be more graceful when accepting measure/issue dates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3533
diff changeset
642 var dummy int
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
643 if measure.Predicted {
3723
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
644 confInterval := pgtype.Numrange{
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
645 Lower: pgtype.Numeric{Status: pgtype.Null},
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
646 Upper: pgtype.Numeric{Status: pgtype.Null},
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
647 LowerType: pgtype.Inclusive,
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
648 UpperType: pgtype.Inclusive,
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
649 Status: pgtype.Null,
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
650 }
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
651 if measure.Value_min != nil && measure.Value_max != nil {
3723
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
652 valueMin := pgtype.Numeric{Status: pgtype.Null}
9759355d7b90 import: Fixed data initialization for database rows.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 3718
diff changeset
653 valueMax := pgtype.Numeric{Status: pgtype.Null}
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
654 valueMin.Set(measure.Value_min)
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
655 valueMax.Set(measure.Value_max)
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
656 confInterval = pgtype.Numrange{
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
657 Lower: valueMin,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
658 Upper: valueMax,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
659 LowerType: pgtype.Inclusive,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
660 UpperType: pgtype.Inclusive,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
661 Status: pgtype.Present,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
662 }
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
663 }
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
664 err = insertGPStmt.QueryRowContext(
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
665 ctx,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
666 currIsrs.CountryCode,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
667 currIsrs.LoCode,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
668 currIsrs.FairwaySection,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
669 currIsrs.Orc,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
670 currIsrs.Hectometre,
3580
d38b20ccb6f9 GM import: Be more graceful when accepting measure/issue dates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3533
diff changeset
671 measure.Measuredate.Time,
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
672 msg.Identification.From,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
673 msg.Identification.Language_code,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
674 msg.Identification.Country_code,
3580
d38b20ccb6f9 GM import: Be more graceful when accepting measure/issue dates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3533
diff changeset
675 msg.Identification.Date_issue.Time,
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
676 referenceCode,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
677 measure.Value,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
678 &confInterval,
3580
d38b20ccb6f9 GM import: Be more graceful when accepting measure/issue dates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3533
diff changeset
679 msg.Identification.Date_issue.Time,
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
680 msg.Identification.Originator,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
681 ).Scan(&dummy)
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
682 switch {
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
683 case err == sql.ErrNoRows:
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
684 // thats expected, nothing to do
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
685 case err != nil:
4197
5d7ce7f926eb Log fatal errors as errors, not warnings, in imports
Tom Gottfried <tom@intevation.de>
parents: 4158
diff changeset
686 feedback.Error(pgxutils.ReadableError{Err: err}.Error())
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
687 default:
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
688 logger.predictions++
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
689 }
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
690 } else {
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
691 err = insertGMStmt.QueryRowContext(
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
692 ctx,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
693 currIsrs.CountryCode,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
694 currIsrs.LoCode,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
695 currIsrs.FairwaySection,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
696 currIsrs.Orc,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
697 currIsrs.Hectometre,
3580
d38b20ccb6f9 GM import: Be more graceful when accepting measure/issue dates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3533
diff changeset
698 measure.Measuredate.Time,
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
699 msg.Identification.From,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
700 msg.Identification.Language_code,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
701 msg.Identification.Country_code,
3580
d38b20ccb6f9 GM import: Be more graceful when accepting measure/issue dates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3533
diff changeset
702 msg.Identification.Date_issue.Time,
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
703 referenceCode,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
704 measure.Value,
3580
d38b20ccb6f9 GM import: Be more graceful when accepting measure/issue dates.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 3533
diff changeset
705 msg.Identification.Date_issue.Time,
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
706 msg.Identification.Originator,
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
707 ).Scan(&dummy)
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
708 switch {
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
709 case err == sql.ErrNoRows:
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
710 // thats expected, nothing to do
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
711 case err != nil:
4197
5d7ce7f926eb Log fatal errors as errors, not warnings, in imports
Tom Gottfried <tom@intevation.de>
parents: 4158
diff changeset
712 feedback.Error(pgxutils.ReadableError{Err: err}.Error())
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
713 default:
5533
0a2326eda3a5 Improved readability a bit. Fixed a defer bug.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5532
diff changeset
714 logger.measurements++
3277
232fc90e6ee2 Disentangle gauge measurements and predictions
Tom Gottfried <tom@intevation.de>
parents: 3266
diff changeset
715 }
1637
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
716 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
717 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
718 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
719 }
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
720 return gids, nil
dd31be75ce6d Implemented gauge measurement import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
721 }