changeset 3116:ff0b9a94e0e4

Simpified code.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 28 Apr 2019 21:41:20 +0200
parents 524bc6545b20
children 6b5132fd385e
files pkg/controllers/bottlenecks.go
diffstat 1 files changed, 89 insertions(+), 77 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/bottlenecks.go	Sun Apr 28 21:29:41 2019 +0200
+++ b/pkg/controllers/bottlenecks.go	Sun Apr 28 21:41:20 2019 +0200
@@ -14,6 +14,7 @@
 package controllers
 
 import (
+	"context"
 	"database/sql"
 	"fmt"
 	"log"
@@ -240,6 +241,91 @@
 	return t.UTC(), nil
 }
 
+func loadDepthValues(
+	ctx context.Context,
+	conn *sql.Conn,
+	bottleneck string,
+	los int,
+	from, to time.Time,
+) (availMeasurements, error) {
+
+	rows, err := conn.QueryContext(
+		ctx, selectAvailableDepthSQL, bottleneck, los, from, to)
+	if err != nil {
+		return nil, err
+	}
+	defer rows.Close()
+
+	var ms availMeasurements
+
+	for rows.Next() {
+		var m availMeasurement
+		if err := rows.Scan(&m.when, &m.depth, &m.value); err != nil {
+			return nil, err
+		}
+		m.when = m.when.UTC()
+		ms = append(ms, m)
+	}
+
+	if err := rows.Err(); err != nil {
+		return nil, err
+	}
+
+	return ms, nil
+}
+
+func loadLNWLReferenceValues(
+	ctx context.Context,
+	conn *sql.Conn,
+	bottleneck string,
+) ([]referenceValue, error) {
+	rows, err := conn.QueryContext(ctx, selectGaugeLevelsSQL, bottleneck)
+	if err != nil {
+		return nil, err
+	}
+	defer rows.Close()
+
+	var levels []referenceValue
+
+loop:
+	for rows.Next() {
+		var what string
+		var value int
+		if err := rows.Scan(&what, &value); err != nil {
+			return nil, err
+		}
+		var level int
+		switch {
+		case strings.HasPrefix(what, "LDC"):
+			level = 0
+		case strings.HasPrefix(what, "MW"):
+			level = 1
+		case strings.HasPrefix(what, "HDC"):
+			level = 2
+		default:
+			return nil, fmt.Errorf("Unexpected reference level type '%s'", what)
+		}
+		for i := range levels {
+			if levels[i].level == level {
+				levels[i].value = float64(value)
+				continue loop
+			}
+		}
+		levels = append(levels, referenceValue{
+			level: level,
+			value: float64(value),
+		})
+	}
+
+	if err := rows.Err(); err != nil {
+		return nil, err
+	}
+
+	sort.Slice(levels, func(i, j int) bool { return levels[i].level < levels[j].level })
+
+	return levels, nil
+}
+
 func bottleneckAvailabilty(
 	_ interface{},
 	req *http.Request,
@@ -294,56 +380,8 @@
 
 	ctx := req.Context()
 
-	loadLNWLReferenceValues := func() ([]referenceValue, error) {
-		rows, err := conn.QueryContext(ctx, selectGaugeLevelsSQL, bn)
-		if err != nil {
-			return nil, err
-		}
-		defer rows.Close()
-
-		var levels []referenceValue
-
-	loop:
-		for rows.Next() {
-			var what string
-			var value int
-			if err := rows.Scan(&what, &value); err != nil {
-				return nil, err
-			}
-			var level int
-			switch {
-			case strings.HasPrefix(what, "LDC"):
-				level = 0
-			case strings.HasPrefix(what, "MW"):
-				level = 1
-			case strings.HasPrefix(what, "HDC"):
-				level = 2
-			default:
-				return nil, fmt.Errorf("Unexpected reference level type '%s'", what)
-			}
-			for i := range levels {
-				if levels[i].level == level {
-					levels[i].value = float64(value)
-					continue loop
-				}
-			}
-			levels = append(levels, referenceValue{
-				level: level,
-				value: float64(value),
-			})
-		}
-
-		if err := rows.Err(); err != nil {
-			return nil, err
-		}
-
-		sort.Slice(levels, func(i, j int) bool { return levels[i].level < levels[j].level })
-
-		return levels, nil
-	}
-
 	var lnwlRefs []referenceValue
-	if lnwlRefs, err = loadLNWLReferenceValues(); err != nil {
+	if lnwlRefs, err = loadLNWLReferenceValues(ctx, conn, bn); err != nil {
 		return
 	}
 
@@ -352,37 +390,11 @@
 			Code:    http.StatusNotFound,
 			Message: "No gauge reference values found for bottleneck",
 		}
-	}
-
-	loadDepthValues := func() (availMeasurements, error) {
-
-		rows, err := conn.QueryContext(
-			ctx, selectAvailableDepthSQL, bn, los, from, to)
-		if err != nil {
-			return nil, err
-		}
-		defer rows.Close()
-
-		var ms availMeasurements
-
-		for rows.Next() {
-			var m availMeasurement
-			if err := rows.Scan(&m.when, &m.depth, &m.value); err != nil {
-				return nil, err
-			}
-			m.when = m.when.UTC()
-			ms = append(ms, m)
-		}
-
-		if err := rows.Err(); err != nil {
-			return nil, err
-		}
-
-		return ms, nil
+		return
 	}
 
 	var ms availMeasurements
-	if ms, err = loadDepthValues(); err != nil {
+	if ms, err = loadDepthValues(ctx, conn, bn, los, from, to); err != nil {
 		return
 	}