# HG changeset patch # User Sascha L. Teichmann # Date 1558619399 -7200 # Node ID 0a666ba899faf13406f10a6cb89bc3b6612d61d7 # Parent 6592396f5061a160d7433c04d926989ffb3451c9 fairway availabilty: removed level from class breaks. diff -r 6592396f5061 -r 0a666ba899fa pkg/controllers/bottlenecks.go --- a/pkg/controllers/bottlenecks.go Thu May 23 15:33:56 2019 +0200 +++ b/pkg/controllers/bottlenecks.go Thu May 23 15:49:59 2019 +0200 @@ -100,11 +100,6 @@ ) type ( - referenceValue struct { - level int - value float64 - } - availMeasurement struct { when time.Time depth int16 @@ -116,9 +111,9 @@ ) // afdRefs are the typical available fairway depth reference values. -var afdRefs = []referenceValue{ - {0, 230}, - {1, 250}, +var afdRefs = []float64{ + 230, + 250, } func (measurement *availMeasurement) getDepth() float64 { @@ -147,7 +142,7 @@ func (measurements availMeasurements) classify( from, to time.Time, - breaks []referenceValue, + breaks []float64, access func(*availMeasurement) float64, ) []time.Duration { @@ -160,10 +155,10 @@ values := make([]time.Time, len(classes)) // Add sentinels - classes[0] = breaks[0].value - 9999 - classes[len(classes)-1] = breaks[len(breaks)-1].value + 9999 + classes[0] = breaks[0] - 9999 + classes[len(classes)-1] = breaks[len(breaks)-1] + 9999 for i := range breaks { - classes[i+1] = breaks[i].value + classes[i+1] = breaks[i] } idx := sort.Search(len(measurements), func(i int) bool { @@ -328,7 +323,7 @@ ctx context.Context, conn *sql.Conn, bottleneck string, -) ([]referenceValue, error) { +) ([]float64, error) { var value float64 err := conn.QueryRowContext(ctx, selectGaugeLDCSQL, bottleneck).Scan(&value) @@ -339,31 +334,32 @@ return nil, err } log.Printf("info: LDC = %.2f\n", value) - return []referenceValue{{0, value}}, nil + return []float64{value}, nil } -func breaksToReferenceValue(breaks string) []referenceValue { +func breaksToReferenceValue(breaks string) []float64 { parts := strings.Split(breaks, ",") - values := map[float64]struct{}{} + var values []float64 + for _, part := range parts { part = strings.TrimSpace(part) if v, err := strconv.ParseFloat(part, 64); err == nil { - values[v] = struct{}{} + values = append(values, v) } } - refs := make([]referenceValue, len(values)) - var i int - for v := range values { - refs[i].value = v - i++ + + sort.Float64s(values) + + // dedup + for i := 1; i < len(values); { + if values[i-1] == values[i] { + copy(values[i:], values[i+1:]) + values = values[:len(values)-1] + } else { + 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 + return values } func bottleneckAvailabilty( @@ -414,7 +410,7 @@ los = 1 } - var breaks []referenceValue + var breaks []float64 if b := req.FormValue("breaks"); b != "" { breaks = breaksToReferenceValue(b) } else { @@ -423,7 +419,7 @@ ctx := req.Context() - var ldcRefs []referenceValue + var ldcRefs []float64 if ldcRefs, err = loadLDCReferenceValue(ctx, conn, bn); err != nil { return } @@ -485,14 +481,14 @@ for i := range ldcRefs { out.LNWL = append(out.LNWL, lnwlOutput{ Level: "LDC", - Value: ldcRefs[i].value, + Value: ldcRefs[i], Percent: lnwlPercents[i], }) } for i := range breaks { out.AFD = append(out.AFD, afdOutput{ - Value: breaks[i].value, + Value: breaks[i], Percent: afdPercents[i], }) } @@ -613,7 +609,7 @@ return } - var breaks []referenceValue + var breaks []float64 if b := req.FormValue("breaks"); b != "" { breaks = breaksToReferenceValue(b) } else { @@ -630,9 +626,9 @@ record[1] = "# >= LDC [h]" for i, v := range breaks { if i == 0 { - record[2] = fmt.Sprintf("# < %.2f [h]", v.value) + record[2] = fmt.Sprintf("# < %.2f [h]", v) } - record[i+3] = fmt.Sprintf("# >= %.2f [h]", v.value) + record[i+3] = fmt.Sprintf("# >= %.2f [h]", v) } if err := out.Write(record); err != nil { diff -r 6592396f5061 -r 0a666ba899fa pkg/controllers/stretches.go --- a/pkg/controllers/stretches.go Thu May 23 15:33:56 2019 +0200 +++ b/pkg/controllers/stretches.go Thu May 23 15:49:59 2019 +0200 @@ -58,8 +58,8 @@ fullStretchBottleneck struct { *stretchBottleneck measurements availMeasurements - ldc []referenceValue - breaks []referenceValue + ldc []float64 + breaks []float64 access func(*availMeasurement) float64 } ) @@ -79,7 +79,7 @@ bn *stretchBottleneck, los int, from, to time.Time, - depthbreaks, widthbreaks []referenceValue, + depthbreaks, widthbreaks []float64, ) (*fullStretchBottleneck, error) { measurements, err := loadDepthValues(ctx, conn, bn.name, los, from, to) if err != nil { @@ -91,7 +91,7 @@ } var access func(*availMeasurement) float64 - var breaks []referenceValue + var breaks []float64 switch bn.limiting { case "width": @@ -348,7 +348,7 @@ interval := intervals[mode](from, to) - var breaks []referenceValue + var breaks []float64 if useDepth { breaks = depthbreaks @@ -392,9 +392,9 @@ record[i+3] = fmt.Sprintf("# >= break_%d", i+1) } else { if i == 0 { - record[2] = fmt.Sprintf("# < %.2f [h]", v.value) + record[2] = fmt.Sprintf("# < %.2f [h]", v) } - record[i+3] = fmt.Sprintf("# >= %.2f [h]", v.value) + record[i+3] = fmt.Sprintf("# >= %.2f [h]", v) } }