fix: configuration pkg
This commit is contained in:
parent
60fa83244e
commit
c437127531
17
cmd/cmd.go
17
cmd/cmd.go
@ -1,15 +1,11 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/cmd/config"
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/cmd/humidity"
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/cmd/remote"
|
"git.cryptic.systems/fh-trier/go-flucky/cmd/remote"
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/cmd/sensor"
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/cmd/temperature"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var configDir string
|
var cfg string
|
||||||
|
|
||||||
var rootCmd = &cobra.Command{
|
var rootCmd = &cobra.Command{
|
||||||
Use: "flucky",
|
Use: "flucky",
|
||||||
@ -20,13 +16,12 @@ var rootCmd = &cobra.Command{
|
|||||||
func Execute(version string) {
|
func Execute(version string) {
|
||||||
rootCmd.Version = version
|
rootCmd.Version = version
|
||||||
|
|
||||||
rootCmd.PersistentFlags().StringVarP(&configDir, "config", "c", "/etc/flucky", "The base directory for all configuration files.")
|
rootCmd.PersistentFlags().StringVar(&cfg, "config", "/etc/flucky/config.json", "Config file")
|
||||||
|
|
||||||
config.InitCmd(rootCmd, configDir)
|
// humidity.InitCmd(rootCmd, configDir)
|
||||||
humidity.InitCmd(rootCmd, configDir)
|
remote.InitCmd(rootCmd, cfg)
|
||||||
remote.InitCmd(rootCmd, configDir)
|
// sensor.InitCmd(rootCmd, configDir)
|
||||||
sensor.InitCmd(rootCmd, configDir)
|
// temperature.InitCmd(rootCmd, configDir)
|
||||||
temperature.InitCmd(rootCmd, configDir)
|
|
||||||
|
|
||||||
rootCmd.Execute()
|
rootCmd.Execute()
|
||||||
}
|
}
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
package config
|
|
||||||
|
|
||||||
import (
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
)
|
|
||||||
|
|
||||||
var configDir string
|
|
||||||
|
|
||||||
var configCmd = &cobra.Command{
|
|
||||||
Use: "config",
|
|
||||||
Short: "Manage Configuration",
|
|
||||||
Args: cobra.ExactArgs(2),
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
if args[0] == "device.name" {
|
|
||||||
config.DeviceName(args[1], configDir)
|
|
||||||
} else if args[0] == "device.location" {
|
|
||||||
config.DeviceLocation(args[1], configDir)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func InitCmd(cmd *cobra.Command, c string) {
|
|
||||||
configDir = c
|
|
||||||
|
|
||||||
cmd.AddCommand(configCmd)
|
|
||||||
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
package config
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
)
|
|
||||||
|
|
||||||
var force bool
|
|
||||||
var logDir string
|
|
||||||
|
|
||||||
var createConfigCmd = &cobra.Command{
|
|
||||||
Use: "create",
|
|
||||||
Short: "create",
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
|
|
||||||
if err := config.Create(configDir, logDir, force); err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
configCmd.AddCommand(createConfigCmd)
|
|
||||||
createConfigCmd.Flags().BoolVarP(&force, "force", "f", false, "Force the creation of a new configuration")
|
|
||||||
createConfigCmd.Flags().StringVarP(&logDir, "log-dir", "l", "/var/log/flucky", "Directory for logfiles")
|
|
||||||
}
|
|
@ -3,8 +3,7 @@ package remote
|
|||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/remote"
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,19 +15,35 @@ var addRemoteCmd = &cobra.Command{
|
|||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
remoteObject := types.Remote{
|
// read configuration
|
||||||
|
fc, err := config.Read(cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// create new remote struct
|
||||||
|
remote := config.Remote{
|
||||||
Name: args[0],
|
Name: args[0],
|
||||||
Address: args[1],
|
Address: args[1],
|
||||||
Enabled: enabled,
|
Enabled: enabled,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := remote.Add(&remoteObject, configDir); err != nil {
|
// // add remote entry to list
|
||||||
log.Fatal(err)
|
err = fc.AddRemote(&remote)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// save new configuration
|
||||||
|
err = config.Write(fc, cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
remoteCmd.AddCommand(addRemoteCmd)
|
remoteCmd.AddCommand(addRemoteCmd)
|
||||||
addRemoteCmd.Flags().BoolVarP(&enabled, "enabled", "e", true, "Enable Remote Link")
|
addRemoteCmd.Flags().BoolVarP(&enabled, "enable", "e", true, "Enable")
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ package remote
|
|||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/remote"
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -13,9 +13,24 @@ var disableRemoteCmd = &cobra.Command{
|
|||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
if err := remote.Disable(args[0], configDir); err != nil {
|
// read configuration
|
||||||
log.Fatal(err)
|
fc, err := config.Read(cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// disnable remote address
|
||||||
|
err = fc.DisableRemote(args[0])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// save new configuration
|
||||||
|
err = config.Write(fc, cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ package remote
|
|||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/remote"
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -13,8 +13,22 @@ var enableRemoteCmd = &cobra.Command{
|
|||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
if err := remote.Enable(args[0], configDir); err != nil {
|
// read configuration
|
||||||
log.Fatal(err)
|
fc, err := config.Read(cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// enable remote address
|
||||||
|
err = fc.EnableRemote(args[0])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// save new configuration
|
||||||
|
err = config.Write(fc, cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/remote"
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,14 +16,26 @@ var listRemoteCmd = &cobra.Command{
|
|||||||
Aliases: []string{"ls"},
|
Aliases: []string{"ls"},
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
if err := remote.Print(os.Stdout, configDir, quiet); err != nil {
|
// read configuration
|
||||||
log.Fatal(err)
|
fc, err := config.Read(cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// print all configured remote addresses on stdout
|
||||||
|
err = fc.PrintRemotes(os.Stdout)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// save new configuration
|
||||||
|
err = config.Write(fc, cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
remoteCmd.AddCommand(listRemoteCmd)
|
remoteCmd.AddCommand(listRemoteCmd)
|
||||||
|
|
||||||
listRemoteCmd.Flags().BoolVarP(&quiet, "quiet", "q", false, "List only sensor id's")
|
|
||||||
}
|
}
|
||||||
|
@ -4,15 +4,15 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var configDir string
|
var cfg string
|
||||||
|
|
||||||
var remoteCmd = &cobra.Command{
|
var remoteCmd = &cobra.Command{
|
||||||
Use: "remote",
|
Use: "remote",
|
||||||
Short: "Manage Remote Server",
|
Short: "Manage Remote Server",
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitCmd(cmd *cobra.Command, cnf string) {
|
func InitCmd(cmd *cobra.Command, config string) {
|
||||||
configDir = cnf
|
cfg = config
|
||||||
|
|
||||||
cmd.AddCommand(remoteCmd)
|
cmd.AddCommand(remoteCmd)
|
||||||
}
|
}
|
||||||
|
@ -3,32 +3,37 @@ package remote
|
|||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/remote"
|
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var all bool
|
|
||||||
|
|
||||||
var rmRemoteCmd = &cobra.Command{
|
var rmRemoteCmd = &cobra.Command{
|
||||||
Use: "rm",
|
Use: "rm",
|
||||||
Short: "Remove Remote Server",
|
Short: "Remove Remote Server",
|
||||||
Aliases: []string{"remove"},
|
Aliases: []string{"remove"},
|
||||||
Args: cobra.RangeArgs(0, 1),
|
Args: cobra.ExactArgs(1),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
|
||||||
if all {
|
// read configuration
|
||||||
if err := remote.RemoveAll(configDir); err != nil {
|
fc, err := config.Read(cfg)
|
||||||
log.Fatal(err)
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if err := remote.Remove(args[0], configDir); err != nil {
|
// add remote entry to list
|
||||||
log.Fatal(err)
|
err = fc.RemoveRemote(args[0])
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// save new configuration
|
||||||
|
err = config.Write(fc, cfg)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
remoteCmd.AddCommand(rmRemoteCmd)
|
remoteCmd.AddCommand(rmRemoteCmd)
|
||||||
rmRemoteCmd.Flags().BoolVarP(&all, "all", "a", false, "Select all remote connections")
|
|
||||||
}
|
}
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
package remote
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/httpcall"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
)
|
|
||||||
|
|
||||||
var force bool
|
|
||||||
|
|
||||||
var syncRemoteCmd = &cobra.Command{
|
|
||||||
Use: "sync",
|
|
||||||
Aliases: []string{"synchronize"},
|
|
||||||
Short: "Synchronise Device Values with Remote Servers",
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
|
|
||||||
if err := httpcall.SyncDevice(configDir, force); err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
remoteCmd.AddCommand(syncRemoteCmd)
|
|
||||||
syncRemoteCmd.Flags().BoolVarP(&force, "force", "f", false, "Include disabled remote links")
|
|
||||||
}
|
|
@ -1,9 +1,6 @@
|
|||||||
package sensor
|
package sensor
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/sensor"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -15,9 +12,7 @@ var addSensorCmd = &cobra.Command{
|
|||||||
Short: "Add Sensor",
|
Short: "Add Sensor",
|
||||||
Args: cobra.ExactArgs(3),
|
Args: cobra.ExactArgs(3),
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
if err := sensor.Add(&args[0], &sensorLocation, &args[1], &wireID, &args[2], wirePath, configDir, &enabled); err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,136 +1,68 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"regexp"
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
"git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||||
|
|
||||||
"github.com/satori/go.uuid"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var configFilename = "config.json"
|
var validUUID = regexp.MustCompile("^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$")
|
||||||
var humiditiesLogfileName = "humidities.log"
|
|
||||||
var temperatureLogfileName = "temperature.log"
|
|
||||||
|
|
||||||
func Create(configDir, logDir string, force bool) error {
|
type Config interface {
|
||||||
|
AddSensor(sensor *types.Sensor) error
|
||||||
configPath := filepath.Join(configDir, configFilename)
|
AddRemote(remote *Remote) error
|
||||||
humiditiesLogfile := filepath.Join(logDir, humiditiesLogfileName)
|
DisableRemote(nameOrUUID string) error
|
||||||
temperaturLogfile := filepath.Join(logDir, temperatureLogfileName)
|
DisableSensor(nameOrUUID string) error
|
||||||
|
EnableRemote(nameOrUUID string) error
|
||||||
config := &types.Config{
|
EnableSensor(nameOrUUID string) error
|
||||||
DeviceID: uuid.NewV4().String(),
|
GetDevice() *Device
|
||||||
HumidityLogfile: humiditiesLogfile,
|
GetRemotes() []*Remote
|
||||||
TemperatureLogfile: temperaturLogfile,
|
GetSensors() []*types.Sensor
|
||||||
|
JSONDecoder(r io.Reader) error
|
||||||
|
JSONWriter(w io.Writer) error
|
||||||
|
RemoveSensor(nameOrUUID string) error
|
||||||
|
RemoveRemote(nameOrUUID string) error
|
||||||
|
SetDevice(device *Device)
|
||||||
|
ToJSON() (string, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If no config file exists, create a new one on the location
|
// Read the configuration file
|
||||||
if !force {
|
func Read(configFile string) (*FluckyConfig, error) {
|
||||||
if _, err := os.Stat(configPath); !os.IsNotExist(err) {
|
|
||||||
return fmt.Errorf("%v already exists. Use -f to overwrite", configPath)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
fc := &FluckyConfig{}
|
||||||
err := os.MkdirAll(configDir, os.ModePerm)
|
|
||||||
|
f, err := os.Open(configFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Can not create directory: %v", err)
|
return nil, fmt.Errorf("Can not open file %v: %v", configFile, err)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Create(configPath)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Can not create config: %v", err)
|
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
config.JSONWriter(f)
|
err = fc.JSONDecoder(f)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Can not decode json file %v: %v", configFile, err)
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return fc, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeviceName(deviceName, configDir string) error {
|
// Write the configuration into a file, specified by the configuration filepath
|
||||||
cnf, err := Read(configDir)
|
func Write(cfg Config, configFile string) error {
|
||||||
|
|
||||||
|
f, err := os.Create(configFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
cnf.DeviceName = deviceName
|
err = cfg.JSONWriter(f)
|
||||||
|
|
||||||
err = Write(cnf, configDir)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func DeviceLocation(deviceLocation, configDir string) error {
|
|
||||||
cnf, err := Read(configDir)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
cnf.DeviceLocation = deviceLocation
|
|
||||||
|
|
||||||
err = Write(cnf, configDir)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Read(configDir string) (*types.Config, error) {
|
|
||||||
|
|
||||||
configPath := filepath.Join(configDir, configFilename)
|
|
||||||
|
|
||||||
var config types.Config
|
|
||||||
|
|
||||||
// If no config file exists, return an error
|
|
||||||
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
|
||||||
return nil, fmt.Errorf("Can not find config %v: %v", configPath, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// open config file
|
|
||||||
jsonFile, err := os.Open(configPath)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Can not open file %v: %v", configPath, err)
|
|
||||||
}
|
|
||||||
defer jsonFile.Close()
|
|
||||||
|
|
||||||
jsonParser := json.NewDecoder(jsonFile)
|
|
||||||
if err := jsonParser.Decode(&config); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &config, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func Write(config *types.Config, configDir string) error {
|
|
||||||
|
|
||||||
configPath := filepath.Join(configDir, configFilename)
|
|
||||||
|
|
||||||
// If no config file exists, return an error
|
|
||||||
if _, err := os.Stat(configPath); os.IsNotExist(err) {
|
|
||||||
return fmt.Errorf("Can not find config %v: %v", configPath, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// open config file
|
|
||||||
jsonFile, err := os.Create(configPath)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Can not open file %v: %v", configPath, err)
|
|
||||||
}
|
|
||||||
defer jsonFile.Close()
|
|
||||||
|
|
||||||
err = config.JSONWriter(jsonFile)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
7
pkg/config/device.go
Normal file
7
pkg/config/device.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type Device struct {
|
||||||
|
DeviceID string `json:"device_id"`
|
||||||
|
DeviceName string `json:"device_name"`
|
||||||
|
DeviceLocation string `json:"device_location"`
|
||||||
|
}
|
312
pkg/config/fluckyconfig.go
Normal file
312
pkg/config/fluckyconfig.go
Normal file
@ -0,0 +1,312 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"text/tabwriter"
|
||||||
|
|
||||||
|
"github.com/satori/go.uuid"
|
||||||
|
|
||||||
|
"git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FluckyConfig dasd
|
||||||
|
type FluckyConfig struct {
|
||||||
|
Device *Device `json:"device"`
|
||||||
|
Sensors []*types.Sensor `json:"sensors"`
|
||||||
|
Remotes []*Remote `json:"remotes"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddSensor add a new sensor
|
||||||
|
func (fc *FluckyConfig) AddSensor(sensor *types.Sensor) error {
|
||||||
|
|
||||||
|
// check if sensorID is a valid UUID string
|
||||||
|
if !validUUID.MatchString(sensor.SensorID) {
|
||||||
|
sensor.SensorID = uuid.NewV4().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if sensor name and sensor uuid already exists
|
||||||
|
for _, s := range fc.Sensors {
|
||||||
|
if s.SensorName == sensor.SensorName {
|
||||||
|
return fmt.Errorf("Sensor %v already exists", s.SensorName)
|
||||||
|
}
|
||||||
|
|
||||||
|
if s.SensorID == sensor.SensorID {
|
||||||
|
return fmt.Errorf("Remote %v with UUID %v already exists", s.SensorName, s.SensorID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fc.Sensors = append(fc.Sensors, sensor)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddRemote add a new remote address
|
||||||
|
func (fc *FluckyConfig) AddRemote(remote *Remote) error {
|
||||||
|
|
||||||
|
// check if remoteID is a valid UUID string
|
||||||
|
if !validUUID.MatchString(remote.RemoteID) {
|
||||||
|
remote.RemoteID = uuid.NewV4().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if remote name or remiteid already exists
|
||||||
|
for _, r := range fc.Remotes {
|
||||||
|
if r.Name == remote.Name {
|
||||||
|
return fmt.Errorf("Remote %v -> %v already exists", r.Name, r.Address)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.RemoteID == remote.RemoteID {
|
||||||
|
return fmt.Errorf("Remote %v with UUID %v already exists", r.Name, r.RemoteID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fc.Remotes = append(fc.Remotes, remote)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DisableRemote disables a remote address by its name or its unique UUID
|
||||||
|
func (fc *FluckyConfig) DisableRemote(nameOrUUID string) error {
|
||||||
|
found := false
|
||||||
|
|
||||||
|
for _, remote := range fc.Remotes {
|
||||||
|
|
||||||
|
// disable sensor matched after name
|
||||||
|
if !validUUID.MatchString(nameOrUUID) &&
|
||||||
|
remote.Name == nameOrUUID {
|
||||||
|
remote.Enabled = false
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove machted uuid
|
||||||
|
if validUUID.MatchString(nameOrUUID) &&
|
||||||
|
remote.RemoteID == nameOrUUID {
|
||||||
|
remote.Enabled = false
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
return fmt.Errorf("Can not found sensor %v", nameOrUUID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DisableSensor disables a sensor by its name or its unique UUID
|
||||||
|
func (fc *FluckyConfig) DisableSensor(nameOrUUID string) error {
|
||||||
|
found := false
|
||||||
|
|
||||||
|
for _, sensor := range fc.Sensors {
|
||||||
|
|
||||||
|
// disable sensor matched after name
|
||||||
|
if !validUUID.MatchString(nameOrUUID) &&
|
||||||
|
*sensor.SensorName == nameOrUUID {
|
||||||
|
*sensor.SensorEnabled = false
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove machted uuid
|
||||||
|
if validUUID.MatchString(nameOrUUID) &&
|
||||||
|
sensor.SensorID == nameOrUUID {
|
||||||
|
*sensor.SensorEnabled = false
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
return fmt.Errorf("Can not found sensor %v", nameOrUUID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EnableRemote enable a remote address by its name or its unique UUID
|
||||||
|
func (fc *FluckyConfig) EnableRemote(nameOrUUID string) error {
|
||||||
|
found := false
|
||||||
|
|
||||||
|
for _, remote := range fc.Remotes {
|
||||||
|
|
||||||
|
// disable sensor matched after name
|
||||||
|
if !validUUID.MatchString(nameOrUUID) &&
|
||||||
|
remote.Name == nameOrUUID {
|
||||||
|
remote.Enabled = true
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove machted uuid
|
||||||
|
if validUUID.MatchString(nameOrUUID) &&
|
||||||
|
remote.RemoteID == nameOrUUID {
|
||||||
|
remote.Enabled = true
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
return fmt.Errorf("Can not found sensor %v", nameOrUUID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EnableSensor enables a sensor by its name or its unique UUID
|
||||||
|
func (fc *FluckyConfig) EnableSensor(nameOrUUID string) error {
|
||||||
|
found := false
|
||||||
|
|
||||||
|
for _, sensor := range fc.Sensors {
|
||||||
|
|
||||||
|
// disable sensor matched after name
|
||||||
|
if !validUUID.MatchString(nameOrUUID) &&
|
||||||
|
*sensor.SensorName == nameOrUUID {
|
||||||
|
*sensor.SensorEnabled = true
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove machted uuid
|
||||||
|
if validUUID.MatchString(nameOrUUID) &&
|
||||||
|
sensor.SensorID == nameOrUUID {
|
||||||
|
*sensor.SensorEnabled = true
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
return fmt.Errorf("Can not found sensor %v", nameOrUUID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDevice returns device informations
|
||||||
|
func (fc *FluckyConfig) GetDevice() *Device {
|
||||||
|
return fc.Device
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRemotes returns an array if remote struct poniter
|
||||||
|
func (fc *FluckyConfig) GetRemotes() []*Remote {
|
||||||
|
return fc.Remotes
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSensors returns an array if remote struct poniter
|
||||||
|
func (fc *FluckyConfig) GetSensors() []*types.Sensor {
|
||||||
|
return fc.Sensors
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSONDecoder decode a JSON string from a reader into a struct
|
||||||
|
func (fc *FluckyConfig) JSONDecoder(r io.Reader) error {
|
||||||
|
jsonDecoder := json.NewDecoder(r)
|
||||||
|
if err := jsonDecoder.Decode(&fc); err != nil {
|
||||||
|
return fmt.Errorf("Can not unmarshal JSON: %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSONWriter needs a writer to write the struct into JSON string
|
||||||
|
func (fc *FluckyConfig) JSONWriter(w io.Writer) error {
|
||||||
|
encoder := json.NewEncoder(w)
|
||||||
|
encoder.SetIndent("", " ")
|
||||||
|
err := encoder.Encode(&fc)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error in encoding struct to json: %v", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fc *FluckyConfig) PrintRemotes(w io.Writer) error {
|
||||||
|
|
||||||
|
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||||
|
|
||||||
|
fmt.Fprint(tw, "name\taddress\tenabled\tregistered\n")
|
||||||
|
|
||||||
|
for _, remote := range fc.Remotes {
|
||||||
|
fmt.Fprintf(tw, "%v\t%v\t%v\t%v\n", remote.Name, remote.Address, remote.Enabled, remote.Registered)
|
||||||
|
}
|
||||||
|
|
||||||
|
tw.Flush()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveSensor deletes a sensor by its name or its unique UUID
|
||||||
|
func (fc *FluckyConfig) RemoveSensor(nameOrUUID string) error {
|
||||||
|
found := false
|
||||||
|
|
||||||
|
for i, sensor := range fc.Sensors {
|
||||||
|
|
||||||
|
// remove machted name
|
||||||
|
if !validUUID.MatchString(nameOrUUID) &&
|
||||||
|
*sensor.SensorName == nameOrUUID {
|
||||||
|
fc.Sensors = append(fc.Sensors[:i], fc.Sensors[i+1:]...)
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove machted uuid
|
||||||
|
if validUUID.MatchString(nameOrUUID) &&
|
||||||
|
sensor.SensorID == nameOrUUID {
|
||||||
|
fc.Sensors = append(fc.Sensors[:i], fc.Sensors[i+1:]...)
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
return fmt.Errorf("Can not find remote %v", nameOrUUID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveRemote deletes a remote address by its name or its unique UUID
|
||||||
|
func (fc *FluckyConfig) RemoveRemote(nameOrUUID string) error {
|
||||||
|
found := false
|
||||||
|
|
||||||
|
for i, remote := range fc.Remotes {
|
||||||
|
|
||||||
|
// remove machted name
|
||||||
|
if !validUUID.MatchString(nameOrUUID) &&
|
||||||
|
remote.Name == nameOrUUID {
|
||||||
|
fc.Remotes = append(fc.Remotes[:i], fc.Remotes[i+1:]...)
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove machted uuid
|
||||||
|
if validUUID.MatchString(nameOrUUID) &&
|
||||||
|
remote.RemoteID == nameOrUUID {
|
||||||
|
fc.Remotes = append(fc.Remotes[:i], fc.Remotes[i+1:]...)
|
||||||
|
found = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !found {
|
||||||
|
return fmt.Errorf("Can not find remote %v", nameOrUUID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetDevice informations, like device name or device location
|
||||||
|
func (fc *FluckyConfig) SetDevice(device *Device) {
|
||||||
|
fc.Device = device
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToJSON returns the struct as JSON string
|
||||||
|
func (fc *FluckyConfig) ToJSON() (string, error) {
|
||||||
|
var b bytes.Buffer
|
||||||
|
err := fc.JSONWriter(&b)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return b.String(), nil
|
||||||
|
}
|
10
pkg/config/remote.go
Normal file
10
pkg/config/remote.go
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
// Remote ...
|
||||||
|
type Remote struct {
|
||||||
|
RemoteID string `json:"remote_id"`
|
||||||
|
Name string `json:"remote_name"`
|
||||||
|
Address string `json:"remote_address"`
|
||||||
|
Registered bool `json:"remote_registered"`
|
||||||
|
Enabled bool `json:"remote_enabled"`
|
||||||
|
}
|
@ -22,6 +22,8 @@ func SyncDevice(configDir string, force bool) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jsonBuffer := bytes.Buffer{}
|
||||||
|
|
||||||
// define array of devices
|
// define array of devices
|
||||||
device := types.Device{
|
device := types.Device{
|
||||||
DeviceID: cnf.DeviceID,
|
DeviceID: cnf.DeviceID,
|
||||||
@ -32,19 +34,23 @@ func SyncDevice(configDir string, force bool) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// encode to json
|
// encode to json
|
||||||
deviceAsBytes, err := json.Marshal(device)
|
encoder := json.NewEncoder(&jsonBuffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
deviceAsReader := bytes.NewReader(deviceAsBytes)
|
if err = encoder.Encode(device); err != nil {
|
||||||
|
return fmt.Errorf("Can not encode device to json: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println(jsonBuffer.String())
|
||||||
|
|
||||||
// send array of devices to remote links
|
// send array of devices to remote links
|
||||||
for _, remote := range cnf.Remotes {
|
for _, remote := range cnf.Remotes {
|
||||||
if !remote.Registered || force {
|
if !remote.Registered || force {
|
||||||
|
|
||||||
requestURL := fmt.Sprintf("%v/devices/%v", remote.Address, cnf.DeviceID)
|
requestURL := fmt.Sprintf("%v/devices/%v", remote.Address, cnf.DeviceID)
|
||||||
req, err := http.NewRequest("PUT", requestURL, deviceAsReader)
|
req, err := http.NewRequest("PUT", requestURL, &jsonBuffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -60,7 +66,7 @@ func SyncDevice(configDir string, force bool) error {
|
|||||||
if resp.StatusCode == 404 {
|
if resp.StatusCode == 404 {
|
||||||
log.Println("test")
|
log.Println("test")
|
||||||
requestURL := fmt.Sprintf("%v/devices", remote.Address)
|
requestURL := fmt.Sprintf("%v/devices", remote.Address)
|
||||||
req, err := http.NewRequest("POST", requestURL, deviceAsReader)
|
req, err := http.NewRequest("POST", requestURL, &jsonBuffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -1,158 +1,157 @@
|
|||||||
package remote
|
package remote
|
||||||
|
|
||||||
import (
|
// import (
|
||||||
"fmt"
|
// "fmt"
|
||||||
"io"
|
// "io"
|
||||||
"text/tabwriter"
|
// "text/tabwriter"
|
||||||
|
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
// "git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/types"
|
// )
|
||||||
)
|
|
||||||
|
|
||||||
func Add(remote *types.Remote, configDir string) error {
|
// func Add(remote *types.Remote, configDir string) error {
|
||||||
|
|
||||||
configuration, err := config.Read(configDir)
|
// configuration, err := config.Read(configDir)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
// search after duplicate remote_names
|
// // search after duplicate remote_names
|
||||||
for _, r := range configuration.Remotes {
|
// for _, r := range configuration.Remotes {
|
||||||
if r.Name == remote.Name {
|
// if r.Name == remote.Name {
|
||||||
return fmt.Errorf("Remote-Name %v already exists", remote.Name)
|
// return fmt.Errorf("Remote-Name %v already exists", remote.Name)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
configuration.Remotes = append(configuration.Remotes, remote)
|
// configuration.Remotes = append(configuration.Remotes, remote)
|
||||||
|
|
||||||
if err := config.Write(configuration, configDir); err != nil {
|
// if err := config.Write(configuration, configDir); err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Enable a remote link
|
// // Enable a remote link
|
||||||
func Enable(remoteName string, configDir string) error {
|
// func Enable(remoteName string, configDir string) error {
|
||||||
|
|
||||||
cnf, err := config.Read(configDir)
|
// cnf, err := config.Read(configDir)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
// search after duplicate remote_names
|
// // search after duplicate remote_names
|
||||||
var found bool
|
// var found bool
|
||||||
for _, r := range cnf.Remotes {
|
// for _, r := range cnf.Remotes {
|
||||||
if r.Name == remoteName {
|
// if r.Name == remoteName {
|
||||||
r.Enabled = true
|
// r.Enabled = true
|
||||||
found = true
|
// found = true
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
if !found {
|
// if !found {
|
||||||
return fmt.Errorf("Can not find remote %v", remoteName)
|
// return fmt.Errorf("Can not find remote %v", remoteName)
|
||||||
}
|
// }
|
||||||
|
|
||||||
if err := config.Write(cnf, configDir); err != nil {
|
// if err := config.Write(cnf, configDir); err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Disable a remote link
|
// // Disable a remote link
|
||||||
func Disable(remoteName string, configDir string) error {
|
// func Disable(remoteName string, configDir string) error {
|
||||||
|
|
||||||
cnf, err := config.Read(configDir)
|
// cnf, err := config.Read(configDir)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
// search after duplicate remote_names
|
// // search after duplicate remote_names
|
||||||
var found bool
|
// var found bool
|
||||||
for _, r := range cnf.Remotes {
|
// for _, r := range cnf.Remotes {
|
||||||
if r.Name == remoteName {
|
// if r.Name == remoteName {
|
||||||
r.Enabled = false
|
// r.Enabled = false
|
||||||
found = true
|
// found = true
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
if !found {
|
// if !found {
|
||||||
return fmt.Errorf("Can not find remote %v", remoteName)
|
// return fmt.Errorf("Can not find remote %v", remoteName)
|
||||||
}
|
// }
|
||||||
|
|
||||||
if err := config.Write(cnf, configDir); err != nil {
|
// if err := config.Write(cnf, configDir); err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
func Print(w io.Writer, configDir string, quiet bool) error {
|
// func Print(w io.Writer, configDir string, quiet bool) error {
|
||||||
|
|
||||||
configuration, err := config.Read(configDir)
|
// configuration, err := config.Read(configDir)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
// tw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0)
|
||||||
|
|
||||||
if !quiet {
|
// if !quiet {
|
||||||
fmt.Fprint(tw, "name\taddress\tenabled\tregistered\n")
|
// fmt.Fprint(tw, "name\taddress\tenabled\tregistered\n")
|
||||||
}
|
// }
|
||||||
|
|
||||||
for _, remote := range configuration.Remotes {
|
// for _, remote := range configuration.Remotes {
|
||||||
if quiet {
|
// if quiet {
|
||||||
fmt.Fprintf(tw, "%v\n", remote.Name)
|
// fmt.Fprintf(tw, "%v\n", remote.Name)
|
||||||
} else {
|
// } else {
|
||||||
fmt.Fprintf(tw, "%v\t%v\t%v\t%v\n", remote.Name, remote.Address, remote.Enabled, remote.Registered)
|
// fmt.Fprintf(tw, "%v\t%v\t%v\t%v\n", remote.Name, remote.Address, remote.Enabled, remote.Registered)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
tw.Flush()
|
// tw.Flush()
|
||||||
|
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
func Remove(name string, configDir string) error {
|
// func Remove(name string, configDir string) error {
|
||||||
|
|
||||||
con, err := config.Read(configDir)
|
// con, err := config.Read(configDir)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
var j int
|
// var j int
|
||||||
for _, remote := range con.Remotes {
|
// for _, remote := range con.Remotes {
|
||||||
if remote.Name == name {
|
// if remote.Name == name {
|
||||||
con.Remotes = append(con.Remotes[:j], con.Remotes[j+1:]...)
|
// con.Remotes = append(con.Remotes[:j], con.Remotes[j+1:]...)
|
||||||
|
|
||||||
if j > 0 {
|
// if j > 0 {
|
||||||
j = j - 1
|
// j = j - 1
|
||||||
}
|
// }
|
||||||
continue
|
// continue
|
||||||
}
|
// }
|
||||||
j++
|
// j++
|
||||||
}
|
// }
|
||||||
|
|
||||||
if err := config.Write(con, configDir); err != nil {
|
// if err := config.Write(con, configDir); err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
func RemoveAll(configDir string) error {
|
// func RemoveAll(configDir string) error {
|
||||||
|
|
||||||
con, err := config.Read(configDir)
|
// con, err := config.Read(configDir)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
con.Remotes = nil
|
// con.Remotes = nil
|
||||||
|
|
||||||
if err := config.Write(con, configDir); err != nil {
|
// if err := config.Write(con, configDir); err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
|
|
||||||
return nil
|
// return nil
|
||||||
}
|
// }
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
package types
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
|
|
||||||
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
DeviceID string `json:"device_id"`
|
|
||||||
DeviceName string `json:"device_name"`
|
|
||||||
DeviceLocation string `json:"device_location"`
|
|
||||||
TemperatureLogfile string `json:"temperature_logfile"`
|
|
||||||
HumidityLogfile string `json:"humiditiy_logfile"`
|
|
||||||
Remotes []*Remote `json:"remotes"`
|
|
||||||
Sensors []*stypes.Sensor `json:"sensors"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Config) ToJSON() (string, error) {
|
|
||||||
var b bytes.Buffer
|
|
||||||
err := c.JSONWriter(&b)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
return b.String(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// JSONWriter needs a writer to write the struct into json string
|
|
||||||
func (c *Config) JSONWriter(w io.Writer) error {
|
|
||||||
encoder := json.NewEncoder(w)
|
|
||||||
encoder.SetIndent("", " ")
|
|
||||||
err := encoder.Encode(&c)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Error in encoding struct to json: %v", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// JSONDecoder decode a json string from a reader into a struct
|
|
||||||
func (c *Config) JSONDecoder(r io.Reader) error {
|
|
||||||
jsonDecoder := json.NewDecoder(r)
|
|
||||||
if err := jsonDecoder.Decode(&c); err != nil {
|
|
||||||
return fmt.Errorf("Can not unmarshal JSON: %v", err)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remote ...
|
|
||||||
type Remote struct {
|
|
||||||
Name string `json:"remote_name"`
|
|
||||||
Address string `json:"remote_address"`
|
|
||||||
Registered bool `json:"remote_registered"`
|
|
||||||
Enabled bool `json:"remote_enabled"`
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user