Mercurial > gemma
annotate pkg/geoserver/reconf.go @ 5591:0011f50cf216 surveysperbottleneckid
Removed no longer used alternative api for surveys/ endpoint.
As bottlenecks in the summary for SR imports are now identified by
their id and no longer by the (not guarantied to be unique!) name,
there is no longer the need to request survey data by the name+date
tuple (which isn't reliable anyway). So the workaround was now
reversed.
author | Sascha Wilde <wilde@sha-bang.de> |
---|---|
date | Wed, 06 Apr 2022 13:30:29 +0200 |
parents | 5f47eeea988d |
children |
rev | line source |
---|---|
1017
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
2 // without warranty, see README.md and license for details. |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
3 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
6 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
7 // Copyright (C) 2018 by via donau |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
9 // Software engineering by Intevation GmbH |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
10 // |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
11 // Author(s): |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
a244b18cb916
Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
890
diff
changeset
|
13 |
890
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
14 package geoserver |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
15 |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
16 import ( |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
17 "container/list" |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
18 "net" |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
19 "net/url" |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
20 "sync" |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
21 "time" |
4290
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
22 |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4290
diff
changeset
|
23 "gemma.intevation.de/gemma/pkg/log" |
4290
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
24 "gemma.intevation.de/gemma/pkg/models" |
890
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
25 ) |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
26 |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
27 var ( |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
28 confQueue = list.New() |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
29 confQueueCond = sync.NewCond(new(sync.Mutex)) |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
30 ) |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
31 |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
32 func init() { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
33 go asyncConfigure() |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
34 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
35 |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
36 func asyncConfigure() { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
37 for { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
38 var fn func() error |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
39 confQueueCond.L.Lock() |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
40 for confQueue.Len() == 0 { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
41 confQueueCond.Wait() |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
42 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
43 fn = confQueue.Remove(confQueue.Front()).(func() error) |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
44 confQueueCond.L.Unlock() |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
45 if err := reconfigure(fn); err != nil { |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4290
diff
changeset
|
46 log.Warnf("configure GeoServer failed: %v\n", err) |
890
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
47 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
48 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
49 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
50 |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
51 func reconfigure(fn func() error) error { |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4290
diff
changeset
|
52 log.Infof("configure GeoServer...") |
890
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
53 const ( |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
54 maxTries = 10 |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
55 sleep = time.Second * 5 |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
56 ) |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
57 var err error |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
58 for try := 1; try <= maxTries; try++ { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
59 if err = fn(); err == nil { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
60 break |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
61 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
62 if try < maxTries { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
63 if uerr, ok := err.(*url.Error); ok { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
64 if oerr, ok := uerr.Err.(*net.OpError); ok && oerr.Op == "dial" { |
5490
5f47eeea988d
Use own logging package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
4290
diff
changeset
|
65 log.Warnf("failed attempt %d of %d to configure GeoServer. "+ |
890
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
66 "Will try again in %s...\n", try, maxTries, sleep) |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
67 time.Sleep(sleep) |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
68 continue |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
69 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
70 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
71 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
72 break |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
73 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
74 return err |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
75 } |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
76 |
1466
d7152eb11d58
Added api doc strings for the geoserver package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1035
diff
changeset
|
77 // Reconfigure adds a function to a queue of functions to update |
d7152eb11d58
Added api doc strings for the geoserver package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1035
diff
changeset
|
78 // the GeoServer async. The functions are run again a number |
d7152eb11d58
Added api doc strings for the geoserver package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1035
diff
changeset
|
79 // of times if network errors apppear indicating that the |
d7152eb11d58
Added api doc strings for the geoserver package.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1035
diff
changeset
|
80 // GeoServer is down. |
890
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
81 func Reconfigure(fn func() error) { |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
82 confQueueCond.L.Lock() |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
83 defer confQueueCond.L.Unlock() |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
84 confQueue.PushBack(fn) |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
85 confQueueCond.Signal() |
0a563fef64a9
Reconfiguring GeoServer is now queued async.
Sascha L. Teichmann <teichmann@intevation.de>
parents:
diff
changeset
|
86 } |
4290
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
87 |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
88 // ReconfigureStyle returns a function to update a style |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
89 // in the GeoServer to be in sync with the database. |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
90 func ReconfigureStyle(name string) { |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
91 Reconfigure(func() error { |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
92 var stls styles |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
93 if err := stls.load(); err != nil { |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
94 return err |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
95 } |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
96 |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
97 entries := models.InternalServices.Filter( |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
98 models.IntAnd( |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
99 models.IntWMS, |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
100 models.IntWithStyle, |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
101 models.IntByName(name))) |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
102 |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
103 for i := range entries { |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
104 entry := &entries[i] |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
105 create := !stls.hasStyle(entry.Name) |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
106 if err := updateStyle(entry, create); err != nil { |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
107 return err |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
108 } |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
109 } |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
110 |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
111 return nil |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
112 }) |
2de644208706
GeoServer config: Moved ReconfigureStyle function out of boot.go into reconf.go .
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1466
diff
changeset
|
113 } |