From f01b9430243aa660e7a571b74bde0b7a32099751 Mon Sep 17 00:00:00 2001 From: Markus Pesch Date: Mon, 4 Mar 2019 17:50:41 +0100 Subject: [PATCH] add: internal pkgs --- pkg/cli/cli.go | 26 +------ pkg/internal/temperature/temperature.go | 99 +++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 23 deletions(-) create mode 100644 pkg/internal/temperature/temperature.go diff --git a/pkg/cli/cli.go b/pkg/cli/cli.go index 1ba138a..9096fa5 100644 --- a/pkg/cli/cli.go +++ b/pkg/cli/cli.go @@ -5,6 +5,8 @@ import ( "io" "text/tabwriter" + "git.cryptic.systems/fh-trier/go-flucky/pkg/internal/temperature" + "git.cryptic.systems/fh-trier/go-flucky/pkg/config" "git.cryptic.systems/fh-trier/go-flucky/pkg/types" ) @@ -103,29 +105,7 @@ func PrintSensors(cnf *config.FluckyConfig, w io.Writer) error { // PrintTemperatures displays a list of temperatures 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) - } - } + sensors := temperature.GetSensorsByTemperatures(temperatures, cnf) // sort temperature values for every sensor orderedTemperatures := make(map[string][]*types.Temperature) diff --git a/pkg/internal/temperature/temperature.go b/pkg/internal/temperature/temperature.go new file mode 100644 index 0000000..0129289 --- /dev/null +++ b/pkg/internal/temperature/temperature.go @@ -0,0 +1,99 @@ +package temperature + +import ( + "fmt" + "time" + + "git.cryptic.systems/fh-trier/go-flucky/pkg/config" + "git.cryptic.systems/fh-trier/go-flucky/pkg/types" +) + +// GetSensorsByTemperatures returns commulated list of sensors by temperature values +func GetSensorsByTemperatures(temperatures []*types.Temperature, cnf *config.FluckyConfig) []*types.Sensor { + sensors := []*types.Sensor{} + for _, temperature := range temperatures { + duplicated := false + foundSensor := &types.Sensor{} + for _, cnfSensor := range cnf.Sensors { + if temperature.SensorID == cnfSensor.SensorID { + foundSensor = cnfSensor + + // compare if id has already been added to list + for _, sensor := range sensors { + if cnfSensor.SensorID == sensor.SensorID { + duplicated = true + break + } + } + } + } + if duplicated { + continue + } + if foundSensor != nil { + sensors = append(sensors, foundSensor) + continue + } else { + sensors = append(sensors, &types.Sensor{SensorID: temperature.SensorID}) + } + } + return sensors +} + +// GetTemperaturesBetweenTimeRange returns a list of temperatures between a given time range +func GetTemperaturesBetweenTimeRange(from time.Time, till *time.Time, temperatures []*types.Temperature) ([]*types.Temperature, error) { + + if till != nil && from.After(*till) { + fFormat := from.Format("2006-01-02 15:04:05") + tFormat := till.Format("2006-01-02 15:04:05") + return nil, fmt.Errorf("%v is after %v", fFormat, tFormat) + } + + cachedTemperatures := []*types.Temperature{} + for _, temperature := range temperatures { + + if till == nil && temperature.TemperatureDate.After(from) { + cachedTemperatures = append(cachedTemperatures, temperature) + continue + } + + if temperature.TemperatureDate.After(from) && temperature.TemperatureDate.Before(*till) { + cachedTemperatures = append(cachedTemperatures, temperature) + } + } + return cachedTemperatures, nil +} + +// GetTemperaturesBySensors returns a list of temperatures given by the sensor id. +// If the sensor name, wire-id or id can not found in configured sensors, it would be skiped! +func GetTemperaturesBySensors(sensorNamesOrIDs []string, temperatures []*types.Temperature, cnf *config.FluckyConfig) []*types.Temperature { + cachedSensors := []*types.Sensor{} + cachedTemperatures := []*types.Temperature{} + + // match sensor name, wire-id or sensor id with configured sensors + // and append the matched sensor to the list + for _, sensor := range sensorNamesOrIDs { + for _, cs := range cnf.Sensors { + if cs.SensorID == sensor { + cachedSensors = append(cachedSensors, cs) + } + if cs.WireID != nil && *cs.WireID == sensor { + cachedSensors = append(cachedSensors, cs) + } + if cs.SensorName == sensor { + cachedSensors = append(cachedSensors, cs) + } + } + } + + // march all temperatures which matched with the sensor id + for _, temperature := range temperatures { + for _, cachedSensor := range cachedSensors { + if temperature.SensorID == cachedSensor.SensorID { + cachedTemperatures = append(cachedTemperatures, temperature) + } + } + } + + return cachedTemperatures +}