annotate pkg/imports/errors.go @ 3705:7006b92c0334

Handle updates (vs. historized and new versions) separately. We need this distinction as updated data currently can not be reviewed. More precisely: it can not be declined after review, as the old data is updated in place. The current exclusion from the review is a workaround and not meant to be the final solution. Note that there are additional minor problems, like the fact that the updated data is not counted as changed data for the import.
author Sascha Wilde <wilde@intevation.de>
date Wed, 19 Jun 2019 17:00:08 +0200
parents c9e1848a516a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2548
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
3 //
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
6 //
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2019 by via donau
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
10 //
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
11 // Author(s):
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
12 // * Tom Gottfried <tom.gottfried@intevation.de>
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
13
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
14 package imports
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
15
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
16 import (
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
17 "strings"
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
18
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
19 "github.com/jackc/pgx"
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
20 )
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
21
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
22 func handleError(err error) error {
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
23 switch e := err.(type) {
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
24 case pgx.PgError:
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
25 return dbError(e)
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
26 }
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
27 return err
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
28 }
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
29
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
30 // Handle PostgreSQL error codes
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
31 const (
3681
c9e1848a516a Handle violation of responsibility areas graceful for BN import.
Sascha Wilde <wilde@intevation.de>
parents: 3561
diff changeset
32 notNullViolation = "23502"
c9e1848a516a Handle violation of responsibility areas graceful for BN import.
Sascha Wilde <wilde@intevation.de>
parents: 3561
diff changeset
33 foreignKeyViolation = "23503"
c9e1848a516a Handle violation of responsibility areas graceful for BN import.
Sascha Wilde <wilde@intevation.de>
parents: 3561
diff changeset
34 violatesRowLevelSecurity = "42501"
c9e1848a516a Handle violation of responsibility areas graceful for BN import.
Sascha Wilde <wilde@intevation.de>
parents: 3561
diff changeset
35 noDataFound = "P0002"
2548
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
36 )
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
37
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
38 type dbError pgx.PgError
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
39
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
40 func (err dbError) Error() string {
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
41 switch err.Code {
3310
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
42 case notNullViolation:
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
43 switch err.SchemaName {
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
44 case "waterway":
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
45 switch err.TableName {
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
46 case "gauges":
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
47 switch err.ColumnName {
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
48 case "objname":
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
49 return "Missing objname"
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
50 case "geom":
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
51 return "Missing lat/lon"
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
52 case "zero_point":
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
53 return "Missing zeropoint"
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
54 }
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
55 }
e0dabe7b2fcf Simplify gauges import
Tom Gottfried <tom@intevation.de>
parents: 3176
diff changeset
56 }
3176
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
57 case foreignKeyViolation:
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
58 switch err.SchemaName {
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
59 case "waterway":
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
60 switch err.TableName {
3533
8e083b271fca Improve error messages if no matching gauge version found
Tom Gottfried <tom@intevation.de>
parents: 3310
diff changeset
61 case "gauge_measurements", "gauge_predictions", "bottlenecks":
3176
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
62 switch err.ConstraintName {
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
63 case "gauge_key":
3533
8e083b271fca Improve error messages if no matching gauge version found
Tom Gottfried <tom@intevation.de>
parents: 3310
diff changeset
64 return "Referenced gauge with matching temporal validity not available"
3176
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
65 }
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
66 }
1cb6676d1510 Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents: 2548
diff changeset
67 }
2548
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
68 case noDataFound:
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
69 // Most recent line from stacktrace contains name of failed function
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
70 recent := strings.SplitN(err.Where, "\n", 1)[0]
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
71 switch {
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
72 case strings.Contains(recent, "isrsrange_points"):
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
73 return "No distance mark found for at least one given ISRS Location Code"
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
74 case strings.Contains(recent, "isrsrange_axis"):
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
75 return "No contiguous axis found between given ISRS Location Codes"
3561
453f15ba8030 Improve error handling in area generation
Tom Gottfried <tom@intevation.de>
parents: 3533
diff changeset
76 case strings.Contains(recent, "isrsrange_area"):
453f15ba8030 Improve error handling in area generation
Tom Gottfried <tom@intevation.de>
parents: 3533
diff changeset
77 return "No area around axis between given ISRS Location Codes"
2548
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
78 }
3681
c9e1848a516a Handle violation of responsibility areas graceful for BN import.
Sascha Wilde <wilde@intevation.de>
parents: 3561
diff changeset
79
c9e1848a516a Handle violation of responsibility areas graceful for BN import.
Sascha Wilde <wilde@intevation.de>
parents: 3561
diff changeset
80 case violatesRowLevelSecurity:
c9e1848a516a Handle violation of responsibility areas graceful for BN import.
Sascha Wilde <wilde@intevation.de>
parents: 3561
diff changeset
81 return "Could not save: Data outside the area of responsibility."
2548
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
82 }
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
83 return "Unexpected database error: " + err.Message
6b34d0fb4498 Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff changeset
84 }