fix: sync and fetch temperatures
changes: - add sync command to synchronize device sensor information with remote servers - fix fetch functions to get temperatures
This commit is contained in:
@ -2,31 +2,49 @@ package httpcall
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||
"git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||
)
|
||||
|
||||
// RegisterDevice ..
|
||||
func RegisterDevice(configDir string, force bool) error {
|
||||
con, err := config.Read(configDir)
|
||||
// SyncDevice ..
|
||||
func SyncDevice(configDir string, force bool) error {
|
||||
|
||||
// read config
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
device := new(stypes.Device)
|
||||
device.DeviceID = con.DeviceID
|
||||
// define array of devices
|
||||
device := types.Device{
|
||||
DeviceID: cnf.DeviceID,
|
||||
DeviceLocation: &cnf.DeviceLocation,
|
||||
DeviceName: &cnf.DeviceName,
|
||||
DeviceLastContact: time.Now(),
|
||||
CreationDate: time.Now(),
|
||||
}
|
||||
|
||||
var buffer bytes.Buffer
|
||||
device.EncodeToJSON(&buffer)
|
||||
// encode to json
|
||||
deviceAsBytes, err := json.Marshal(device)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, remote := range con.Remotes {
|
||||
deviceAsReader := bytes.NewReader(deviceAsBytes)
|
||||
|
||||
// send array of devices to remote links
|
||||
for _, remote := range cnf.Remotes {
|
||||
if !remote.Registered || force {
|
||||
requestURL := fmt.Sprintf("%s%s", remote.Address, "/devices")
|
||||
req, err := http.NewRequest("POST", requestURL, &buffer)
|
||||
|
||||
requestURL := fmt.Sprintf("%v/devices/%v", remote.Address, cnf.DeviceID)
|
||||
req, err := http.NewRequest("PUT", requestURL, deviceAsReader)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -38,18 +56,47 @@ func RegisterDevice(configDir string, force bool) error {
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
log.Println(resp.StatusCode)
|
||||
|
||||
// if resource does not exxists, create a new one
|
||||
if resp.StatusCode == 404 {
|
||||
log.Println("test")
|
||||
requestURL := fmt.Sprintf("%v/devices", remote.Address)
|
||||
req, err := http.NewRequest("POST", requestURL, deviceAsReader)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode > 299 {
|
||||
b, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Can not create a new device on %v - Invalid HTTP-Statuscode, expected 200, got %d - Can not read response body: %v", remote.Name, resp.StatusCode, err)
|
||||
}
|
||||
return fmt.Errorf("Can not create a new device on %v - Invalid HTTP-Statuscode, expected 200, got %d: %v", remote.Name, resp.StatusCode, string(b))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode > 299 {
|
||||
b, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Invalid HTTP-Statuscode - expected 200, got %d - can not read response body: %v", resp.StatusCode, err)
|
||||
return fmt.Errorf("Can not update device on %v - Invalid HTTP-Statuscode, expected 200, got %d - Can not read response body: %v", remote.Name, resp.StatusCode, err)
|
||||
}
|
||||
return fmt.Errorf("Invalid HTTP-Statuscode - expected 200, got %d: %v", resp.StatusCode, string(b))
|
||||
return fmt.Errorf("Can not update device on %v - Invalid HTTP-Statuscode, expected 200, got %d: %v", remote.Name, resp.StatusCode, string(b))
|
||||
}
|
||||
|
||||
remote.Registered = true
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if err := config.Write(con, configDir); err != nil {
|
||||
if err := config.Write(cnf, configDir); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
107
pkg/httpcall/sensor.go
Normal file
107
pkg/httpcall/sensor.go
Normal file
@ -0,0 +1,107 @@
|
||||
package httpcall
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
|
||||
stypes "git.cryptic.systems/fh-trier/go-flucky-server/pkg/types"
|
||||
"git.cryptic.systems/fh-trier/go-flucky/pkg/config"
|
||||
)
|
||||
|
||||
// SyncSensors ..
|
||||
func SyncSensors(configDir string, force bool) error {
|
||||
|
||||
// read config
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// send array of sensors to remote links
|
||||
for _, remote := range cnf.Remotes {
|
||||
if remote.Enabled || force {
|
||||
|
||||
// encode to json
|
||||
sensorsAsBytes, err := json.Marshal(cnf.Sensors)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
sensorsAsReader := bytes.NewReader(sensorsAsBytes)
|
||||
|
||||
requestURL := fmt.Sprintf("%v/sensors", remote.Address)
|
||||
req, err := http.NewRequest("PUT", requestURL, sensorsAsReader)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client := http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode > 299 {
|
||||
b, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Invalid HTTP-Statuscode - expected 200, got %d - can not read response body: %v", resp.StatusCode, err)
|
||||
}
|
||||
return fmt.Errorf("Invalid HTTP-Statuscode - expected 200, got %d: %v", resp.StatusCode, string(b))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// PostSensors ...
|
||||
func PostSensors(sensors []*stypes.Sensor, configDir string, force bool) error {
|
||||
|
||||
// read config
|
||||
cnf, err := config.Read(configDir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// send array of sensors to remote links
|
||||
for _, remote := range cnf.Remotes {
|
||||
if remote.Enabled || force {
|
||||
// encode to json
|
||||
sensorsAsBytes, err := json.Marshal(sensors)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
sensorsAsReader := bytes.NewReader(sensorsAsBytes)
|
||||
|
||||
requestURL := fmt.Sprintf("%v/sensors", remote.Address)
|
||||
req, err := http.NewRequest("PUT", requestURL, sensorsAsReader)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client := http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode > 299 {
|
||||
b, err := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Invalid HTTP-Statuscode - expected 200, got %d - can not read response body: %v", resp.StatusCode, err)
|
||||
}
|
||||
return fmt.Errorf("Invalid HTTP-Statuscode - expected 200, got %d: %v", resp.StatusCode, string(b))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user