annotate pkg/imports/fa.go @ 3681:c9e1848a516a

Handle violation of responsibility areas graceful for BN import. As many others this is an error, which should only affect the specific bottleneck failing and not the whole import.
author Sascha Wilde <wilde@intevation.de>
date Tue, 18 Jun 2019 12:43:01 +0200
parents db87f34805fb
children 1eb39e9e8ec2 7fb75deff16b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
3 //
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
6 //
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2018 by via donau
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
10 //
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
11 // Author(s):
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
12 // * Raimund Renkert <raimund.renkert@intevation.de>
2203
8d1a945d0c3b Uploaded fairway availabilty import: Implemented in terms of normal fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2202
diff changeset
13 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
1694
4a2fad8f57de Imports: Resolved golint issues unrelated to exported symbols commenting.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1676
diff changeset
14
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
15 package imports
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
16
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17 import (
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18 "context"
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19 "database/sql"
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
20 "errors"
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
21 "fmt"
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
22 "sort"
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
23 "time"
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
24
1663
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
25 "github.com/jackc/pgx/pgtype"
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
26
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
27 "gemma.intevation.de/gemma/pkg/soap/ifaf"
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
28 )
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
29
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
30 // FairwayAvailability imports fairway availability data
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
31 // from an IFAF SOAP service.
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 type FairwayAvailability struct {
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
33 // 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
34 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
35 // 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
36 // 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
37 Insecure bool `json:"insecure"`
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
38 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
39
2019
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
40 type uniqueFairwayAvailability struct {
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
41 BottleneckId string
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
42 Surdat time.Time
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
43 }
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
44
1696
ad5e1cddaa09 Imports: Resolved the remaining golint issues with this package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1694
diff changeset
45 // FAJobKind is import queue type identifier.
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
46 const FAJobKind JobKind = "fa"
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
47
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
48 const (
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
49 listBottlenecksSQL = `
3645
02951a62e8c6 'Historicise' bottlenecks on import
Tom Gottfried <tom@intevation.de>
parents: 3219
diff changeset
50 SELECT DISTINCT
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
51 bottleneck_id
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
52 FROM waterway.bottlenecks
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
53 WHERE responsible_country = users.current_user_country()
1663
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
54 AND staging_done = true
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
55 ORDER BY bottleneck_id
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
56 `
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
57
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
58 latestMeasureDateSQL = `
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
59 SELECT
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
60 measure_date
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
61 FROM waterway.effective_fairway_availability
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
62 ORDER BY measure_date DESC LIMIT 1
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
63 `
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
64 listFairwayAvailabilitySQL = `
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
65 SELECT
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
66 fa.id,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
67 bn.bottleneck_id,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
68 fa.surdat
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
69 FROM waterway.fairway_availability fa
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
70 JOIN waterway.bottlenecks bn ON bn.id = fa.bottleneck_id
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
71 `
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
72 insertFASQL = `
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
73 INSERT INTO waterway.fairway_availability (
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 position_code,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
75 bottleneck_id,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
76 surdat,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 critical,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
78 date_info,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 source_organization
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
80 ) VALUES (
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
81 $1,
3666
db87f34805fb Align bottleneck validity at gauges
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
82 -- Always associate fairway availability data to newest bottleneck
db87f34805fb Align bottleneck validity at gauges
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
83 -- version to prevent problems in analysis over longer time periods
db87f34805fb Align bottleneck validity at gauges
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
84 (SELECT id FROM waterway.bottlenecks WHERE bottleneck_id = $2
db87f34805fb Align bottleneck validity at gauges
Tom Gottfried <tom@intevation.de>
parents: 3645
diff changeset
85 ORDER BY validity DESC FETCH FIRST ROW ONLY),
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
86 $3,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
87 $4,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
88 $5,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 $6
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 )
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91 RETURNING id`
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
92
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
93 insertBnPdfsSQL = `
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
94 INSERT INTO waterway.bottleneck_pdfs (
1663
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
95 fairway_availability_id,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
96 profile_pdf_filename,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
97 profile_pdf_url,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
98 pdf_generation_date,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
99 source_organization
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
100 ) VALUES (
1663
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
101 $1,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
102 $2,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
103 $3,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
104 $4,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
105 $5
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
106 ) ON CONFLICT ON CONSTRAINT bottleneck_pdfs_pkey DO NOTHING`
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
107 insertEFASQL = `
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
108 INSERT INTO waterway.effective_fairway_availability (
1663
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
109 fairway_availability_id,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
110 measure_date,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
111 level_of_service,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
112 available_depth_value,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
113 available_width_value,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
114 water_level_value,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
115 measure_type,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
116 source_organization,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
117 forecast_generation_time,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
118 value_lifetime
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
119 ) VALUES (
1663
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
120 $1,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
121 $2,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
122 (SELECT
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
123 level_of_service
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
124 FROM levels_of_service
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
125 WHERE name = $3),
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
126 $4,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
127 $5,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
128 $6,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
129 $7,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
130 $8,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
131 $9,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
132 $10
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
133 ) ON CONFLICT ON CONSTRAINT effective_fairway_availability_pkey DO NOTHING`
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
134 insertFAVSQL = `
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
135 INSERT INTO waterway.fa_reference_values (
1663
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
136 fairway_availability_id,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
137 level_of_service,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
138 fairway_depth,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
139 fairway_width,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
140 fairway_radius,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
141 shallowest_spot
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
142 ) VALUES (
1663
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
143 $1,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
144 (SELECT
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
145 level_of_service
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
146 FROM levels_of_service
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
147 WHERE name = $2),
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
148 $3,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
149 $4,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
150 $5,
10e3dd3b9363 Fairway availability import: Don't use tabs in SQL statements.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1662
diff changeset
151 ST_MakePoint($6, $7)::geography
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
152 )ON CONFLICT ON CONSTRAINT fa_reference_values_pkey DO NOTHING`
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
153 )
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
154
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
155 type faJobCreator struct{}
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
156
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
157 func init() {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
158 RegisterJobCreator(FAJobKind, faJobCreator{})
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
159 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
160
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
161 func (faJobCreator) Description() string {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
162 return "fairway availability"
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
163 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
164
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
165 func (faJobCreator) Create() Job { return new(FairwayAvailability) }
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
166
3219
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2253
diff changeset
167 func (faJobCreator) Depends() [2][]string {
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2253
diff changeset
168 return [2][]string{
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2253
diff changeset
169 {"effective_fairway_availability", "fa_reference_values",
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2253
diff changeset
170 "bottleneck_pdfs", "fairway_availability"},
4acbee65275d Import queue: Split locked dependencies in exclusively and multiple uses.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2253
diff changeset
171 {"bottlenecks", "levels_of_service"},
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
172 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
173 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
174
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
175 func (faJobCreator) 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
176
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
177 // StageDone moves the imported fairway availablities out of the staging area.
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
178 // Currently doing nothing.
1676
4407ecaa2192 Imports: Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1663
diff changeset
179 func (faJobCreator) StageDone(context.Context, *sql.Tx, int64) error {
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
180 return nil
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
181 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
182
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
183 // CleanUp of a fairway availablities import is a NOP.
1676
4407ecaa2192 Imports: Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1663
diff changeset
184 func (*FairwayAvailability) CleanUp() error { return nil }
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
185
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
186 type bottlenecks []string
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
187
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
188 func (bns bottlenecks) contains(bn string) bool {
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
189 idx := sort.SearchStrings(bns, bn)
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
190 return idx < len(bns) && bns[idx] == bn
2016
25967829cf00 Started to simplify the import models.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1756
diff changeset
191 }
25967829cf00 Started to simplify the import models.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1756
diff changeset
192
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
193 func loadBottleneckCountries(ctx context.Context, tx *sql.Tx) (bottlenecks, error) {
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
194
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
195 // Get available bottlenecks from database for use as filter in SOAP request
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
196 rows, err := tx.QueryContext(ctx, listBottlenecksSQL)
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
197 if err != nil {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
198 return nil, err
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
199 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
200 defer rows.Close()
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
201
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
202 var bns bottlenecks
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
203
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
204 for rows.Next() {
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
205 var bn string
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
206 if err = rows.Scan(&bn); err != nil {
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
207 return nil, err
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
208 }
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
209 bns = append(bns, bn)
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
210 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
211 if err = rows.Err(); err != nil {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
212 return nil, err
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
213 }
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
214
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
215 return bns, nil
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
216 }
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
217
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
218 func loadFairwayAvailabilities(ctx context.Context, tx *sql.Tx) (map[uniqueFairwayAvailability]int64, error) {
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
219 rows, err := tx.QueryContext(ctx, listFairwayAvailabilitySQL)
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
220 if err != nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
221 return nil, err
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
222 }
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
223 defer rows.Close()
2019
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
224 fairwayAvailabilities := map[uniqueFairwayAvailability]int64{}
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
225 for rows.Next() {
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
226 var id int64
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
227 var bnId string
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
228 var sd time.Time
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
229 if err = rows.Scan(
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
230 &id,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
231 &bnId,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
232 &sd,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
233 ); err != nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
234 return nil, err
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
235 }
2019
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
236 key := uniqueFairwayAvailability{
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
237 BottleneckId: bnId,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
238 Surdat: sd,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
239 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
240 fairwayAvailabilities[key] = id
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
241 }
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
242 if err = rows.Err(); err != nil {
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
243 return nil, err
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
244 }
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
245 return fairwayAvailabilities, nil
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
246 }
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
247
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
248 func latestDate(ctx context.Context, tx *sql.Tx) (pgtype.Timestamp, error) {
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
249 var date pgtype.Timestamp
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
250 err := tx.QueryRowContext(ctx, latestMeasureDateSQL).Scan(&date)
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
251 switch {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
252 case err == sql.ErrNoRows:
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
253 date = pgtype.Timestamp{
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
254 // Fill Database with data of the last 5 days. Change this to a more useful value.
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
255 Time: time.Now().AddDate(0, 0, -5),
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
256 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
257 case err != nil:
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
258 return pgtype.Timestamp{}, err
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
259 }
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
260 return date, nil
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
261 }
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
262
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
263 func storeFairwayAvailability(
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
264 ctx context.Context,
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
265 conn *sql.Conn,
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
266 feedback Feedback,
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
267 fetch func(context.Context, *sql.Tx, bottlenecks) ([]*ifaf.FairwayAvailability, error),
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
268 ) (interface{}, error) {
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
269
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
270 start := time.Now()
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
271
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
272 tx, err := conn.BeginTx(ctx, nil)
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
273 if err != nil {
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
274 return nil, err
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
275 }
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
276 defer tx.Rollback()
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
277
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
278 bns, err := loadBottleneckCountries(ctx, tx)
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
279 if err != nil {
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
280 return nil, err
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
281 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
282
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
283 fas, err := fetch(ctx, tx, bns)
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
284 if err != nil {
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
285 return nil, err
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
286 }
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
287
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
288 fairwayAvailabilities, err := loadFairwayAvailabilities(ctx, tx)
2198
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
289 if err != nil {
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
290 return nil, err
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
291 }
4db1fa4f049c Fairway availabilty import: Fixed row query leak.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2196
diff changeset
292
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
293 faids, err := doForFAs(ctx, bns, fairwayAvailabilities, fas, tx, feedback)
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
294 if err != nil {
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
295 return nil, fmt.Errorf("Error processing data: %v", err)
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
296 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
297 if len(faids) == 0 {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
298 feedback.Info("No new fairway availablity data found")
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
299 return nil, UnchangedError("No new fairway availablity data found")
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
300 }
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
301 feedback.Info("Processed %d fairway availabilities", len(faids))
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
302
2233
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2203
diff changeset
303 if err = tx.Commit(); err != nil {
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
304 feedback.Info(
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
305 "Importing fairway availabilities failed after %s", time.Since(start))
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
306 return nil, err
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
307 }
2233
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2203
diff changeset
308 feedback.Info(
137addc77b1b Gauge measurement imports: Do all database ops in one transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2203
diff changeset
309 "Importing fairway availabilities successfully took %s", time.Since(start))
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
310
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
311 // TODO: needs to be filled more useful.
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
312 summary := struct {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
313 FairwayAvailabilities []string `json:"fairwayAvailabilities"`
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
314 }{
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
315 FairwayAvailabilities: faids,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
316 }
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
317 return &summary, nil
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
318 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
319
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
320 func doForFAs(
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
321 ctx context.Context,
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
322 bnIds bottlenecks,
2019
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
323 fairwayAvailabilities map[uniqueFairwayAvailability]int64,
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
324 fas []*ifaf.FairwayAvailability,
2200
64147a137e0a Fairway availability import: Run all db ops in same transaction.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2198
diff changeset
325 tx *sql.Tx,
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
326 feedback Feedback,
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
327 ) ([]string, error) {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
328
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
329 insertFAStmt, err := tx.PrepareContext(ctx, insertFASQL)
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
330 if err != nil {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
331 return nil, err
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
332 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
333 defer insertFAStmt.Close()
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
334 insertBnPdfsStmt, err := tx.PrepareContext(ctx, insertBnPdfsSQL)
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
335 if err != nil {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
336 return nil, err
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
337 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
338 defer insertBnPdfsStmt.Close()
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
339 insertEFAStmt, err := tx.PrepareContext(ctx, insertEFASQL)
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
340 if err != nil {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
341 return nil, err
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
342 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
343 defer insertEFAStmt.Close()
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
344 insertFAVStmt, err := tx.PrepareContext(ctx, insertFAVSQL)
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
345 if err != nil {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
346 return nil, err
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
347 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
348 defer insertFAVStmt.Close()
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
349
1694
4a2fad8f57de Imports: Resolved golint issues unrelated to exported symbols commenting.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1676
diff changeset
350 var faIDs []string
4a2fad8f57de Imports: Resolved golint issues unrelated to exported symbols commenting.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1676
diff changeset
351 var faID int64
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
352 feedback.Info("Found %d fairway availabilities", len(fas))
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
353 for _, faRes := range fas {
2201
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
354 if !bnIds.contains(faRes.Bottleneck_id) {
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
355 feedback.Warn("Bottleneck %s not found in database.", faRes.Bottleneck_id)
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
356 continue
cae0b597aefc Fairway availabilty import: There is no need to fetch the responsibility country from the database. Only the bottleneck_ids are needed.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2200
diff changeset
357 }
2019
aeff01c6edec Moved fairwayavailability to a local model.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2016
diff changeset
358 uniqueFa := uniqueFairwayAvailability{
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
359 BottleneckId: faRes.Bottleneck_id,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
360 Surdat: faRes.SURDAT,
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
361 }
1756
295c82c5bc3e Fairway availability import: Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1755
diff changeset
362 var found bool
295c82c5bc3e Fairway availability import: Cosmetics.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1755
diff changeset
363 if faID, found = fairwayAvailabilities[uniqueFa]; !found {
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
364 err = insertFAStmt.QueryRowContext(
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
365 ctx,
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
366 faRes.POSITION,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
367 faRes.Bottleneck_id,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
368 faRes.SURDAT,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
369 faRes.Critical,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
370 faRes.Date_Info,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
371 faRes.Source,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
372 ).Scan(&faID)
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
373 if err != nil {
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
374 return nil, err
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
375 }
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
376 fairwayAvailabilities[uniqueFa] = faID
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
377 }
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
378 feedback.Info("Processing for Bottleneck %s", faRes.Bottleneck_id)
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
379 faIDs = append(faIDs, faRes.Bottleneck_id)
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
380 if faRes.Bottleneck_PDFs != nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
381 bnPdfCount := 0
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
382 for _, bnPdfs := range faRes.Bottleneck_PDFs.PdfInfo {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
383 res, err := insertBnPdfsStmt.ExecContext(
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
384 ctx,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
385 faID,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
386 bnPdfs.ProfilePdfFilename,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
387 bnPdfs.ProfilePdfURL,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
388 bnPdfs.PDF_Generation_Date,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
389 bnPdfs.Source,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
390 )
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
391 if err != nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
392 return nil, err
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
393 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
394 affected, err := res.RowsAffected()
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
395 if err == nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
396 bnPdfCount += int(affected)
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
397 } else {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
398 bnPdfCount++
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
399 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
400 }
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
401 feedback.Info("Add %d Pdfs", bnPdfCount)
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
402 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
403 if faRes.Effective_fairway_availability != nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
404 efaCount := 0
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
405 for _, efa := range faRes.Effective_fairway_availability.EffectiveFairwayAvailability {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
406 los := efa.Level_of_Service
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
407 fgt := efa.Forecast_generation_time
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
408 if efa.Forecast_generation_time.Status == pgtype.Undefined {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
409 fgt = pgtype.Timestamp{
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
410 Status: pgtype.Null,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
411 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
412 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
413 res, err := insertEFAStmt.ExecContext(
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
414 ctx,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
415 faID,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
416 efa.Measure_date,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
417 string(*los),
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
418 efa.Available_depth_value,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
419 efa.Available_width_value,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
420 efa.Water_level_value,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
421 efa.Measure_type,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
422 efa.Source,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
423 fgt.Get(),
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
424 efa.Value_lifetime,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
425 )
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
426 if err != nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
427 return nil, err
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
428 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
429 affected, err := res.RowsAffected()
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
430 if err == nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
431 efaCount += int(affected)
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
432 } else {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
433 efaCount++
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
434 }
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
435 }
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
436 feedback.Info("Add %d Effective Fairway Availability", efaCount)
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
437 }
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
438
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
439 if faRes.Reference_values != nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
440 rvCount := 0
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
441 for _, fav := range faRes.Reference_values.ReferenceValue {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
442 res, err := insertFAVStmt.ExecContext(
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
443 ctx,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
444 faID,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
445 fav.Level_of_Service,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
446 fav.Fairway_depth,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
447 fav.Fairway_width,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
448 fav.Fairway_radius,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
449 fav.Shallowest_spot_Lat,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
450 fav.Shallowest_spot_Lon,
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
451 )
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
452 if err != nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
453 return nil, err
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
454 }
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
455 affected, err := res.RowsAffected()
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
456 if err == nil {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
457 rvCount += int(affected)
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
458 } else {
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
459 rvCount++
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
460 }
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
461 }
1755
d3fe20a13339 Import: Filter fairway availabilities by period and resolve insert confilcts.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1754
diff changeset
462 feedback.Info("Add %d Reference Values", rvCount)
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
463 }
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
464 }
1694
4a2fad8f57de Imports: Resolved golint issues unrelated to exported symbols commenting.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 1676
diff changeset
465 return faIDs, nil
1662
d8ca44615bfc Implemented first version of fairway availability import.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
466 }
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
467
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
468 // Do executes the actual fairway availability import.
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
469 func (fa *FairwayAvailability) Do(
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
470 ctx context.Context,
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
471 importID int64,
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
472 conn *sql.Conn,
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
473 feedback Feedback,
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
474 ) (interface{}, error) {
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
475
2203
8d1a945d0c3b Uploaded fairway availabilty import: Implemented in terms of normal fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2202
diff changeset
476 fetch := func(
8d1a945d0c3b Uploaded fairway availabilty import: Implemented in terms of normal fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2202
diff changeset
477 ctx context.Context,
8d1a945d0c3b Uploaded fairway availabilty import: Implemented in terms of normal fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2202
diff changeset
478 tx *sql.Tx, bns bottlenecks,
8d1a945d0c3b Uploaded fairway availabilty import: Implemented in terms of normal fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2202
diff changeset
479 ) ([]*ifaf.FairwayAvailability, error) {
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
480
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
481 latest, err := latestDate(ctx, tx)
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
482 if err != nil {
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
483 return nil, err
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
484 }
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
485
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
486 client := ifaf.NewFairwayAvailabilityService(fa.URL, fa.Insecure, nil)
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
487
2253
cfc523c70e90 Uploaded imports: Small code clean-ups.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2233
diff changeset
488 period := ifaf.RequestedPeriod{
cfc523c70e90 Uploaded imports: Small code clean-ups.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2233
diff changeset
489 Date_start: latest.Time,
cfc523c70e90 Uploaded imports: Small code clean-ups.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2233
diff changeset
490 Date_end: time.Now(),
cfc523c70e90 Uploaded imports: Small code clean-ups.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2233
diff changeset
491 }
2202
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
492
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
493 ids := ifaf.ArrayOfString{String: bns}
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
494
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
495 req := &ifaf.Get_bottleneck_fa{
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
496 Bottleneck_id: &ids,
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
497 Period: &period,
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
498 }
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
499 resp, err := client.Get_bottleneck_fa(req)
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
500 if err != nil {
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
501 return nil, err
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
502 }
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
503
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
504 if resp.Get_bottleneck_faResult == nil {
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
505 return nil, errors.New("no fairway availabilities found")
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
506 }
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
507
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
508 result := resp.Get_bottleneck_faResult
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
509 return result.FairwayAvailability, nil
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
510 }
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
511
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
512 return storeFairwayAvailability(ctx, conn, feedback, fetch)
0aee7d4954ae Fairway availabilty import: Re-factored to be the base for the uploaded fairway availabilty import.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2201
diff changeset
513 }