refactor: temperature
This commit is contained in:
73
pkg/cli/cli.go
Normal file
73
pkg/cli/cli.go
Normal file
@ -0,0 +1,73 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"text/tabwriter"
|
||||
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
||||
)
|
||||
|
||||
func PrintTemperatures(temperatures []*types.Temperature, cnf *config.FluckyConfig, w io.Writer) {
|
||||
|
||||
sensors := []*types.Sensor{}
|
||||
|
||||
// Search after sensors
|
||||
for _, temperature := range temperatures {
|
||||
found := false
|
||||
|
||||
// Search for the sensor that has acquired the measured value
|
||||
for _, sensor := range cnf.Sensors {
|
||||
if sensor.SensorID == temperature.SensorID {
|
||||
sensors = append(sensors, sensor)
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// If it was not found, pass only the sensor with the UUID on
|
||||
if !found {
|
||||
sensor := &types.Sensor{
|
||||
SensorID: temperature.SensorID,
|
||||
}
|
||||
sensors = append(sensors, sensor)
|
||||
}
|
||||
}
|
||||
|
||||
// sort temperature values for every sensor
|
||||
orderedTemperatures := make(map[string][]*types.Temperature)
|
||||
for _, temperature := range temperatures {
|
||||
orderedTemperatures[temperature.SensorID] = append(orderedTemperatures[temperature.SensorID], temperature)
|
||||
}
|
||||
|
||||
// declare tabwriter
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||
|
||||
// headlines
|
||||
for _, sensor := range sensors {
|
||||
fmt.Fprintf(tw, "%v\t", sensor.Name())
|
||||
}
|
||||
fmt.Fprintf(tw, "\n")
|
||||
|
||||
// find sensor with maximum temperature values
|
||||
maxLength := 0
|
||||
for _, orderedTemperature := range orderedTemperatures {
|
||||
if len(orderedTemperature) > maxLength {
|
||||
maxLength = len(orderedTemperature)
|
||||
}
|
||||
}
|
||||
|
||||
// body
|
||||
for i := 0; i < maxLength; i++ {
|
||||
for _, sensor := range sensors {
|
||||
if len(orderedTemperatures[sensor.SensorID]) > i {
|
||||
fmt.Fprintf(tw, "%3.3f\t", orderedTemperatures[sensor.SensorID][i].TemperatureValue)
|
||||
} else {
|
||||
fmt.Fprint(tw, "\t")
|
||||
}
|
||||
fmt.Fprint(tw, "\n")
|
||||
}
|
||||
}
|
||||
tw.Flush()
|
||||
}
|
Reference in New Issue
Block a user