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:
2020-05-03 14:04:08 +02:00
parent 84d052184e
commit fb8d4dd5eb
137 changed files with 658 additions and 14048 deletions

View File

@ -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
}

View File

@ -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")
}
}