From d720191ad3fbbef30c37a7beaa4fda25b44ae0f3 Mon Sep 17 00:00:00 2001 From: Leonardo Christino <leomilho@gmail.com> Date: Tue, 3 Oct 2023 18:00:21 +0200 Subject: [PATCH] chore: backend messaging full refactor --- Makefile | 8 +- cmd/schema-orchestrator/main.go | 32 +----- go.mod | 28 ++++-- go.sum | 91 +++++++++++++---- internal/drivers/webdriver/cors.go | 24 ----- internal/drivers/webdriver/interface.go | 14 --- internal/drivers/webdriver/schemaRequest.go | 97 +++++++++---------- internal/drivers/webdriver/web.go | 37 ++----- internal/usecases/produce/produce.go | 15 ++- .../usecases/produce/produceCachedSchema.go | 2 +- .../produce/produceSchemaRetrievalRequest.go | 9 +- 11 files changed, 162 insertions(+), 195 deletions(-) mode change 100644 => 100755 cmd/schema-orchestrator/main.go mode change 100644 => 100755 go.mod mode change 100644 => 100755 go.sum delete mode 100644 internal/drivers/webdriver/cors.go delete mode 100644 internal/drivers/webdriver/interface.go mode change 100644 => 100755 internal/drivers/webdriver/schemaRequest.go mode change 100644 => 100755 internal/drivers/webdriver/web.go mode change 100644 => 100755 internal/usecases/produce/produce.go mode change 100644 => 100755 internal/usecases/produce/produceCachedSchema.go mode change 100644 => 100755 internal/usecases/produce/produceSchemaRetrievalRequest.go diff --git a/Makefile b/Makefile index 5ff4402..4028b7d 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ linux: login # Build for linux run: ./builds/main -develop: +develop: tidy # Usernames and Password only usable in locally in dev environment! $(eval export RABBIT_USER := rabbitmq) $(eval export RABBIT_PASSWORD := DevOnlyPass) @@ -63,7 +63,9 @@ log: login: echo -e "machine git.science.uu.nl\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc -push: - @go get -u -v all +tidy: + GOPROXY=direct go get -u -v all @go mod tidy --compat=1.21 + +push: tidy @docker build --progress plain -t harbor.graphpolairs.com/graphpolaris/schema-orchestrator:latest . \ No newline at end of file diff --git a/cmd/schema-orchestrator/main.go b/cmd/schema-orchestrator/main.go old mode 100644 new mode 100755 index 8ac29e4..f081f99 --- a/cmd/schema-orchestrator/main.go +++ b/cmd/schema-orchestrator/main.go @@ -6,18 +6,12 @@ This program has been developed by students from the bachelor Computer Science a package main import ( - "os" "schema-orchestrator/internal/drivers/rpcdriver" "schema-orchestrator/internal/drivers/webdriver" "schema-orchestrator/internal/usecases/produce" "schema-orchestrator/internal/usecases/schema" - "strconv" - "github.com/rs/zerolog" - "github.com/rs/zerolog/log" - - "git.science.uu.nl/graphpolaris/broker" - "git.science.uu.nl/graphpolaris/keyvaluestore" + "git.science.uu.nl/graphpolaris/go-common/microservice" ) /* @@ -25,33 +19,16 @@ This is the main method, it executes the code for this service */ func main() { // Set up logging - zerolog.TimeFieldFormat = zerolog.TimeFormatUnix - logLevel, log_err := strconv.Atoi(os.Getenv("LOG_LEVEL")) - if log_err != nil { - log.Error().AnErr("err", log_err).Msg("LOG_LEVEL not type int or empty") - } - zerolog.SetGlobalLevel(zerolog.Level(logLevel)) - log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + microservice.SetupLogging() // Create rpcDriver rpcDriver := rpcdriver.New() // Create broker driver - port, err := strconv.Atoi(os.Getenv("RABBIT_PORT")) - if err != nil { - log.Panic().AnErr("err", err).Msg("invalid rabbitmq port") - return - } - brokerDriver := broker.NewDriver(os.Getenv("RABBIT_USER"), os.Getenv("RABBIT_PASSWORD"), os.Getenv("RABBIT_HOST"), port) + brokerDriver := microservice.ConnectRabbit() // Create keyvaluestore to get the queue with which clients are connected (websockets) - redisService := keyvaluestore.NewDriver() - err = redisService.Connect(os.Getenv("REDIS_ADDRESS"), os.Getenv("REDIS_PASSWORD")) - if err != nil { - log.Panic().Str("address", os.Getenv("REDIS_ADDRESS")).AnErr("Error", err).Msg("error connecting to redis") - } else { - log.Info().Str("address", os.Getenv("REDIS_ADDRESS")).Msg("successfully connected to redis") - } + redisService := microservice.ConnectRedis() // Create producer service produceService := produce.NewService(brokerDriver, redisService, rpcDriver) @@ -62,7 +39,6 @@ func main() { // Create webdriver webDriver := webdriver.CreateListener(schemaService) - webDriver.SetupHandlers() webDriver.Start() select {} diff --git a/go.mod b/go.mod old mode 100644 new mode 100755 index bd595c5..50bfae3 --- a/go.mod +++ b/go.mod @@ -3,28 +3,36 @@ module schema-orchestrator go 1.21 require ( - git.science.uu.nl/graphpolaris/broker v0.0.2 - git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20230912093203-1b3c86eb558a + git.science.uu.nl/graphpolaris/broker v0.0.4 + git.science.uu.nl/graphpolaris/go-common v0.0.0-20231010124355-2dfa28399701 + git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20231010112233-72e8bb9a9fd3 github.com/arangodb/go-driver v1.6.0 - github.com/go-chi/cors v1.2.1 - github.com/rs/zerolog v1.30.0 - google.golang.org/grpc v1.58.0 + github.com/rs/zerolog v1.31.0 + google.golang.org/grpc v1.58.2 google.golang.org/protobuf v1.31.0 ) require ( + cloud.google.com/go/compute v1.23.0 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/christinoleo/alice v0.1.24 // indirect + github.com/christinoleo/alice v0.1.27 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/go-chi/chi/v5 v5.0.10 // indirect + github.com/go-chi/cors v1.2.1 // indirect github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/golang/protobuf v1.5.3 // indirect + github.com/google/go-github v17.0.0+incompatible // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/streadway/amqp v1.1.0 // indirect - golang.org/x/net v0.15.0 // indirect - golang.org/x/sys v0.12.0 // indirect + github.com/rabbitmq/amqp091-go v1.9.0 // indirect + golang.org/x/net v0.16.0 // indirect + golang.org/x/oauth2 v0.13.0 // indirect + golang.org/x/sys v0.13.0 // indirect golang.org/x/text v0.13.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c // indirect ) diff --git a/go.sum b/go.sum old mode 100644 new mode 100755 index 5f4de62..5100dd7 --- a/go.sum +++ b/go.sum @@ -1,15 +1,21 @@ -git.science.uu.nl/graphpolaris/broker v0.0.2 h1:mSWqoziHkimghEXXw2RNtDdyE/V4sFxQ2hSl+oEdulg= -git.science.uu.nl/graphpolaris/broker v0.0.2/go.mod h1:ge/HE3nMHeqGMQonNT+Q0jPwhctlw2jLPB6dQCNPNMw= -git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20230912093203-1b3c86eb558a h1:xfioxvqhsPqIE+znlJymcs2JWyL1339jaqRpzR8x1MM= -git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20230912093203-1b3c86eb558a/go.mod h1:8vrY9TvLkFD74n0Bgg1m+t0Ktl9QeQIvBBgD9E/+ndw= +cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= +cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +git.science.uu.nl/graphpolaris/broker v0.0.4 h1:3S9wVgW8RSgXctVsWYYtrNfxXuZ9RjiVTvOBsNbGMpc= +git.science.uu.nl/graphpolaris/broker v0.0.4/go.mod h1:CU4gorbc1f7PcIUzMwySlf7um48cI6+GnzYLm5J2yIg= +git.science.uu.nl/graphpolaris/go-common v0.0.0-20231010124355-2dfa28399701 h1:be5gUKLJzGtWF+8/Lv0o7qh99omTLsq8NySXtnBYu1o= +git.science.uu.nl/graphpolaris/go-common v0.0.0-20231010124355-2dfa28399701/go.mod h1:HDaqtuK/Wsw1sDb75QXmRlcINvtKRSMfpTuIyN5fjGo= +git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20231010112233-72e8bb9a9fd3 h1:ohVlcO1RErj3IDXDKUgQfxo+U6tBur7k3qZ+YwM0sHY= +git.science.uu.nl/graphpolaris/keyvaluestore v0.0.0-20231010112233-72e8bb9a9fd3/go.mod h1:q0Ov6/T4vpjoLM2mT5RILj3jb+QJKklqtWR3UDvj1A4= github.com/arangodb/go-driver v1.6.0 h1:NFWj/idqXZxhFVueihMSI2R9NotNIsgvNfM/xmpekb4= github.com/arangodb/go-driver v1.6.0/go.mod h1:HQmdGkvNMVBTE3SIPSQ8T/ZddC6iwNsfMR+dDJQxIsI= github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e h1:Xg+hGrY2LcQBbxd0ZFdbGSyRKTYMZCfBbw/pMJFOk1g= github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e/go.mod h1:mq7Shfa/CaixoDxiyAAc5jZ6CVBAyPaNQCGS7mkj4Ho= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/christinoleo/alice v0.1.24 h1:axMZBs82jNNogd8oRvW11unOWL7znX9pXSj1i+MsZFg= -github.com/christinoleo/alice v0.1.24/go.mod h1:RCB8Vabxdlb5NGEmDxNBLWPSmt+suPGrbUWMl8HUDLo= +github.com/christinoleo/alice v0.1.27 h1:fU7GFXAvSWYLdmYn6szsFJSbei+BOpFFzRNtEVh//kI= +github.com/christinoleo/alice v0.1.27/go.mod h1:W7LsKPBzBxh6ony9wzm6Ha7WDsCqyCcZ/2EYUBYkzZM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 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= @@ -18,21 +24,30 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/go-chi/chi/v5 v5.0.10 h1:rLz5avzKpjqxrYwXNfmjkrYYXOyLJd37pz53UFHC6vk= +github.com/go-chi/chi/v5 v5.0.10/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/cors v1.2.1 h1:xEC8UT3Rlp2QuWNEr4Fs/c2EAGVKBwy/1vHx3bppil4= github.com/go-chi/cors v1.2.1/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= @@ -46,39 +61,73 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/rabbitmq/amqp091-go v1.9.0 h1:qrQtyzB4H8BQgEuJwhmVQqVHB9O4+MNDJCCAcpc3Aoo= +github.com/rabbitmq/amqp091-go v1.9.0/go.mod h1:+jPrT9iY2eLjRaMSRHUhc3z14E/l85kv/f+6luSD3pc= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= -github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= -github.com/streadway/amqp v1.1.0 h1:py12iX8XSyI7aN/3dUT8DFIDJazNJsVJdxNVEpnQTZM= -github.com/streadway/amqp v1.1.0/go.mod h1:WYSrTEYHOXHd0nwFeUXAe2G2hRnQT+deZJJf88uS9Bg= +github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= +github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= -golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= +go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.16.0 h1:7eBu7KsSvFDtSXUIDbh3aqlK4DPsZ1rByC8PFfBThos= +golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY= +golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb h1:Isk1sSH7bovx8Rti2wZK0UZF6oraBDK74uoyLEEVFN0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230913181813-007df8e322eb/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= -google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o= -google.golang.org/grpc v1.58.0/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c h1:jHkCUWkseRf+W+edG5hMzr/Uh1xkDREY4caybAq4dpY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0= +google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= +google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/drivers/webdriver/cors.go b/internal/drivers/webdriver/cors.go deleted file mode 100644 index 0023805..0000000 --- a/internal/drivers/webdriver/cors.go +++ /dev/null @@ -1,24 +0,0 @@ -/* -This program has been developed by students from the bachelor Computer Science at Utrecht University within the Software Project course. -© Copyright Utrecht University (Department of Information and Computing Sciences) -*/ - -package webdriver - -import ( - "net/http" - "os" -) - -/* -setupResponse sets up response headers for CORS - - w: *http.ResponseWriter, writes the responses for http - r: *http.Request, sends the requests for http -*/ -func setupResponse(w *http.ResponseWriter, r *http.Request) { - (*w).Header().Set("Access-Control-Allow-Origin", os.Getenv("ALLOWED_ORIGINS")) - (*w).Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") - (*w).Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization") - (*w).Header().Set("Access-Control-Allow-Credentials", "true") -} diff --git a/internal/drivers/webdriver/interface.go b/internal/drivers/webdriver/interface.go deleted file mode 100644 index 8a7f709..0000000 --- a/internal/drivers/webdriver/interface.go +++ /dev/null @@ -1,14 +0,0 @@ -/* -This program has been developed by students from the bachelor Computer Science at Utrecht University within the Software Project course. -© Copyright Utrecht University (Department of Information and Computing Sciences) -*/ - -package webdriver - -/* -A ListenerInterface models what a web listener should do -*/ -type ListenerInterface interface { - Start() - SetupHandlers() -} diff --git a/internal/drivers/webdriver/schemaRequest.go b/internal/drivers/webdriver/schemaRequest.go old mode 100644 new mode 100755 index 6dc8aa9..970da6a --- a/internal/drivers/webdriver/schemaRequest.go +++ b/internal/drivers/webdriver/schemaRequest.go @@ -2,7 +2,6 @@ package webdriver import ( "encoding/json" - "io/ioutil" "net/http" "os" @@ -16,61 +15,59 @@ Handles incoming schema requests produceService: produce.UseCase, the usecase for the producer service Return: http.Handler, returns an http handler */ -func (l *Listener) schemaRequestHandler() http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // Setup CORS - setupResponse(&w, r) +func (l *Listener) schemaRequestHandler(w http.ResponseWriter, r *http.Request) { + log. + Trace(). + Str("schemaRequestHandler", "loading headers"). + Msg("processing schema request") - log. - Trace(). - Str("schemaRequestHandler", "loading headers"). - Msg("processing schema request") + // Publish a message into the query queue - // Publish a message into the query queue - body, err := ioutil.ReadAll(r.Body) - if err != nil { - w.WriteHeader(http.StatusInternalServerError) - return - } + // Grab the databaseName and cached bool from the request + var temp map[string]interface{} + err := json.NewDecoder(r.Body).Decode(&temp) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + log.Trace().Str("schemaRequestHandler", "processing body").Any("body", temp).Msg("processing schema request") - log. - Trace(). - Str("schemaRequestHandler", "processing body"). - Msgf("processing schema request '%v'", body) + databaseName, ok := temp["databaseName"].(string) + if !ok { + w.WriteHeader(http.StatusBadRequest) + return + } - // Grab the databaseName and cached bool from the request - var temp map[string]interface{} - json.Unmarshal(body, &temp) - databaseName, ok := temp["databaseName"].(string) - if !ok { - w.WriteHeader(http.StatusBadRequest) - return - } + log. + Trace(). + Str("schemaRequestHandler - Databasename", databaseName). + Msg("processing schema request") - log. - Trace(). - Str("schemaRequestHandler - Databasename", databaseName). - Msg("processing schema request") + cached, ok := temp["cached"].(bool) + if !ok { + w.WriteHeader(http.StatusBadRequest) + return + } - cached, ok := temp["cached"].(bool) - if !ok { - w.WriteHeader(http.StatusBadRequest) - return - } + // Pass request to schema usecase + UserID := "UserID" + SessionID := "SessionID" + if os.Getenv("DEV") != "true" { + UserID = r.Header["Userid"][0] + SessionID = r.Header["Sessionid"][0] + } - // Pass request to schema usecase - UserID := "UserID" - SessionID := "SessionID" - if os.Getenv("DEV") != "true" { - UserID = r.Header["Userid"][0] - SessionID = r.Header["Sessionid"][0] - } - err = l.schemaService.Retrieve(&body, SessionID, UserID, databaseName, cached) - if err != nil { - w.WriteHeader(http.StatusInternalServerError) - return - } + body, err := json.Marshal(&temp) // json -> bytes + if err != nil { + w.WriteHeader(http.StatusBadRequest) + return + } - w.WriteHeader(http.StatusOK) - }) + err = l.schemaService.Retrieve(&body, SessionID, UserID, databaseName, cached) + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + return + } + + w.WriteHeader(http.StatusOK) } diff --git a/internal/drivers/webdriver/web.go b/internal/drivers/webdriver/web.go old mode 100644 new mode 100755 index 3d3c6e4..13172a6 --- a/internal/drivers/webdriver/web.go +++ b/internal/drivers/webdriver/web.go @@ -6,19 +6,16 @@ This program has been developed by students from the bachelor Computer Science a package webdriver import ( - "log" - "net/http" - "os" "schema-orchestrator/internal/usecases/schema" - "strings" - "github.com/go-chi/cors" + "git.science.uu.nl/graphpolaris/go-common/microservice" ) /* A Listener is a concrete implementation for a web listener */ type Listener struct { + api microservice.API schemaService schema.UseCase } @@ -30,6 +27,7 @@ CreateListener creates a web listener */ func CreateListener(schemaService schema.UseCase) *Listener { return &Listener{ + api: microservice.New(), schemaService: schemaService, } } @@ -38,30 +36,7 @@ func CreateListener(schemaService schema.UseCase) *Listener { Start starts the web listener on port 3002 */ func (l *Listener) Start() { - log.Println("Started listening on port :3002") - http.ListenAndServe(":3002", nil) -} - -/* -SetupHandlers sets up the web handlers for this listener -*/ -func (l *Listener) SetupHandlers() { - log.Println("Setting up handlers") - handler := l.schemaRequestHandler() - - AllowedOrigins := strings.Split(os.Getenv("ALLOWED_ORIGINS"), ",") - - c := cors.New(cors.Options{ - AllowedOrigins: AllowedOrigins, - AllowOriginFunc: func(r *http.Request, origin string) bool { return true }, - AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, - AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token", "Access-Control-Allow-Origin"}, - ExposedHeaders: []string{"Link"}, - AllowCredentials: true, - MaxAge: 300, // Maximum value not ignored by any of major browsers - // Debug: true, - }) - handler = c.Handler(handler) - - http.Handle("/", handler) + r := l.api.Routes() + r.Post("/", l.schemaRequestHandler) + l.api.Start(3002, r) } diff --git a/internal/usecases/produce/produce.go b/internal/usecases/produce/produce.go old mode 100644 new mode 100755 index c2807b5..f7c5a91 --- a/internal/usecases/produce/produce.go +++ b/internal/usecases/produce/produce.go @@ -9,6 +9,7 @@ import ( "schema-orchestrator/internal/drivers/rpcdriver" "git.science.uu.nl/graphpolaris/broker" + "git.science.uu.nl/graphpolaris/broker/producer" "git.science.uu.nl/graphpolaris/keyvaluestore" ) @@ -17,14 +18,15 @@ Service wraps consumer methods */ type Service struct { brokerDriver broker.Interface - requestProducer broker.Producer - resultProducer broker.Producer + requestProducer producer.BrokerProducerI + resultProducer producer.BrokerProducerI keyValueStore keyvaluestore.Interface rpcDriver rpcdriver.Interface } /* NewService creates a new service + broker: broker.Interface, the broker for the new service keyValueStore: keyvaluestore.Interface, the key value store for the new service rpcDriver: rpcdriver.Interface, the rpc driver of the new interface @@ -43,11 +45,6 @@ Start starts the producer */ func (s *Service) Start() { // Create producer - p := s.brokerDriver.CreateProducer("requests-exchange") - - s.requestProducer = p - - rp := s.brokerDriver.CreateProducer("ui-direct-exchange") - - s.resultProducer = rp + s.requestProducer = s.brokerDriver.CreateProducer("requests-exchange", "schema-orchestrator") + s.resultProducer = s.brokerDriver.CreateProducer("ui-direct-exchange", "schema-orchestrator") } diff --git a/internal/usecases/produce/produceCachedSchema.go b/internal/usecases/produce/produceCachedSchema.go old mode 100644 new mode 100755 index c667d16..988e16b --- a/internal/usecases/produce/produceCachedSchema.go +++ b/internal/usecases/produce/produceCachedSchema.go @@ -25,5 +25,5 @@ func (s *Service) ProduceCachedSchema(schema *[]byte, sessionID *string) { headers := make(map[string]interface{}) headers["sessionID"] = *sessionID - s.resultProducer.PublishMessage(schema, clientQueueID.(string), &headers) + s.resultProducer.PublishMessageJsonHeaders(schema, clientQueueID.(string), &headers) } diff --git a/internal/usecases/produce/produceSchemaRetrievalRequest.go b/internal/usecases/produce/produceSchemaRetrievalRequest.go old mode 100644 new mode 100755 index c0405a8..5114736 --- a/internal/usecases/produce/produceSchemaRetrievalRequest.go +++ b/internal/usecases/produce/produceSchemaRetrievalRequest.go @@ -4,6 +4,7 @@ import "log" /* ProduceSchemaRetrievalRequest publishes a schema retrieval request + request: []byte, the schema retrieval request sessionID: string, the ID of the session clientID: string, the ID of the client @@ -19,18 +20,18 @@ func (s *Service) ProduceSchemaRetrievalRequest(request []byte, sessionID string databaseType, err := s.rpcDriver.GetDatabaseType(&clientID, &databaseName) if err != nil { log.Println("Error producing schema retrieval! No database type found") -// log.Println("No valid database type found, defaulting to neo4j") // TODO -// s.requestProducer.PublishMessage(&request, "neo4j-schema-request", &headers) + // log.Println("No valid database type found, defaulting to neo4j") // TODO + // s.requestProducer.PublishMessage(&request, "neo4j-schema-request", &headers) return // TODO } switch *databaseType { case "arangodb": log.Println("Publishing to arangodb queue") - s.requestProducer.PublishMessage(&request, "arangodb-schema-request", &headers) + s.requestProducer.PublishMessageJsonHeaders(&request, "arangodb-schema-request", &headers) case "neo4j": log.Println("Publishing to neo4j queue") - s.requestProducer.PublishMessage(&request, "neo4j-schema-request", &headers) + s.requestProducer.PublishMessageJsonHeaders(&request, "neo4j-schema-request", &headers) default: log.Println("No valid database type found") return -- GitLab