Go server to transmit the data to the InfluxDB

This commit is contained in:
Thomas Schwery 2018-05-10 17:54:25 +02:00
parent c49f3d5fcb
commit 67c9fb1dee
4 changed files with 167 additions and 0 deletions

View file

@ -0,0 +1,4 @@
FROM scratch
ADD main /
CMD ["/main"]

View 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

View 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
View 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)
}
}