fix: new implementation
changes: - Remove cli Some cli commands are not complete tested and are deprecated. - Daemon - Old version has a very bad implementation of how to verify, if the device or the sensors are in the database insert. The current implementation can be improved but this one is betten then the old one. - Remove complete the cache store implementation. Use a normal array and query the length and capacity to determine how the array cache must be cleaned. - Type Remove unused types and functions
This commit is contained in:
158
pkg/cli/cli.go
158
pkg/cli/cli.go
@ -1,158 +0,0 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"regexp"
|
||||
"text/tabwriter"
|
||||
|
||||
"github.com/volker-raschek/flucky/pkg/config"
|
||||
"github.com/volker-raschek/flucky/pkg/types"
|
||||
)
|
||||
|
||||
var (
|
||||
errorMeasuredValueIDNotValid = errors.New("Measured value id is not a valid uuid")
|
||||
errorSensorIDNotValid = errors.New("Sensor id is not a valid uuid")
|
||||
|
||||
validUUID = regexp.MustCompile("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
|
||||
)
|
||||
|
||||
// GetSensorIDsByMeasuredValues returns commulated list of sensors by measured values
|
||||
func GetSensorIDsByMeasuredValues(measuredValues []*types.MeasuredValue, cnf *config.Configuration) (map[string]*types.Sensor, error) {
|
||||
sensors := make(map[string]*types.Sensor)
|
||||
for _, measuredValue := range measuredValues {
|
||||
|
||||
// check if sensor id is valid
|
||||
if !validUUID.MatchString(measuredValue.ID) {
|
||||
return nil, errorMeasuredValueIDNotValid
|
||||
}
|
||||
|
||||
// check if sensor id is valid
|
||||
if !validUUID.MatchString(measuredValue.SensorID) {
|
||||
return nil, errorSensorIDNotValid
|
||||
}
|
||||
|
||||
if _, ok := sensors[measuredValue.SensorID]; !ok {
|
||||
sensors[measuredValue.SensorID] = cnf.GetSensorByID(measuredValue.SensorID)
|
||||
}
|
||||
}
|
||||
return sensors, nil
|
||||
}
|
||||
|
||||
// PrintRGBLEDs displays a list with all configured RGBLEDs
|
||||
func PrintRGBLEDs(cnf *config.Configuration, w io.Writer) {
|
||||
|
||||
// declare tabwriter
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||
|
||||
// headline
|
||||
fmt.Fprintln(tw, "name\tlocation\tblue\tgreen\tred\tenabled\taction")
|
||||
|
||||
for _, rgbled := range cnf.RGBLEDs {
|
||||
fmt.Fprintf(tw, "%v\t%v\t%v\t%v\t%v\t%v\t", rgbled.RGBLEDName, rgbled.RGBLEDLocation, *rgbled.BaseColorsToGPIO[types.BaseColorBlue], *rgbled.BaseColorsToGPIO[types.BaseColorGreen], *rgbled.BaseColorsToGPIO[types.BaseColorRed], rgbled.RGBLEDEnabled)
|
||||
|
||||
for action, color := range rgbled.ActionMapping {
|
||||
fmt.Fprintf(tw, "%v=%v,", action, color)
|
||||
}
|
||||
|
||||
fmt.Fprintf(tw, "\n")
|
||||
}
|
||||
|
||||
tw.Flush()
|
||||
}
|
||||
|
||||
// PrintSensors displays a list with all configured sensors
|
||||
func PrintSensors(cnf *config.Configuration, w io.Writer) error {
|
||||
|
||||
// declar tabwriter
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||
|
||||
fmt.Fprint(tw, "name\tlocation\ttype\twire-id\ti2c-bus\ti2c-address\tgpio\ttick-duration\tenabled\n")
|
||||
|
||||
for _, sensor := range cnf.Sensors {
|
||||
fmt.Fprintf(tw, "%v\t%v\t%v\t", sensor.Name, sensor.Location, sensor.Model)
|
||||
|
||||
if sensor.WireID != nil {
|
||||
fmt.Fprintf(tw, "%v\t", *sensor.WireID)
|
||||
} else {
|
||||
fmt.Fprintf(tw, "\t")
|
||||
}
|
||||
|
||||
if sensor.I2CBus != nil {
|
||||
fmt.Fprintf(tw, "%v\t", *sensor.I2CBus)
|
||||
} else {
|
||||
fmt.Fprintf(tw, "\t")
|
||||
}
|
||||
|
||||
if sensor.I2CAddress != nil {
|
||||
fmt.Fprintf(tw, "%#v\t", *sensor.I2CAddress)
|
||||
} else {
|
||||
fmt.Fprintf(tw, "\t")
|
||||
}
|
||||
|
||||
if sensor.GPIONumber != nil {
|
||||
fmt.Fprintf(tw, "%v\t", *sensor.GPIONumber)
|
||||
} else {
|
||||
fmt.Fprintf(tw, "\t")
|
||||
}
|
||||
|
||||
fmt.Fprintf(tw, "%v\t%v\n", sensor.TickDuration, sensor.Enabled)
|
||||
}
|
||||
|
||||
tw.Flush()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// PrintMeasuredValues displays a list of measured values
|
||||
func PrintMeasuredValues(measuredValues []*types.MeasuredValue, cnf *config.Configuration, w io.Writer) error {
|
||||
|
||||
sensors, err := GetSensorIDsByMeasuredValues(measuredValues, cnf)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// sort measured values for every sensor
|
||||
orderedMeasuredValues := make(map[string][]*types.MeasuredValue)
|
||||
for _, measuredValue := range measuredValues {
|
||||
orderedMeasuredValues[measuredValue.SensorID] = append(orderedMeasuredValues[measuredValue.SensorID], measuredValue)
|
||||
}
|
||||
|
||||
// declare tabwriter
|
||||
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||
|
||||
// headlines
|
||||
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 the most measured values
|
||||
maxLength := 0
|
||||
for _, orderedMeasuredValue := range orderedMeasuredValues {
|
||||
if len(orderedMeasuredValue) > maxLength {
|
||||
maxLength = len(orderedMeasuredValue)
|
||||
}
|
||||
}
|
||||
|
||||
// body
|
||||
for i := 0; i < maxLength; i++ {
|
||||
for _, sensor := range sensors {
|
||||
if len(orderedMeasuredValues[sensor.ID]) > i {
|
||||
fmt.Fprintf(tw, "%3.3f\t", orderedMeasuredValues[sensor.ID][i].Value)
|
||||
} else {
|
||||
fmt.Fprint(tw, "\t")
|
||||
}
|
||||
|
||||
}
|
||||
fmt.Fprint(tw, "\n")
|
||||
}
|
||||
tw.Flush()
|
||||
|
||||
return err
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/volker-raschek/flucky/pkg/config"
|
||||
"github.com/volker-raschek/flucky/pkg/types"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
type testCase struct {
|
||||
goldenConfig *config.Configuration
|
||||
goldenMeasuredValues []*types.MeasuredValue
|
||||
expectedSensors map[string]*types.Sensor
|
||||
expectedError error
|
||||
}
|
||||
|
||||
var (
|
||||
goldenSensors = []*types.Sensor{
|
||||
&types.Sensor{
|
||||
ID: "5b7c08c8-ee2a-4f88-b796-83658caae09d",
|
||||
},
|
||||
}
|
||||
|
||||
goldenSensorMap = map[string]*types.Sensor{
|
||||
"5b7c08c8-ee2a-4f88-b796-83658caae09d": goldenSensors[0],
|
||||
}
|
||||
|
||||
goldenConfig = &config.Configuration{
|
||||
Sensors: goldenSensors,
|
||||
}
|
||||
|
||||
goldenMeasuredValues = []*types.MeasuredValue{
|
||||
&types.MeasuredValue{
|
||||
ID: "4887b7cc-6b40-4293-bcc1-db1b5035a711",
|
||||
SensorID: "5b7c08c8-ee2a-4f88-b796-83658caae09d",
|
||||
},
|
||||
}
|
||||
|
||||
measuredValuesWrongID = []*types.MeasuredValue{
|
||||
&types.MeasuredValue{
|
||||
ID: "b2784dfb-c1a4-428d-8897-e09a18e7d94d",
|
||||
SensorID: "5b7c08c8-ee2a-4f88-b796-83658caae09d",
|
||||
},
|
||||
&types.MeasuredValue{
|
||||
ID: "81ca1a60-dfea-42f3-a7",
|
||||
SensorID: "5b7c08c8-ee2a-4f88-b796-83658caae09d",
|
||||
},
|
||||
}
|
||||
|
||||
measuredValuesWrongSensorID = []*types.MeasuredValue{
|
||||
&types.MeasuredValue{
|
||||
ID: "b2784dfb-c1a4-428d-8897-e09a18e7d94d",
|
||||
SensorID: "5b7c08c8-ee2a-4f88-b796-83658caae09d",
|
||||
},
|
||||
&types.MeasuredValue{
|
||||
ID: "b2784dfb-c1a4-428d-8897-e09a18e7d94d",
|
||||
SensorID: "5b7c08c8-ee2a-4f88-b79",
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
func TestGetSensorIDsByMeasuredValues(t *testing.T) {
|
||||
require := require.New(t)
|
||||
|
||||
testCases := []*testCase{
|
||||
&testCase{
|
||||
goldenConfig: goldenConfig,
|
||||
goldenMeasuredValues: goldenMeasuredValues,
|
||||
expectedSensors: goldenSensorMap,
|
||||
expectedError: nil,
|
||||
},
|
||||
&testCase{
|
||||
goldenConfig: goldenConfig,
|
||||
goldenMeasuredValues: measuredValuesWrongID,
|
||||
expectedSensors: nil,
|
||||
expectedError: errorMeasuredValueIDNotValid,
|
||||
},
|
||||
&testCase{
|
||||
goldenConfig: goldenConfig,
|
||||
goldenMeasuredValues: measuredValuesWrongSensorID,
|
||||
expectedSensors: nil,
|
||||
expectedError: errorSensorIDNotValid,
|
||||
},
|
||||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
actualSensors, err := GetSensorIDsByMeasuredValues(testCase.goldenMeasuredValues, testCase.goldenConfig)
|
||||
require.EqualValues(testCase.expectedError, err, "Not the expected error")
|
||||
require.EqualValues(testCase.expectedSensors, actualSensors, "Returned sensor list not expected")
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user