Mercurial > gemma
annotate pkg/imports/errors.go @ 3240:5240f5440b62
client: implemnt pdf-template for fairwayprofile diagram
author | Fadi Abbud <fadi.abbud@intevation.de> |
---|---|
date | Fri, 10 May 2019 12:09:24 +0200 |
parents | 1cb6676d1510 |
children | e0dabe7b2fcf |
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 ( |
3176
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
32 foreignKeyViolation = "23503" |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
33 noDataFound = "P0002" |
2548
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
34 ) |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
35 |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
36 type dbError pgx.PgError |
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 func (err dbError) Error() string { |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
39 switch err.Code { |
3176
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
40 case foreignKeyViolation: |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
41 switch err.SchemaName { |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
42 case "waterway": |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
43 switch err.TableName { |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
44 case "gauge_measurements": |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
45 switch err.ConstraintName { |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
46 case "gauge_key": |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
47 return "Referenced gauge is not in database" |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
48 } |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
49 } |
1cb6676d1510
Handle failing INSERTs gracefully during gauge measurements import
Tom Gottfried <tom@intevation.de>
parents:
2548
diff
changeset
|
50 } |
2548
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
51 case noDataFound: |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
52 // 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
|
53 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
|
54 switch { |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
55 case strings.Contains(recent, "isrsrange_points"): |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
56 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
|
57 case strings.Contains(recent, "isrsrange_axis"): |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
58 return "No contiguous axis found between given ISRS Location Codes" |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
59 } |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
60 } |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
61 return "Unexpected database error: " + err.Message |
6b34d0fb4498
Improve user facing error messages for stretch area generation
Tom Gottfried <tom@intevation.de>
parents:
diff
changeset
|
62 } |