annotate pkg/controllers/fwa.go @ 5201:40daecc6f552 new-fwa

Made timeranges all UTC.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 08 May 2020 15:34:28 +0200
parents 5572da077c89
children fbc79c8459b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2 // without warranty, see README.md and license for details.
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 //
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 //
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 // Copyright (C) 2018, 2019, 2020 by via donau
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 // Software engineering by Intevation GmbH
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10 //
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 // Author(s):
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 package controllers
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
17 "context"
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
18 "database/sql"
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
19 "fmt"
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5184
diff changeset
20 "log"
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 "net/http"
5196
5bc8daa986d9 More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
22 "time"
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
24 "github.com/gorilla/mux"
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
25
5196
5bc8daa986d9 More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
26 "gemma.intevation.de/gemma/pkg/common"
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
27 "gemma.intevation.de/gemma/pkg/middleware"
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
28 )
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
29
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
30 const (
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
31 selectBottlenecksLimitingSQL = `
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
32 SELECT
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
33 lower(validity),
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
34 upper(validity),
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
35 limiting
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
36 FROM
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
37 waterway.bottlenecks
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
38 WHERE
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
39 bottleneck_id = $1 AND
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
40 validity && tstzrange($2, $3)`
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
41
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
42 selectSymbolBottlenecksSQL = `
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
43 SELECT
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
44 distinct(b.bottleneck_id)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
45 FROM
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
46 users.%s s, waterway.bottlenecks b
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
47 WHERE
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
48 ST_Intersects(b.area, s.area)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
49 AND s.name = $1
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
50 AND b.validity && tstzrange($2, $3)`
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
51
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
52 selectLDCsSQL = `
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
53 SELECT
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
54 lower(grwl.validity),
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
55 upper(grwl.validity),
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
56 grwl.value
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
57 FROM
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
58 waterway.gauges_reference_water_levels grwl
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
59 JOIN waterway.bottlenecks bns
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
60 ON grwl.location = bns.gauge_location
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
61 WHERE
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
62 grwl.depth_reference like 'LDC%'
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
63 AND bns.bottleneck_id = $1
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
64 AND grwl.validity && tstzrange($2, $3)`
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
65 )
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
66
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
67 type (
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
68 timeRange struct {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
69 lower time.Time
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
70 upper time.Time
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
71 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
72
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
73 ldc struct {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
74 timeRange
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
75 value float64
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
76 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
77
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
78 limitingValidity struct {
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
79 timeRange
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
80 limiting string
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
81 ldcs []*ldc
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
82 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
83
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
84 limitingValidities []limitingValidity
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
85
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
86 bottleneck struct {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
87 id string
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
88 validities limitingValidities
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
89 }
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
90 )
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
91
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
92 func fairwayAvailability(rw http.ResponseWriter, req *http.Request) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
93
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
94 from, to, ok := parseFromTo(rw, req)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
95 if !ok {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
96 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
97 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
98
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
99 vars := mux.Vars(req)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
100 name := vars["name"]
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
101 if name == "" {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
102 http.Error(rw, "missing 'name' parameter.", http.StatusBadRequest)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
103 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
104 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
105
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
106 ctx := req.Context()
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
107 conn := middleware.GetDBConn(req)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
108
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
109 // Function to extract the bottleneck_id's from the query.
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
110 var extract func(context.Context, *sql.Conn, string, time.Time, time.Time) ([]bottleneck, error)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
111
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
112 switch vars["kind"] {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
113 case "bottleneck":
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
114 extract = extractBottleneck
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
115 case "stretch":
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
116 extract = extractStretch
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
117 case "section":
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
118 extract = extractSection
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
119 default:
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
120 http.Error(rw, "Invalid kind type.", http.StatusBadRequest)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
121 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
122 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
123
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
124 bottlenecks, err := extract(ctx, conn, name, from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
125 if err != nil {
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
126 log.Printf("error: %v\n", err)
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
127 http.Error(rw, "cannot extract bottlenecks", http.StatusBadRequest)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
128 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
129 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
130
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
131 // load validities and limiting factors
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
132 for i := range bottlenecks {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
133 if err := bottlenecks[i].loadLimitingValidities(ctx, conn, from, to); err != nil {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
134 log.Printf("error: %v\n", err)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
135 http.Error(rw, "cannot load validities", http.StatusInternalServerError)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
136 return
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
137 }
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
138 // load LCDs
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
139 if err := bottlenecks[i].loadLDCs(ctx, conn, from, to); err != nil {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
140 log.Printf("error: %v\n", err)
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
141 http.Error(rw, "cannot load LDCs", http.StatusInternalServerError)
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
142 return
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
143 }
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
144 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
145
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
146 // TODO: Implement me!
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
147 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
148
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
149 func dusk(t time.Time) time.Time {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
150 return time.Date(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
151 t.Year(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
152 t.Month(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
153 t.Day(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
154 0, 0, 0, 0,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
155 t.Location())
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
156 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
157
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
158 func dawn(t time.Time) time.Time {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
159 return time.Date(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
160 t.Year(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
161 t.Month(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
162 t.Day(),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
163 23, 59, 59, 999999999,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
164 t.Location())
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
165 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
166
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
167 func parseFromTo(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
168 rw http.ResponseWriter,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
169 req *http.Request,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
170 ) (time.Time, time.Time, bool) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
171 from, ok := parseFormTime(rw, req, "from", time.Now().AddDate(-1, 0, 0))
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
172 if !ok {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
173 return time.Time{}, time.Time{}, false
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
174 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
175
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
176 to, ok := parseFormTime(rw, req, "to", from.AddDate(1, 0, 0))
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
177 if !ok {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
178 return time.Time{}, time.Time{}, false
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
179 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
180
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
181 from, to = common.OrderTime(from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
182 // Operate on daily basis so go to full days.
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
183 return dusk(from), dawn(to), true
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
184 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
185
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
186 func (tr *timeRange) intersects(from, to time.Time) bool {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
187 return !(to.Before(tr.lower) || from.After(tr.upper))
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
188 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
189
5201
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
190 func (tr *timeRange) toUTC() {
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
191 tr.lower = tr.lower.UTC()
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
192 tr.upper = tr.upper.UTC()
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
193 }
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
194
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
195 func (lvs limitingValidities) find() func(from, to time.Time) *limitingValidity {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
196
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
197 var last *limitingValidity
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
198
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
199 return func(from, to time.Time) *limitingValidity {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
200 if last != nil && last.intersects(from, to) {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
201 return last
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
202 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
203 for i := range lvs {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
204 if lv := &lvs[i]; lv.intersects(from, to) {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
205 last = lv
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
206 return lv
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
207 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
208 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
209 return nil
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
210 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
211 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
212
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
213 func loadLimitingValidities(
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
214 ctx context.Context,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
215 conn *sql.Conn,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
216 bottleneckID string,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
217 from, to time.Time,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
218 ) (limitingValidities, error) {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
219
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
220 var lvs limitingValidities
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
221
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
222 rows, err := conn.QueryContext(
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
223 ctx,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
224 selectLimitingSQL,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
225 from, to)
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
226
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
227 if err != nil {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
228 return nil, err
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
229 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
230 defer rows.Close()
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
231
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
232 for rows.Next() {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
233 var lv limitingValidity
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
234 if err := rows.Scan(
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
235 &lv.limiting,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
236 &lv.lower,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
237 &lv.upper,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
238 ); err != nil {
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
239 return nil, err
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
240 }
5201
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
241 lv.toUTC()
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
242 lvs = append(lvs, lv)
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
243 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
244
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
245 return lvs, rows.Err()
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
246 }
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
247
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
248 func loadSymbolBottlenecksFromTo(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
249 ctx context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
250 conn *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
251 what, name string,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
252 from, to time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
253 ) ([]bottleneck, error) {
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
254
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
255 rows, err := conn.QueryContext(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
256 ctx,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
257 fmt.Sprintf(selectSymbolBottlenecksSQL, what),
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
258 name,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
259 from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
260 if err != nil {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
261 return nil, err
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
262 }
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
263 defer rows.Close()
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
264
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
265 var bottlenecks []bottleneck
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
266
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
267 for rows.Next() {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
268 var b bottleneck
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
269 if err := rows.Scan(&b.id); err != nil {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
270 return nil, err
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
271 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
272 bottlenecks = append(bottlenecks, b)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
273 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
274
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
275 return bottlenecks, rows.Err()
5184
445daeefca7b Added controller stub for new fairway availability.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
276 }
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5184
diff changeset
277
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
278 func extractBottleneck(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
279 _ context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
280 _ *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
281 name string,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
282 _, _ time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
283 ) ([]bottleneck, error) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
284 return []bottleneck{{id: name}}, nil
5196
5bc8daa986d9 More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
285 }
5bc8daa986d9 More code movement.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5195
diff changeset
286
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
287 func extractStretch(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
288 ctx context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
289 conn *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
290 name string,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
291 from, to time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
292 ) ([]bottleneck, error) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
293 return loadSymbolBottlenecksFromTo(
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
294 ctx,
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
295 conn,
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
296 "stretches", name,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
297 from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
298 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
299
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
300 func extractSection(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
301 ctx context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
302 conn *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
303 name string,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
304 from, to time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
305 ) ([]bottleneck, error) {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
306 return loadSymbolBottlenecksFromTo(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
307 ctx,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
308 conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
309 "sections", name,
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
310 from, to)
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
311 }
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
312
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
313 func (bn *bottleneck) loadLimitingValidities(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
314 ctx context.Context,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
315 conn *sql.Conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
316 from, to time.Time,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
317 ) error {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
318 vs, err := loadLimitingValidities(
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
319 ctx,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
320 conn,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
321 bn.id,
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
322 from, to)
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
323 if err == nil {
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
324 bn.validities = vs
5197
c352dbbf2778 Started with loading limiting factors and validities.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5196
diff changeset
325 }
5199
5001582f2ee1 Prepare to treat stretches and sections, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5197
diff changeset
326 return err
5195
d6710d29516b Started to move code around.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5184
diff changeset
327 }
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
328
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
329 func (bn *bottleneck) loadLDCs(
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
330 ctx context.Context,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
331 conn *sql.Conn,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
332 from, to time.Time,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
333 ) error {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
334 rows, err := conn.QueryContext(
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
335 ctx, selectLDCsSQL,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
336 bn.id,
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
337 from, to)
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
338 if err != nil {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
339 return err
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
340 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
341 defer rows.Close()
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
342 for rows.Next() {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
343 var l ldc
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
344 if err := rows.Scan(&l.lower, &l.upper, &l.value); err != nil {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
345 return err
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
346 }
5201
40daecc6f552 Made timeranges all UTC.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5200
diff changeset
347 l.toUTC()
5200
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
348 for i := range bn.validities {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
349 vs := bn.validities[i]
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
350 if vs.intersects(l.lower, l.upper) {
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
351 vs.ldcs = append(vs.ldcs, &l)
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
352 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
353 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
354 }
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
355 return nil
5572da077c89 Load LDCs.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5199
diff changeset
356 }