fix(pkg/cli): GetSensorIDsByMeasuredValues

This commit is contained in:
2020-01-11 12:10:26 +01:00
parent f1a4ade402
commit b595cf1ac8
3 changed files with 23 additions and 32 deletions

View File

@ -10,32 +10,11 @@ import (
)
// GetSensorsByMeasuredValues returns commulated list of sensors by measured values
func GetSensorsByMeasuredValues(measuredValues []*types.MeasuredValue, cnf *config.Configuration) []*types.Sensor {
sensors := []*types.Sensor{}
func GetSensorIDsByMeasuredValues(measuredValues []*types.MeasuredValue, cnf *config.Configuration) map[string]*types.Sensor {
sensors := make(map[string]*types.Sensor)
for _, measuredValue := range measuredValues {
duplicated := false
foundSensor := &types.Sensor{}
for _, cnfSensor := range cnf.Sensors {
if measuredValue.ID == cnfSensor.ID {
foundSensor = cnfSensor
// compare if id has already been added to list
for _, sensor := range sensors {
if cnfSensor.ID == sensor.ID {
duplicated = true
break
}
}
}
}
if duplicated {
continue
}
if foundSensor != nil {
sensors = append(sensors, foundSensor)
continue
} else {
sensors = append(sensors, &types.Sensor{ID: measuredValue.ID})
if _, ok := sensors[measuredValue.SensorID]; !ok {
sensors[measuredValue.SensorID] = cnf.GetSensorByID(measuredValue.SensorID)
}
}
return sensors
@ -109,26 +88,28 @@ func PrintSensors(cnf *config.Configuration, w io.Writer) error {
// PrintMeasuredValues displays a list of measured values
func PrintMeasuredValues(measuredValues []*types.MeasuredValue, cnf *config.Configuration, w io.Writer) {
sensors := GetSensorsByMeasuredValues(measuredValues, cnf)
sensors := GetSensorIDsByMeasuredValues(measuredValues, cnf)
// sort measured values for every sensor
orderedMeasuredValues := make(map[string][]*types.MeasuredValue)
for _, measuredValue := range measuredValues {
orderedMeasuredValues[measuredValue.ID] = append(orderedMeasuredValues[measuredValue.ID], measuredValue)
orderedMeasuredValues[measuredValue.SensorID] = append(orderedMeasuredValues[measuredValue.SensorID], measuredValue)
}
// declare tabwriter
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
// headlines
for i, sensor := range sensors {
i := 0
for _, sensor := range sensors {
fmt.Fprintf(tw, "%v\t", sensor.FullName())
if i == len(sensors)-1 {
fmt.Fprintf(tw, "\n")
}
i++
}
// find sensor with maximum temperature values
// find sensor with the most measured values
maxLength := 0
for _, orderedMeasuredValue := range orderedMeasuredValues {
if len(orderedMeasuredValue) > maxLength {