add: integrated caching, Dockerfile; removed influx
With this update I deleted influx for now, also the caching is now fully implemented. Also an new Dockerfile got build for testing the envir. in containers
This commit is contained in:
parent
a1beb7dbad
commit
9b71665192
|
|
@ -28,6 +28,14 @@ func main() {
|
|||
}
|
||||
defer db.Close()
|
||||
|
||||
// influx, err := database.NewInfluxDB()
|
||||
// if err != nil {
|
||||
// slog.Error("Failed to establish connection", "error:", err)
|
||||
// os.Exit(1)
|
||||
// return
|
||||
// }
|
||||
// defer influx.Close()
|
||||
|
||||
dbadapter := database.NewDatabaseAdapter(db)
|
||||
|
||||
sensorService := domain.NewSensorService(dbadapter)
|
||||
|
|
|
|||
|
|
@ -1,19 +1,23 @@
|
|||
package domain
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
|
||||
"esp32/backend/internal/core"
|
||||
"esp32/backend/internal/models"
|
||||
)
|
||||
|
||||
type sensorService struct {
|
||||
repo core.SensorRepository
|
||||
repo core.SensorRepository
|
||||
cache core.CacheRepository
|
||||
}
|
||||
|
||||
func NewSensorService(r core.SensorRepository) core.SensorService {
|
||||
func NewSensorService(r core.SensorRepository, c core.CacheRepository) core.SensorService {
|
||||
return &sensorService{
|
||||
repo: r,
|
||||
repo: r,
|
||||
cache: c,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -31,6 +35,10 @@ func (s *sensorService) ProcessIncomingMetric(payload models.SensorPayload, topi
|
|||
Pressure: payload.Pressure,
|
||||
Topic: topic,
|
||||
}
|
||||
err = s.cache.SaveLatestMetrics(context.Background(), sensorData.DeviceID, sensorData)
|
||||
if err != nil {
|
||||
slog.Info("failed to save data in cache", "error", err)
|
||||
}
|
||||
|
||||
return s.repo.SaveSensorData(sensorData)
|
||||
}
|
||||
|
|
|
|||
12
backend/internal/core/ports_cache.go
Normal file
12
backend/internal/core/ports_cache.go
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"esp32/backend/internal/models"
|
||||
)
|
||||
|
||||
type CacheRepository interface {
|
||||
SaveLatestMetrics(ctx context.Context, deviceID string, data models.SensorData) error
|
||||
GetLatestMetrics(ctx context.Context, deviceID string) (models.SensorData, error)
|
||||
}
|
||||
16
backend/internal/database/influxdb.go
Normal file
16
backend/internal/database/influxdb.go
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
package database
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
|
||||
)
|
||||
|
||||
func NewInfluxDB() influxdb2.Client {
|
||||
token := os.Getenv("INFLUXDB_TOKEN")
|
||||
url := "http://localhost:8086"
|
||||
client := influxdb2.NewClient(url, token)
|
||||
|
||||
return client
|
||||
}
|
||||
|
||||
|
|
@ -1,19 +1,18 @@
|
|||
package database
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/redis/go-redis/v9"
|
||||
)
|
||||
|
||||
var (
|
||||
Rdb *redis.Client
|
||||
Ctx = context.Background()
|
||||
)
|
||||
type RedisAdapter struct {
|
||||
rdb *redis.Client
|
||||
}
|
||||
|
||||
func InitRedis(addr string) error {
|
||||
Rdb = redis.NewClient(&redis.Options{
|
||||
func NewRedisAdapter(addr string) *RedisAdapter {
|
||||
client := redis.NewClient(&redis.Options{
|
||||
Addr: addr,
|
||||
})
|
||||
return Rdb.Ping(Ctx).Err()
|
||||
return &RedisAdapter{
|
||||
rdb: client,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@ func (da *DatabaseAdapter) GetCustomerIDByDeviceID(deviceID string) (int, error)
|
|||
return customerID, err
|
||||
}
|
||||
|
||||
// Customer ID kann weg!
|
||||
// device version muss dazu
|
||||
// Teste 2 esp32 gleiches topic daten filtern
|
||||
func (da *DatabaseAdapter) SaveSensorData(data models.SensorData) error {
|
||||
query := `
|
||||
INSERT INTO sensor_data (device_id, customer_id, temperature, humidity, pressure, topic)
|
||||
|
|
|
|||
|
|
@ -32,7 +32,5 @@ func (a *MQTTAdapter) RecieveMessage(c mqtt.Client, msg mqtt.Message) {
|
|||
} else {
|
||||
fmt.Printf("Erfolgreich verarbeitet: %s\n", payload.DeviceID)
|
||||
}
|
||||
|
||||
msg.Ack()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,4 +65,3 @@ func (a *MQTTAdapter) Disconnect(quiesce uint) {
|
|||
fmt.Println("MQTT Verbindung erfolgreich geschlossen")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,37 @@ services:
|
|||
image: redis:7-alpine
|
||||
ports:
|
||||
- "6379:6379"
|
||||
influxdb2:
|
||||
image: influxdb:2
|
||||
ports:
|
||||
- 8086:8086
|
||||
environment:
|
||||
DOCKER_INFLUXDB_INIT_MODE: setup
|
||||
DOCKER_INFLUXDB_INIT_USERNAME_FILE: /run/secrets/influxdb2-admin-username
|
||||
DOCKER_INFLUXDB_INIT_PASSWORD_FILE: /run/secrets/influxdb2-admin-password
|
||||
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN_FILE: /run/secrets/influxdb2-admin-token
|
||||
DOCKER_INFLUXDB_INIT_ORG: docs
|
||||
DOCKER_INFLUXDB_INIT_BUCKET: home
|
||||
secrets:
|
||||
- influxdb2-admin-username
|
||||
- influxdb2-admin-password
|
||||
- influxdb2-admin-token
|
||||
volumes:
|
||||
- type: volume
|
||||
source: influxdb2-data
|
||||
target: /var/lib/influxdb2
|
||||
- type: volume
|
||||
source: influxdb2-config
|
||||
target: /etc/influxdb2
|
||||
secrets:
|
||||
influxdb2-admin-username:
|
||||
file: ~/.env.influxdb2-admin-username
|
||||
influxdb2-admin-password:
|
||||
file: ~/.env.influxdb2-admin-password
|
||||
influxdb2-admin-token:
|
||||
file: ~/.env.influxdb2-admin-token
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
influxdb2-data:
|
||||
influxdb2-config:
|
||||
|
|
|
|||
5
go.mod
5
go.mod
|
|
@ -10,12 +10,17 @@ require (
|
|||
)
|
||||
|
||||
require (
|
||||
github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||
github.com/google/uuid v1.3.1 // indirect
|
||||
github.com/gorilla/websocket v1.5.3 // indirect
|
||||
github.com/influxdata/influxdb-client-go/v2 v2.14.0 // indirect
|
||||
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect
|
||||
github.com/labstack/gommon v0.4.2 // indirect
|
||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
github.com/oapi-codegen/runtime v1.0.0 // indirect
|
||||
github.com/redis/go-redis/v9 v9.17.3 // indirect
|
||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||
github.com/valyala/fasttemplate v1.2.2 // indirect
|
||||
|
|
|
|||
17
go.sum
17
go.sum
|
|
@ -1,15 +1,27 @@
|
|||
github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk=
|
||||
github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ=
|
||||
github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
|
||||
github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w=
|
||||
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||
github.com/eclipse/paho.mqtt.golang v1.5.1 h1:/VSOv3oDLlpqR2Epjn1Q7b2bSTplJIeV2ISgCl2W7nE=
|
||||
github.com/eclipse/paho.mqtt.golang v1.5.1/go.mod h1:1/yJCneuyOoCOzKSsOTUc0AJfpsItBGWvYpBLimhArU=
|
||||
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
|
||||
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/influxdata/influxdb-client-go/v2 v2.14.0 h1:AjbBfJuq+QoaXNcrova8smSjwJdUHnwvfjMF71M1iI4=
|
||||
github.com/influxdata/influxdb-client-go/v2 v2.14.0/go.mod h1:Ahpm3QXKMJslpXl3IftVLVezreAUtBOTZssDrjZEFHI=
|
||||
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU=
|
||||
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo=
|
||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||
github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE=
|
||||
github.com/labstack/echo/v4 v4.13.4 h1:oTZZW+T3s9gAu5L8vmzihV7/lkXGZuITzTQkTEhcXEA=
|
||||
github.com/labstack/echo/v4 v4.13.4/go.mod h1:g63b33BZ5vZzcIUF8AtRH40DrTlXnx4UMC8rBdndmjQ=
|
||||
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
|
||||
|
|
@ -20,10 +32,15 @@ github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHP
|
|||
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
|
||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo=
|
||||
github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/redis/go-redis/v9 v9.17.3 h1:fN29NdNrE17KttK5Ndf20buqfDZwGNgoUr9qjl1DQx4=
|
||||
github.com/redis/go-redis/v9 v9.17.3/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370=
|
||||
github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||
|
|
|
|||
Loading…
Reference in a new issue