Improvement of the server part to return a name and sleep time

This commit is contained in:
Thomas Schwery 2018-05-10 22:17:41 +02:00
parent 1c13707b39
commit 25ff751aa9
3 changed files with 62 additions and 16 deletions

View file

@ -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/)

View file

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

View file

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