From 1249ad3f358cd846ab4b791cbb42520d03426c54 Mon Sep 17 00:00:00 2001 From: Simon Rieger Date: Wed, 26 Mar 2025 22:47:15 +0000 Subject: [PATCH] update libraries and remove logrus --- docker-compose.yml | 19 ++++++++----------- go/Dockerfile | 36 +++++++++++++++++++++--------------- go/go.mod | 7 +------ go/go.sum | 15 --------------- go/main.go | 34 +++++++++++++--------------------- 5 files changed, 43 insertions(+), 68 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index f3adb06..9f02ff9 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.9" - services: # Go application service @@ -8,12 +6,12 @@ services: context: go/. args: - GO111MODULE=on - #ports: - # - "8080:8080" + ports: + - "10.0.1.3:8096:8080" depends_on: - db environment: - - DB_HOST=172.28.0.25 + - DB_HOST=10.2.0.30 - DB_PORT=3306 - DB_USER=root - DB_PASSWORD=owntracks @@ -25,8 +23,8 @@ services: networks: default: - dns: - ipv4_address: 172.28.0.24 + monitoring: + ipv4_address: 10.2.0.29 db: image: mariadb:11 @@ -38,10 +36,9 @@ services: restart: always networks: default: - dns: - ipv4_address: 172.28.0.25 + monitoring: + ipv4_address: 10.2.0.30 networks: - dns: - name: dns + monitoring: external: true diff --git a/go/Dockerfile b/go/Dockerfile index 2c572c4..2e8642a 100755 --- a/go/Dockerfile +++ b/go/Dockerfile @@ -1,22 +1,28 @@ -# Use an official Golang runtime as a parent image -FROM golang:1.21.4 +# syntax=docker/dockerfile:1 -# Set the working directory in the container -WORKDIR /go/src/app +# Build the application from source +FROM golang:1.21.4 AS build-stage -# Copy the local package files to the container's workspace -COPY . . +WORKDIR /app -# Download and install any required third-party dependencies into the container. -#RUN go get -u github.com/gorilla/mux -RUN go get -u github.com/go-sql-driver/mysql -RUN go get -u github.com/sirupsen/logrus +COPY * ./ +RUN go mod download -# Build the Go application -RUN go build -o main . +RUN CGO_ENABLED=0 GOOS=linux go build -o /main + +# Run the tests in the container +FROM build-stage AS run-test-stage +RUN go test -v ./... + +# Deploy the application binary into a lean image +FROM gcr.io/distroless/base-debian11 AS build-release-stage + +WORKDIR / + +COPY --from=build-stage /main /main -# Expose port 8080 to the outside world EXPOSE 8080 -# Command to run the application with environment variables -CMD ["./main"] +USER nonroot:nonroot + +ENTRYPOINT ["/main"] diff --git a/go/go.mod b/go/go.mod index 119d48a..4f49127 100755 --- a/go/go.mod +++ b/go/go.mod @@ -2,9 +2,4 @@ module go-app go 1.21.4 -require ( - github.com/go-sql-driver/mysql v1.7.1 - github.com/sirupsen/logrus v1.9.3 -) - -require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect +require github.com/go-sql-driver/mysql v1.7.1 diff --git a/go/go.sum b/go/go.sum index 05471c9..fd7ae07 100755 --- a/go/go.sum +++ b/go/go.sum @@ -1,17 +1,2 @@ -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/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= -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/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go/main.go b/go/main.go index 68eafae..92dc4f1 100644 --- a/go/main.go +++ b/go/main.go @@ -4,16 +4,14 @@ import ( "database/sql" "encoding/json" "fmt" + "log" "net/http" "os" "time" - "github.com/sirupsen/logrus" _ "github.com/go-sql-driver/mysql" ) -var log = logrus.New() - // Location represents the JSON payload structure type Location struct { Type string `json:"_type"` @@ -26,29 +24,23 @@ type Location struct { } func init() { - // Log as JSON instead of the default ASCII formatter. - log.SetFormatter(&logrus.JSONFormatter{}) - - // Output to stdout instead of the default stderr - // Can be any io.Writer, see below for File example + // Konfigurieren Sie den Standard-Logger log.SetOutput(os.Stdout) - - // Only log the warning severity or above. - log.SetLevel(logrus.InfoLevel) + log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Lshortfile) } func main() { - log.Info("Server started. Listening on :8080") + log.Println("Server started. Listening on :8080") http.HandleFunc("/", handleRequest) http.ListenAndServe(":8080", nil) } func handleRequest(w http.ResponseWriter, r *http.Request) { - log.Info("Handling request") + log.Println("Handling request") if r.Method != http.MethodPost { - log.Warn("Method not allowed") + log.Println("Method not allowed") http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) return } @@ -57,23 +49,23 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { device := r.Header.Get("X-Limit-D") user := r.Header.Get("X-Limit-U") - log.Infof("Received request with device=%s and user=%s", device, user) + log.Printf("Received request with device=%s and user=%s", device, user) var loc Location decoder := json.NewDecoder(r.Body) err := decoder.Decode(&loc) if err != nil { - log.Error("Invalid JSON payload: ", err) + log.Printf("Invalid JSON payload: %v", err) http.Error(w, "Invalid JSON payload", http.StatusBadRequest) return } - log.Infof("Received JSON payload: %+v", loc) + log.Printf("Received JSON payload: %+v", loc) if loc.Type == "location" { db, err := sql.Open("mysql", getDBConnectionString()) if err != nil { - log.Error("Database connection error: ", err) + log.Printf("Database connection error: %v", err) http.Error(w, fmt.Sprintf("Database connection error: %v", err), http.StatusInternalServerError) return } @@ -84,19 +76,19 @@ func handleRequest(w http.ResponseWriter, r *http.Request) { _, err = db.Exec("INSERT INTO locations (dt, tid, lat, lon, batt, vac, device, user) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", dt, loc.Tid, loc.Lat, loc.Lon, loc.Batt, loc.Vac, device, user) if err != nil { - log.Error("Database insertion error: ", err) + log.Printf("Database insertion error: %v", err) http.Error(w, fmt.Sprintf("Database insertion error: %v", err), http.StatusInternalServerError) return } - log.Info("Location data inserted into the database") + log.Println("Location data inserted into the database") } response := make(map[string]interface{}) // Optionally add objects to return to the app (e.g., friends or cards) json.NewEncoder(w).Encode(response) - log.Info("Request handled successfully") + log.Println("Request handled successfully") } func getDBConnectionString() string {