diff --git a/server-go-ingress/Makefile b/server-go-ingress/Makefile new file mode 100644 index 0000000..2847f2f --- /dev/null +++ b/server-go-ingress/Makefile @@ -0,0 +1,13 @@ +.PHONY: build fmt deploy + +default: build + +build: + CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main . + +deploy: build + docker build --tag registry.lab.inf3.xyz/tschwery/temperature-go-server:v1.1 . + docker push registry.lab.inf3.xyz/tschwery/temperature-go-server:v1.1 + +fmt: + go fmt $$(go list ./... | grep -v /vendor/) diff --git a/server-go-ingress/deployment/deployment.yaml b/server-go-ingress/deployment/deployment.yaml index c4413e9..b7438f9 100644 --- a/server-go-ingress/deployment/deployment.yaml +++ b/server-go-ingress/deployment/deployment.yaml @@ -13,7 +13,7 @@ spec: - name: regcred containers: - name: temperature-go-server - image: registry.lab.inf3.xyz/tschwery/temperature-go-server:v1 + image: registry.lab.inf3.xyz/tschwery/temperature-go-server:v1.1 resources: requests: cpu: 50m diff --git a/server-go-ingress/server.go b/server-go-ingress/server.go index 8c58aa5..fe6e428 100644 --- a/server-go-ingress/server.go +++ b/server-go-ingress/server.go @@ -2,8 +2,10 @@ package main import ( "encoding/json" + "fmt" "log" "net/http" + "strings" "time" influxClient "github.com/influxdata/influxdb/client/v2" @@ -23,7 +25,6 @@ const ( ) func main() { - http.HandleFunc("/esp8266/sensors", func(w http.ResponseWriter, r *http.Request) { handleSensor(w, r) }) http.ListenAndServe(":3000", nil) } @@ -38,12 +39,10 @@ func handleSensor(rw http.ResponseWriter, req *http.Request) { }) if err != nil { - log.Fatal(err) - } - - _, _, err = c.Ping(0) - if err != nil { - log.Fatal(err) + log.Println("Error connecting to the InfluxDB:", err) + rw.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(rw, "Error connecting to the InfluxDB: %s", err) + return } defer c.Close() @@ -52,13 +51,22 @@ func handleSensor(rw http.ResponseWriter, req *http.Request) { var data sensorData err = decoder.Decode(&data) if err != nil { - log.Println("Error in the sent data.") - log.Println(err) + log.Println("Error in the sent data:", err) + rw.WriteHeader(http.StatusBadRequest) + fmt.Fprintf(rw, "Error in the sent data: %s", err) return } defer req.Body.Close() - log.Printf("Got data: %s %s (%f) (%f)\n", data.ID, data.Name, data.Temp, data.Pressure) + log.Printf("Got data: (%s) (%s) (%f) (%f)\n", data.ID, data.Name, data.Temp, data.Pressure) + + data.Name = strings.TrimSpace(data.Name) + + nameOverride := false + if len(data.Name) == 0 { + data.Name = getNodeName(data.ID) + nameOverride = true + } bp, err := influxClient.NewBatchPoints(influxClient.BatchPointsConfig{ Database: database, @@ -66,7 +74,10 @@ func handleSensor(rw http.ResponseWriter, req *http.Request) { }) if err != nil { - log.Fatalln("Error: ", err) + log.Println("Error connecting to the InfluxDB:", err) + rw.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(rw, "Error connecting to the InfluxDB: %s", err) + return } tags := map[string]string{ @@ -89,7 +100,10 @@ func handleSensor(rw http.ResponseWriter, req *http.Request) { ts, ) if err != nil { - log.Fatalln("Error: ", err) + log.Println("Error connecting to the InfluxDB:", err) + rw.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(rw, "Error connecting to the InfluxDB: %s", err) + return } pointPressure, err := influxClient.NewPoint( @@ -105,10 +119,29 @@ func handleSensor(rw http.ResponseWriter, req *http.Request) { bp.AddPoint(pointTemp) bp.AddPoint(pointPressure) - log.Println("Sending", bp, c) - err = c.Write(bp) if err != nil { - log.Fatalln("Error: ", err) + log.Println("Error connecting to the InfluxDB:", err) + rw.WriteHeader(http.StatusInternalServerError) + fmt.Fprintf(rw, "Error connecting to the InfluxDB: %s", err) + return + } + + nextTimeSlot := ts.Add(15 * time.Minute) + nextTimeSlot = nextTimeSlot.Round(15 * time.Minute) + + remainingAlignment := nextTimeSlot.Unix() - ts.Unix() + + rw.WriteHeader(http.StatusOK) + fmt.Fprintf(rw, "Thanks !\nSleep %d\n", remainingAlignment) + if nameOverride && len(data.Name) > 0 { + fmt.Fprintf(rw, "Name: %s\n", data.Name) } } + +func getNodeName(nodeID string) string { + knownModules := make(map[string]string) + knownModules["EC:FA:BC:07:E4:31"] = "bureau" + + return knownModules[nodeID] +}