Go server to transmit the data to the InfluxDB
This commit is contained in:
parent
c49f3d5fcb
commit
67c9fb1dee
4 changed files with 167 additions and 0 deletions
4
server-go-ingress/Dockerfile
Normal file
4
server-go-ingress/Dockerfile
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
FROM scratch
|
||||||
|
ADD main /
|
||||||
|
CMD ["/main"]
|
||||||
|
|
22
server-go-ingress/deployment/deployment.yaml
Normal file
22
server-go-ingress/deployment/deployment.yaml
Normal file
|
@ -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
|
27
server-go-ingress/deployment/svc-ingress.yaml
Normal file
27
server-go-ingress/deployment/svc-ingress.yaml
Normal file
|
@ -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
|
114
server-go-ingress/server.go
Normal file
114
server-go-ingress/server.go
Normal file
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Reference in a new issue