From cff5e845c75e9e2751a2c1f01f8ae3fbf24f0e7d Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Thu, 21 Nov 2024 18:12:07 +0300 Subject: feat/backend: gdrive to backblaze migration, improve create record (#237) --- backend/.env.example | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'backend/.env.example') diff --git a/backend/.env.example b/backend/.env.example index 774f2a2..90ca8b4 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -7,6 +7,7 @@ DB_PORT= DB_USER= DB_PASS= DB_NAME= -GOOGLE_CLIENT_EMAIL= -GOOGLE_PRIVATE_KEY_BASE64= -GOOGLE_FOLDER_ID= \ No newline at end of file +B2_BUCKET_NAME= +B2_KEY_ID= +B2_API_KEY= +B2_DOWNLOAD_URL= -- cgit v1.2.3 From 00711cab5bb8f3cdd1b86d062ef067587e3fc18a Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Fri, 22 Nov 2024 13:11:50 +0300 Subject: feat/backend: local demos path for testing (#243) Co-authored-by: NeKz --- backend/.env.example | 27 +++++++------- backend/handlers/record.go | 92 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 86 insertions(+), 33 deletions(-) (limited to 'backend/.env.example') diff --git a/backend/.env.example b/backend/.env.example index 90ca8b4..b0a7101 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -1,13 +1,14 @@ -PORT= -SECRET_KEY= -API_KEY= -ENV= -DB_HOST= -DB_PORT= -DB_USER= -DB_PASS= -DB_NAME= -B2_BUCKET_NAME= -B2_KEY_ID= -B2_API_KEY= -B2_DOWNLOAD_URL= +PORT=4000 +SECRET_KEY=123456789ABCDEF +API_KEY=123456789ABCDEF +ENV=DEV +DB_HOST=localhost +DB_PORT=5432 +DB_USER=postgres +DB_PASS=postgres +DB_NAME=postgres +B2_BUCKET_NAME=lphub +B2_KEY_ID=123456789ABCDEF +B2_API_KEY=123456789ABCDEF +B2_DOWNLOAD_URL=https://lphub.s3.eu-central-001.backblazeb2.com/ +LOCAL_DEMOS_PATH=/path/to/demos/ diff --git a/backend/handlers/record.go b/backend/handlers/record.go index 91e74b9..25a6c6d 100644 --- a/backend/handlers/record.go +++ b/backend/handlers/record.go @@ -22,7 +22,6 @@ import ( type RecordRequest struct { HostDemo *multipart.FileHeader `json:"host_demo" form:"host_demo" binding:"required" swaggerignore:"true"` PartnerDemo *multipart.FileHeader `json:"partner_demo" form:"partner_demo" swaggerignore:"true"` - PartnerID string `json:"partner_id" form:"partner_id"` } type RecordResponse struct { @@ -197,6 +196,45 @@ func CreateRecordWithDemo(c *gin.Context) { return } } + if os.Getenv("ENV") == "DEV" { + if localPath := os.Getenv("LOCAL_DEMOS_PATH"); localPath != "" { + for i, header := range demoFileHeaders { + f, err := header.Open() + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + defer f.Close() + var objectName string + if i == 0 { + objectName = hostDemoUUID + ".dem" + } else if i == 1 { + objectName = partnerDemoUUID + ".dem" + } + demo, err := os.Create(localPath + objectName) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + defer demo.Close() + _, err = io.Copy(demo, f) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + } + if err = tx.Commit(); err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + c.JSON(http.StatusOK, models.Response{ + Success: true, + Message: "Successfully created record.", + Data: RecordResponse{ScoreCount: hostDemoScoreCount, ScoreTime: hostDemoScoreTime}, + }) + return + } + } // Everything is good, upload the demo files. client, err := b2.NewClient(context.Background(), os.Getenv("B2_KEY_ID"), os.Getenv("B2_API_KEY")) if err != nil { @@ -347,32 +385,46 @@ func DownloadDemoWithID(c *gin.Context) { return } - fileName := uuid + ".dem" - url := os.Getenv("B2_DOWNLOAD_URL") + fileName - output, err := os.Create(fileName) - if err != nil { - c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) - return - } - defer os.Remove(fileName) - defer output.Close() - response, err := http.Get(url) - if err != nil { - c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) - return + localPath := "" + if os.Getenv("ENV") == "DEV" { + localPath = os.Getenv("LOCAL_DEMOS_PATH") } - defer response.Body.Close() - _, err = io.Copy(output, response.Body) - if err != nil { - c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) - return + + fileName := uuid + ".dem" + if localPath == "" { + url := os.Getenv("B2_DOWNLOAD_URL") + fileName + output, err := os.Create(fileName) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + defer os.Remove(fileName) + defer output.Close() + response, err := http.Get(url) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } + defer response.Body.Close() + _, err = io.Copy(output, response.Body) + if err != nil { + c.JSON(http.StatusOK, models.ErrorResponse(err.Error())) + return + } } + // Downloaded file c.Header("Content-Description", "File Transfer") c.Header("Content-Transfer-Encoding", "binary") c.Header("Content-Disposition", "attachment; filename="+fileName) c.Header("Content-Type", "application/octet-stream") - c.File(fileName) + + if localPath == "" { + c.File(fileName) + } else { + c.File(localPath + fileName) + } + // c.FileAttachment() } -- cgit v1.2.3 From 7746337964fd50b2eac170333efa05e7a5676a1c Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Thu, 24 Jul 2025 14:09:11 +0300 Subject: feat/backend: add newrelic integration (#274) --- backend/.env.example | 1 + backend/go.mod | 4 ++++ backend/go.sum | 9 +++++++++ backend/main.go | 11 +++++++++++ 4 files changed, 25 insertions(+) (limited to 'backend/.env.example') diff --git a/backend/.env.example b/backend/.env.example index b0a7101..0318aa1 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -12,3 +12,4 @@ B2_KEY_ID=123456789ABCDEF B2_API_KEY=123456789ABCDEF B2_DOWNLOAD_URL=https://lphub.s3.eu-central-001.backblazeb2.com/ LOCAL_DEMOS_PATH=/path/to/demos/ +NEWRELIC_LICENSE_KEY=abcdef123456789 diff --git a/backend/go.mod b/backend/go.mod index e6f87c4..f9fe0db 100644 --- a/backend/go.mod +++ b/backend/go.mod @@ -32,9 +32,13 @@ require ( github.com/josharian/intern v1.0.0 // indirect github.com/klauspost/cpuid/v2 v2.2.8 // indirect github.com/mailru/easyjson v0.7.7 // indirect + github.com/newrelic/go-agent/v3 v3.40.1 // indirect + github.com/newrelic/go-agent/v3/integrations/nrgin v1.4.1 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect golang.org/x/arch v0.10.0 // indirect golang.org/x/tools v0.25.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect + google.golang.org/grpc v1.65.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/backend/go.sum b/backend/go.sum index 59301ae..f655023 100644 --- a/backend/go.sum +++ b/backend/go.sum @@ -74,6 +74,10 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/newrelic/go-agent/v3 v3.40.1 h1:8nb4R252Fpuc3oySvlHpDwqySqaPWL5nf7ZVEhqtUeA= +github.com/newrelic/go-agent/v3 v3.40.1/go.mod h1:X0TLXDo+ttefTIue1V96Y5seb8H6wqf6uUq4UpPsYj8= +github.com/newrelic/go-agent/v3/integrations/nrgin v1.4.1 h1:a1waTQToxDTKd31LpwpaFHKWPj8Dav/BrzZayBiiAq8= +github.com/newrelic/go-agent/v3/integrations/nrgin v1.4.1/go.mod h1:mEbfsZIxBYIPT7FzboYvE+ed2ft4SCFXoCvleI2v5JQ= github.com/pektezol/bitreader v1.4.3 h1:+WjsD6qOAaI6Q1jOOlEJcnaEso8vPMKRZnnaDnZhTSg= github.com/pektezol/bitreader v1.4.3/go.mod h1:xBQEsQpOf8B5yPrnOTkirZGyVUV6Bqp0ups2RIlTskk= github.com/pektezol/steam_go v1.1.2 h1:fta6SW+La8NfmCtR/Kn73bAmTBvCgUkkLCplsJGzx7g= @@ -150,6 +154,11 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE= golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 h1:Zy9XzmMEflZ/MAaA7vNcoebnRAld7FsPW1EeBB7V0m8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= +google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/backend/main.go b/backend/main.go index a1a4a20..e422359 100644 --- a/backend/main.go +++ b/backend/main.go @@ -11,6 +11,8 @@ import ( "github.com/gin-gonic/gin" "github.com/joho/godotenv" + nrgin "github.com/newrelic/go-agent/v3/integrations/nrgin" + "github.com/newrelic/go-agent/v3/newrelic" ) // @title Least Portals Hub @@ -30,7 +32,16 @@ func main() { if os.Getenv("ENV") == "PROD" { gin.SetMode(gin.ReleaseMode) } + app, err := newrelic.NewApplication( + newrelic.ConfigAppName("lphub"), + newrelic.ConfigLicense(os.Getenv("NEWRELIC_LICENSE_KEY")), + newrelic.ConfigAppLogForwardingEnabled(true), + ) + if err != nil { + log.Fatal("Error instrumenting newrelic") + } router := gin.Default() + router.Use(nrgin.Middleware(app)) database.ConnectDB() api.InitRoutes(router) // for debugging -- cgit v1.2.3