fix: gnu-cc, missing humidity table, restrict repository select
This commit is contained in:
parent
92a776f6ce
commit
8c1bd57ad5
1
Makefile
1
Makefile
@ -48,6 +48,7 @@ bin/linux/arm/5/${EXECUTABLE}: bindata
|
||||
go build -ldflags "-X main.version=${VERSION:v%=%}" -o ${@}
|
||||
|
||||
bin/linux/arm/7/${EXECUTABLE}: bindata
|
||||
CC=arm-linux-gnueabihf-gcc \
|
||||
CGO_ENABLED=1 \
|
||||
GOOS=linux \
|
||||
GOARCH=arm \
|
||||
|
@ -83,7 +83,7 @@ func preRunError(cmd *cobra.Command, args []string) error {
|
||||
Name: hostname,
|
||||
CreationDate: postgresTimeStamp,
|
||||
},
|
||||
DSN: "sqlite3:///var/log/flucky/sqlite.db?cache=shared&mode=memory&FKSupport=True",
|
||||
DSN: "sqlite3:///var/log/flucky/sqlite.db?cache=shared&mode=memory&foreign_keys=on",
|
||||
}
|
||||
|
||||
err = config.Write(&cnf, configFile)
|
||||
|
@ -164,6 +164,8 @@ func addSensor(cmd *cobra.Command, args []string) error {
|
||||
return err
|
||||
}
|
||||
|
||||
sensor.DeviceID = cnf.Device.ID
|
||||
|
||||
dsnURL, err := url.Parse(cnf.DSN)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -290,7 +292,7 @@ func listSensors(cmd *cobra.Command, args []string) error {
|
||||
}
|
||||
|
||||
// add sensor entry to list
|
||||
sensors, err := repo.GetSensors()
|
||||
sensors, err := repo.GetSensorsByDeviceID(cnf.Device.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -2,10 +2,10 @@ package daemon
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"git.cryptic.systems/volker.raschek/flucky/pkg/config"
|
||||
"git.cryptic.systems/volker.raschek/flucky/pkg/repository"
|
||||
@ -29,17 +29,39 @@ func Start(cnf *config.Config, flogger logger.Logger) error {
|
||||
return err
|
||||
}
|
||||
|
||||
repoSensors, err := repo.GetSensors()
|
||||
if err != nil {
|
||||
// Add
|
||||
repoDevice, err := repo.GetDevice(cnf.Device.ID)
|
||||
switch {
|
||||
case err != nil:
|
||||
return err
|
||||
case repoDevice == nil:
|
||||
err = repo.AddDevices(cnf.Device)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
repoDevice, err = repo.GetDevice(cnf.Device.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
repoSensors, err := repo.GetSensorsByDeviceID(repoDevice.ID)
|
||||
switch {
|
||||
case err != nil:
|
||||
return err
|
||||
case repoSensors == nil, len(repoSensors) <= 0:
|
||||
return fmt.Errorf("No sensors found")
|
||||
}
|
||||
|
||||
sensors := make([]sensor.Sensor, 0)
|
||||
for _, repoSensor := range repoSensors {
|
||||
if !repoSensor.Enabled {
|
||||
if !repoSensor.Enabled || repoSensor.DeviceID != repoDevice.ID {
|
||||
continue
|
||||
}
|
||||
|
||||
flogger.Debug("Found sensor %v", repoSensor.GetName())
|
||||
|
||||
sensor, err := sensor.New(repoSensor)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -48,7 +70,7 @@ func Start(cnf *config.Config, flogger logger.Logger) error {
|
||||
}
|
||||
|
||||
interruptChannel := make(chan os.Signal, 1)
|
||||
signal.Notify(interruptChannel, os.Kill, syscall.SIGTERM)
|
||||
signal.Notify(interruptChannel, os.Interrupt, os.Kill)
|
||||
|
||||
// Collection
|
||||
parentCtx := context.Background()
|
||||
@ -82,7 +104,7 @@ func Start(cnf *config.Config, flogger logger.Logger) error {
|
||||
measuredValues = append(measuredValues, measuredValue)
|
||||
|
||||
if cap(measuredValues) == len(measuredValues) {
|
||||
flogger.Debug("Flush cache")
|
||||
flogger.Debug("Flush cache with %v values", len(measuredValues))
|
||||
err := repo.AddMeasuredValues(measuredValues...)
|
||||
if err != nil {
|
||||
flogger.Error("%v", err)
|
||||
@ -90,16 +112,26 @@ func Start(cnf *config.Config, flogger logger.Logger) error {
|
||||
measuredValues = make([]*types.MeasuredValue, 0, 10)
|
||||
}
|
||||
|
||||
case <-interruptChannel:
|
||||
case signal := <-interruptChannel:
|
||||
cancel()
|
||||
close(measuredValueChannel)
|
||||
|
||||
flogger.Info("Stopping daemon: Received process signal %v", signal.String())
|
||||
|
||||
flogger.Debug("Flush cache with %v remaining values", len(measuredValues))
|
||||
|
||||
err := repo.AddMeasuredValues(measuredValues...)
|
||||
if err != nil {
|
||||
flogger.Error("%v", err)
|
||||
}
|
||||
|
||||
break
|
||||
flogger.Debug("Close repository")
|
||||
err = repo.Close()
|
||||
if err != nil {
|
||||
flogger.Error("%v", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ import (
|
||||
// Database is a general interface for a database backend like postgres, oracle
|
||||
// or sqlite
|
||||
type Database interface {
|
||||
Close() error
|
||||
DeleteDevices(ctx context.Context, deviceIDs ...string) error
|
||||
DeleteSensors(ctx context.Context, sensorIDs ...string) error
|
||||
InsertDevices(ctx context.Context, devices ...*types.Device) error
|
||||
@ -120,5 +121,4 @@ func New(dsnURL *url.URL, flogger logger.Logger) (Database, error) {
|
||||
}
|
||||
|
||||
return database, nil
|
||||
|
||||
}
|
||||
|
@ -17,6 +17,12 @@ type Postgres struct {
|
||||
queries map[string]string
|
||||
}
|
||||
|
||||
// Close closes the database and prevents new queries from starting. Close then
|
||||
// waits for all queries that have started processing on the server to finish.
|
||||
func (postgres *Postgres) Close() error {
|
||||
return postgres.dbo.Close()
|
||||
}
|
||||
|
||||
// DeleteDevices from the database
|
||||
func (postgres *Postgres) DeleteDevices(ctx context.Context, deviceIDs ...string) error {
|
||||
queryFile := "deleteDevice.sql"
|
||||
@ -228,7 +234,7 @@ func (postgres *Postgres) Scheme(ctx context.Context) error {
|
||||
for _, query := range []string{
|
||||
postgres.queries["createTableDevices.sql"],
|
||||
postgres.queries["createTableSensors.sql"],
|
||||
postgres.queries["createTableHumidites.sql"],
|
||||
postgres.queries["createTableHumidities.sql"],
|
||||
postgres.queries["createTablePressures.sql"],
|
||||
postgres.queries["createTableTemperatures.sql"],
|
||||
} {
|
||||
|
@ -16,6 +16,12 @@ type SQLite struct {
|
||||
queries map[string]string
|
||||
}
|
||||
|
||||
// Close closes the database and prevents new queries from starting. Close then
|
||||
// waits for all queries that have started processing on the server to finish.
|
||||
func (sqlite *SQLite) Close() error {
|
||||
return sqlite.dbo.Close()
|
||||
}
|
||||
|
||||
// DeleteDevices from the database
|
||||
func (sqlite *SQLite) DeleteDevices(ctx context.Context, deviceIDs ...string) error {
|
||||
queryFile := "deleteDevice.sql"
|
||||
@ -227,7 +233,7 @@ func (sqlite *SQLite) Scheme(ctx context.Context) error {
|
||||
for _, query := range []string{
|
||||
sqlite.queries["createTableDevices.sql"],
|
||||
sqlite.queries["createTableSensors.sql"],
|
||||
sqlite.queries["createTableHumidites.sql"],
|
||||
sqlite.queries["createTableHumidities.sql"],
|
||||
sqlite.queries["createTablePressures.sql"],
|
||||
sqlite.queries["createTableTemperatures.sql"],
|
||||
} {
|
||||
|
@ -31,6 +31,13 @@ func (repo *Repository) AddSensors(sensors ...*types.Sensor) error {
|
||||
return repo.database.InsertSensors(context.Background(), sensors...)
|
||||
}
|
||||
|
||||
// Close closes the repository and prevents new queries from starting. Close
|
||||
// then waits for all queries that have started processing on the server to
|
||||
// finish.
|
||||
func (repo *Repository) Close() error {
|
||||
return repo.database.Close()
|
||||
}
|
||||
|
||||
// DisableSensorsByNames disable all sensors which match bei their name
|
||||
func (repo *Repository) DisableSensorsByNames(sensorNames ...string) error {
|
||||
sensors, err := repo.GetSensors()
|
||||
|
@ -278,7 +278,7 @@ func testBackend(t *testing.T, repo *repository.Repository) {
|
||||
{
|
||||
ID: "2e5a297a-3da0-46ae-89d2-0fcab0f1d5f7",
|
||||
Value: 32,
|
||||
ValueType: "temperature",
|
||||
ValueType: "humidity",
|
||||
Date: *timeNow(require),
|
||||
SensorID: "8c74397f-8e60-4c9d-960d-3197747cef9a",
|
||||
CreationDate: *timeNow(require),
|
||||
@ -287,7 +287,7 @@ func testBackend(t *testing.T, repo *repository.Repository) {
|
||||
{
|
||||
ID: "d69f1b62-0c6c-4058-b42c-4a2821bd220c",
|
||||
Value: 38,
|
||||
ValueType: "temperature",
|
||||
ValueType: "pressure",
|
||||
Date: *timeNow(require),
|
||||
SensorID: "8c74397f-8e60-4c9d-960d-3197747cef9a",
|
||||
CreationDate: *timeNow(require),
|
||||
|
Loading…
Reference in New Issue
Block a user