# HG changeset patch # User Sascha L. Teichmann # Date 1558534196 -7200 # Node ID e994565a59a1416a6be22f566bc50797eda7a62d # Parent 4ed940b0f0cacdc1ee06992936e7a2a236c18b14 waterlevel classification: Added 'breaks=,,...,' query parameter to set the class breaks for classification. diff -r 4ed940b0f0ca -r e994565a59a1 pkg/controllers/bottlenecks.go --- a/pkg/controllers/bottlenecks.go Wed May 22 15:57:37 2019 +0200 +++ b/pkg/controllers/bottlenecks.go Wed May 22 16:09:56 2019 +0200 @@ -370,6 +370,30 @@ return levels, nil } +func breaksToReferenceValue(breaks string) []referenceValue { + parts := strings.Split(breaks, ",") + values := map[float64]struct{}{} + for _, part := range parts { + part = strings.TrimSpace(part) + if v, err := strconv.ParseFloat(part, 64); err == nil { + values[v] = struct{}{} + } + } + refs := make([]referenceValue, len(values)) + var i int + for v := range values { + refs[i].value = v + i++ + } + sort.Slice(refs, func(i, j int) bool { + return refs[i].value < refs[j].value + }) + for i := range refs { + refs[i].level = i + } + return refs +} + func bottleneckAvailabilty( _ interface{}, req *http.Request, @@ -418,6 +442,13 @@ los = 1 } + var breaks []referenceValue + if b := req.FormValue("breaks"); b != "" { + breaks = breaksToReferenceValue(b) + } else { + breaks = afdRefs + } + ctx := req.Context() var lnwlRefs []referenceValue @@ -454,7 +485,7 @@ afd := ms.classify( from, to, - afdRefs, + breaks, (*availMeasurement).getDepth, ) @@ -496,9 +527,9 @@ }) } - for i := range afdRefs { + for i := range breaks { out.AFD = append(out.AFD, afdOutput{ - Value: afdRefs[i].value, + Value: breaks[i].value, Percent: afdPercents[i], }) } @@ -606,15 +637,22 @@ return } + var breaks []referenceValue + if b := req.FormValue("breaks"); b != "" { + breaks = breaksToReferenceValue(b) + } else { + breaks = afdRefs + } + rw.Header().Add("Content-Type", "text/csv") out := csv.NewWriter(rw) // label, classes, lnwl - record := make([]string, 1+1+len(afdRefs)+1) + record := make([]string, 1+1+len(breaks)+1) record[0] = "#label" record[1] = "# >= LDC [h]" - for i, v := range afdRefs { + for i, v := range breaks { if i == 0 { record[2] = fmt.Sprintf("# < %.2f [h]", v.value) } @@ -645,7 +683,7 @@ ranges := ms.classify( pfrom, pto, - afdRefs, + breaks, (*availMeasurement).getDepth, )