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