From 67c9fb1dee6427c82c276645309113a536ed3217 Mon Sep 17 00:00:00 2001 From: Thomas Schwery Date: Thu, 10 May 2018 17:54:25 +0200 Subject: [PATCH] Go server to transmit the data to the InfluxDB --- server-go-ingress/Dockerfile | 4 + server-go-ingress/deployment/deployment.yaml | 22 ++++ server-go-ingress/deployment/svc-ingress.yaml | 27 +++++ server-go-ingress/server.go | 114 ++++++++++++++++++ 4 files changed, 167 insertions(+) create mode 100644 server-go-ingress/Dockerfile create mode 100644 server-go-ingress/deployment/deployment.yaml create mode 100644 server-go-ingress/deployment/svc-ingress.yaml create mode 100644 server-go-ingress/server.go diff --git a/server-go-ingress/Dockerfile b/server-go-ingress/Dockerfile new file mode 100644 index 0000000..104fca6 --- /dev/null +++ b/server-go-ingress/Dockerfile @@ -0,0 +1,4 @@ +FROM scratch +ADD main / +CMD ["/main"] + diff --git a/server-go-ingress/deployment/deployment.yaml b/server-go-ingress/deployment/deployment.yaml new file mode 100644 index 0000000..c4413e9 --- /dev/null +++ b/server-go-ingress/deployment/deployment.yaml @@ -0,0 +1,22 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: temperature-go-server +spec: + replicas: 1 + template: + metadata: + labels: + name: temperature-go-server + spec: + imagePullSecrets: + - name: regcred + containers: + - name: temperature-go-server + image: registry.lab.inf3.xyz/tschwery/temperature-go-server:v1 + resources: + requests: + cpu: 50m + memory: 100Mi + ports: + - containerPort: 3000 diff --git a/server-go-ingress/deployment/svc-ingress.yaml b/server-go-ingress/deployment/svc-ingress.yaml new file mode 100644 index 0000000..0c575fc --- /dev/null +++ b/server-go-ingress/deployment/svc-ingress.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Service +metadata: + name: temperature-go-server + labels: + name: temperature-go-server +spec: + selector: + name: temperature-go-server + ports: + - name: temperature-go-server + port: 3000 + targetPort: 3000 +--- +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: temperature-go-server +spec: + rules: + - host: apis.lab.inf3.xyz + http: + paths: + - path: /esp8266/sensors + backend: + serviceName: temperature-go-server + servicePort: 3000 diff --git a/server-go-ingress/server.go b/server-go-ingress/server.go new file mode 100644 index 0000000..8c58aa5 --- /dev/null +++ b/server-go-ingress/server.go @@ -0,0 +1,114 @@ +package main + +import ( + "encoding/json" + "log" + "net/http" + "time" + + influxClient "github.com/influxdata/influxdb/client/v2" +) + +type sensorData struct { + ID string `json: "id"` + Name string `json: "name,omitempty"` + Temp float32 `json: "temp"` + Pressure float32 `json: "pressure"` +} + +const ( + database = "sensors" + username = "sensor" + password = "dQ87dpjq7V7Y93U7" +) + +func main() { + + http.HandleFunc("/esp8266/sensors", func(w http.ResponseWriter, r *http.Request) { handleSensor(w, r) }) + http.ListenAndServe(":3000", nil) +} + +func handleSensor(rw http.ResponseWriter, req *http.Request) { + ts := time.Now() + + c, err := influxClient.NewHTTPClient(influxClient.HTTPConfig{ + Addr: "http://10.42.30.0:8086", + Username: username, + Password: password, + }) + + if err != nil { + log.Fatal(err) + } + + _, _, err = c.Ping(0) + if err != nil { + log.Fatal(err) + } + + defer c.Close() + + decoder := json.NewDecoder(req.Body) + var data sensorData + err = decoder.Decode(&data) + if err != nil { + log.Println("Error in the sent data.") + log.Println(err) + return + } + defer req.Body.Close() + + log.Printf("Got data: %s %s (%f) (%f)\n", data.ID, data.Name, data.Temp, data.Pressure) + + bp, err := influxClient.NewBatchPoints(influxClient.BatchPointsConfig{ + Database: database, + Precision: "ms", + }) + + if err != nil { + log.Fatalln("Error: ", err) + } + + tags := map[string]string{ + "node": data.ID, + "name": data.Name, + } + + fieldsTemp := map[string]interface{}{ + "value": data.Temp, + } + + fieldsPressure := map[string]interface{}{ + "value": data.Pressure, + } + + pointTemp, err := influxClient.NewPoint( + "temperature", + tags, + fieldsTemp, + ts, + ) + if err != nil { + log.Fatalln("Error: ", err) + } + + pointPressure, err := influxClient.NewPoint( + "pressure", + tags, + fieldsPressure, + ts, + ) + if err != nil { + log.Fatalln("Error: ", err) + } + + bp.AddPoint(pointTemp) + bp.AddPoint(pointPressure) + + log.Println("Sending", bp, c) + + err = c.Write(bp) + if err != nil { + log.Fatalln("Error: ", err) + } +}