Skip to content
Snippets Groups Projects
Commit 72b14376 authored by thijsheijden's avatar thijsheijden
Browse files

Added database info retrieval from user service

Most of this code was taken straight from the schema service. No tests
were written because this is entirely dependent on external
dependencies.
parent 9c88e1a1
No related branches found
No related tags found
No related merge requests found
Showing
with 592 additions and 47 deletions
builds/ builds/
cover.html cover.html
cover.out cover.out
coverage.txt
\ No newline at end of file
...@@ -4,8 +4,10 @@ import ( ...@@ -4,8 +4,10 @@ import (
"query-service/internal/adapters/brokeradapter" "query-service/internal/adapters/brokeradapter"
"query-service/internal/drivers/brokerdriver" "query-service/internal/drivers/brokerdriver"
"query-service/internal/drivers/keyvaluedriver" "query-service/internal/drivers/keyvaluedriver"
"query-service/internal/drivers/rpcdriver"
"query-service/internal/usecases/consume" "query-service/internal/usecases/consume"
"query-service/internal/usecases/convertquery" "query-service/internal/usecases/convertquery"
"query-service/internal/usecases/databaseinfo"
"query-service/internal/usecases/produce" "query-service/internal/usecases/produce"
"query-service/internal/usecases/request" "query-service/internal/usecases/request"
"query-service/pkg/logger" "query-service/pkg/logger"
...@@ -18,6 +20,9 @@ func main() { ...@@ -18,6 +20,9 @@ func main() {
// MARK: Create relevant services // MARK: Create relevant services
redisService := keyvaluedriver.NewRedisDriver() redisService := keyvaluedriver.NewRedisDriver()
// Create new rpc driver
rpcDriver := rpcdriver.New()
// MARK: Create alice RabbitMQ services // MARK: Create alice RabbitMQ services
brokerGateway := brokeradapter.CreateGateway() brokerGateway := brokeradapter.CreateGateway()
aliceBroker := brokerdriver.CreateAliceBroker(brokerGateway) aliceBroker := brokerdriver.CreateAliceBroker(brokerGateway)
...@@ -30,7 +35,9 @@ func main() { ...@@ -30,7 +35,9 @@ func main() {
requestSenderService := request.NewService() requestSenderService := request.NewService()
consumeService := consume.NewService(aliceBroker, produceService, convertQueryService, requestSenderService) databaseInfoService := databaseinfo.NewService(rpcDriver)
consumeService := consume.NewService(aliceBroker, produceService, convertQueryService, requestSenderService, databaseInfoService)
// MARK: Start services // MARK: Start services
redisService.Start() redisService.Start()
......
...@@ -5,7 +5,7 @@ metadata: ...@@ -5,7 +5,7 @@ metadata:
labels: labels:
app: query-handler app: query-handler
spec: spec:
replicas: 3 replicas: 1
selector: selector:
matchLabels: matchLabels:
app: query-handler app: query-handler
......
...@@ -8,4 +8,7 @@ require ( ...@@ -8,4 +8,7 @@ require (
github.com/streadway/amqp v1.0.0 github.com/streadway/amqp v1.0.0
github.com/stretchr/testify v1.7.0 github.com/stretchr/testify v1.7.0
github.com/thijsheijden/alice v0.1.9 github.com/thijsheijden/alice v0.1.9
golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe // indirect
google.golang.org/grpc v1.37.0
google.golang.org/protobuf v1.25.0
) )
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/arangodb/go-driver v0.0.0-20210304082257-d7e0ea043b7f h1:MEdxM6EhSFo2ecumBN0CC6s1zMWDpNvcmDIHEfMvl18= github.com/arangodb/go-driver v0.0.0-20210304082257-d7e0ea043b7f h1:MEdxM6EhSFo2ecumBN0CC6s1zMWDpNvcmDIHEfMvl18=
github.com/arangodb/go-driver v0.0.0-20210304082257-d7e0ea043b7f/go.mod h1:3NUekcRLpgheFIGEwcOvxilEW73MV1queNKW58k7sdc= github.com/arangodb/go-driver v0.0.0-20210304082257-d7e0ea043b7f/go.mod h1:3NUekcRLpgheFIGEwcOvxilEW73MV1queNKW58k7sdc=
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e h1:Xg+hGrY2LcQBbxd0ZFdbGSyRKTYMZCfBbw/pMJFOk1g= 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/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e/go.mod h1:mq7Shfa/CaixoDxiyAAc5jZ6CVBAyPaNQCGS7mkj4Ho=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/coreos/go-iptables v0.4.3/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= github.com/coreos/go-iptables v0.4.3/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
...@@ -12,26 +17,37 @@ github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG ...@@ -12,26 +17,37 @@ github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= 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/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= 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/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/go-redis/redis/v8 v8.8.0 h1:fDZP58UN/1RD3DjtTXP/fFZ04TFohSYhjZDkcDe2dnw= github.com/go-redis/redis/v8 v8.8.0 h1:fDZP58UN/1RD3DjtTXP/fFZ04TFohSYhjZDkcDe2dnw=
github.com/go-redis/redis/v8 v8.8.0/go.mod h1:F7resOH5Kdug49Otu24RjHWwgK7u9AmtqWMnCV1iP5Y= github.com/go-redis/redis/v8 v8.8.0/go.mod h1:F7resOH5Kdug49Otu24RjHWwgK7u9AmtqWMnCV1iP5Y=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/addlicense v0.0.0-20200817051935-6f4cd4aacc89/go.mod h1:EMjYTRimagHs1FwlIqKyX3wAM0u3rA+McvlIIWmSamA= github.com/google/addlicense v0.0.0-20200817051935-6f4cd4aacc89/go.mod h1:EMjYTRimagHs1FwlIqKyX3wAM0u3rA+McvlIIWmSamA=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/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/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
...@@ -48,6 +64,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= ...@@ -48,6 +64,7 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo=
github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo=
...@@ -71,8 +88,16 @@ go.opentelemetry.io/otel/trace v0.19.0/go.mod h1:4IXiNextNOpPnRlI4ryK69mn5iC84bj ...@@ -71,8 +88,16 @@ go.opentelemetry.io/otel/trace v0.19.0/go.mod h1:4IXiNextNOpPnRlI4ryK69mn5iC84bj
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
...@@ -80,11 +105,14 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R ...@@ -80,11 +105,14 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb h1:eBmm0M9fYhWpKZLjQUUKka/LtIxf46G4fxeEz5KJr9U=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
...@@ -93,12 +121,17 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w ...@@ -93,12 +121,17 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210112080510-489259a85091 h1:DMyOG0U+gKfu8JZzg2UQe9MeaC1X+xQWlAKcRnjxjCw=
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe h1:WdX7u8s3yOigWAhHEaDl8r9G+4XwFQEQFtBMYyN+kXQ=
golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200818005847-188abfa75333/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200818005847-188abfa75333/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
...@@ -108,13 +141,28 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T ...@@ -108,13 +141,28 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.37.0 h1:uSZWeQJX5j11bIQ4AJoj+McDBo29cY1MCoC1wO3ts+c=
google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
...@@ -126,3 +174,5 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= ...@@ -126,3 +174,5 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= 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= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
package rpcdriver
import (
"context"
"query-service/internal/drivers/rpcdriver/databaseInfoService"
"query-service/internal/entity"
"query-service/pkg/logger"
"google.golang.org/grpc"
)
// GetDatabaseInfo opens a gRPC connection to the user management service and retrieves the database info for the given client and database name
func (driver *Driver) GetDatabaseInfo(clientID *string, databaseName *string) (*entity.DatabaseInfo, error) {
conn, err := grpc.Dial("user-management-service:9000", grpc.WithInsecure())
if err != nil {
return nil, err
}
defer conn.Close()
grpcClient := databaseInfoService.NewDatabaseInfoServiceClient(conn)
logger.Log("getting database info for client " + *clientID + " for database " + *databaseName)
response, err := grpcClient.GetDatabaseInfo(context.Background(), &databaseInfoService.DatabaseInfoRequest{ClientID: *clientID, DatabaseName: *databaseName})
if err != nil {
return nil, err
}
return &entity.DatabaseInfo{
URL: response.Url,
Port: int(response.Port),
Username: response.Username,
Password: response.Password,
InternalDatabaseName: response.InternalDatabaseName,
}, nil
}
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.26.0
// protoc v3.14.0
// source: databaseInfo.proto
package databaseInfoService
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type DatabaseInfoRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ClientID string `protobuf:"bytes,1,opt,name=clientID,proto3" json:"clientID,omitempty"`
DatabaseName string `protobuf:"bytes,2,opt,name=databaseName,proto3" json:"databaseName,omitempty"`
}
func (x *DatabaseInfoRequest) Reset() {
*x = DatabaseInfoRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_databaseInfo_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DatabaseInfoRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DatabaseInfoRequest) ProtoMessage() {}
func (x *DatabaseInfoRequest) ProtoReflect() protoreflect.Message {
mi := &file_databaseInfo_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DatabaseInfoRequest.ProtoReflect.Descriptor instead.
func (*DatabaseInfoRequest) Descriptor() ([]byte, []int) {
return file_databaseInfo_proto_rawDescGZIP(), []int{0}
}
func (x *DatabaseInfoRequest) GetClientID() string {
if x != nil {
return x.ClientID
}
return ""
}
func (x *DatabaseInfoRequest) GetDatabaseName() string {
if x != nil {
return x.DatabaseName
}
return ""
}
type DatabaseInfoResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"`
Url string `protobuf:"bytes,2,opt,name=url,proto3" json:"url,omitempty"`
Port int32 `protobuf:"varint,3,opt,name=port,proto3" json:"port,omitempty"`
Username string `protobuf:"bytes,4,opt,name=username,proto3" json:"username,omitempty"`
Password string `protobuf:"bytes,5,opt,name=password,proto3" json:"password,omitempty"`
InternalDatabaseName string `protobuf:"bytes,6,opt,name=internalDatabaseName,proto3" json:"internalDatabaseName,omitempty"`
}
func (x *DatabaseInfoResponse) Reset() {
*x = DatabaseInfoResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_databaseInfo_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DatabaseInfoResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DatabaseInfoResponse) ProtoMessage() {}
func (x *DatabaseInfoResponse) ProtoReflect() protoreflect.Message {
mi := &file_databaseInfo_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DatabaseInfoResponse.ProtoReflect.Descriptor instead.
func (*DatabaseInfoResponse) Descriptor() ([]byte, []int) {
return file_databaseInfo_proto_rawDescGZIP(), []int{1}
}
func (x *DatabaseInfoResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *DatabaseInfoResponse) GetUrl() string {
if x != nil {
return x.Url
}
return ""
}
func (x *DatabaseInfoResponse) GetPort() int32 {
if x != nil {
return x.Port
}
return 0
}
func (x *DatabaseInfoResponse) GetUsername() string {
if x != nil {
return x.Username
}
return ""
}
func (x *DatabaseInfoResponse) GetPassword() string {
if x != nil {
return x.Password
}
return ""
}
func (x *DatabaseInfoResponse) GetInternalDatabaseName() string {
if x != nil {
return x.InternalDatabaseName
}
return ""
}
var File_databaseInfo_proto protoreflect.FileDescriptor
var file_databaseInfo_proto_rawDesc = []byte{
0x0a, 0x12, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x22, 0x55, 0x0a, 0x13, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63,
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63,
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x61, 0x74, 0x61, 0x62,
0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x64,
0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbe, 0x01, 0x0a, 0x14,
0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72,
0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04,
0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74,
0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08,
0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x32, 0x0a, 0x14, 0x69, 0x6e, 0x74, 0x65,
0x72, 0x6e, 0x61, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65,
0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x32, 0x57, 0x0a, 0x13,
0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76,
0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61,
0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73,
0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x44,
0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x47, 0x5a, 0x45, 0x75, 0x73, 0x65, 0x72, 0x2d, 0x6d, 0x61,
0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72,
0x2f, 0x72, 0x70, 0x63, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x2f, 0x64, 0x61, 0x74, 0x61, 0x62,
0x61, 0x73, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_databaseInfo_proto_rawDescOnce sync.Once
file_databaseInfo_proto_rawDescData = file_databaseInfo_proto_rawDesc
)
func file_databaseInfo_proto_rawDescGZIP() []byte {
file_databaseInfo_proto_rawDescOnce.Do(func() {
file_databaseInfo_proto_rawDescData = protoimpl.X.CompressGZIP(file_databaseInfo_proto_rawDescData)
})
return file_databaseInfo_proto_rawDescData
}
var file_databaseInfo_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_databaseInfo_proto_goTypes = []interface{}{
(*DatabaseInfoRequest)(nil), // 0: DatabaseInfoRequest
(*DatabaseInfoResponse)(nil), // 1: DatabaseInfoResponse
}
var file_databaseInfo_proto_depIdxs = []int32{
0, // 0: DatabaseInfoService.GetDatabaseInfo:input_type -> DatabaseInfoRequest
1, // 1: DatabaseInfoService.GetDatabaseInfo:output_type -> DatabaseInfoResponse
1, // [1:2] is the sub-list for method output_type
0, // [0:1] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_databaseInfo_proto_init() }
func file_databaseInfo_proto_init() {
if File_databaseInfo_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_databaseInfo_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DatabaseInfoRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_databaseInfo_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DatabaseInfoResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_databaseInfo_proto_rawDesc,
NumEnums: 0,
NumMessages: 2,
NumExtensions: 0,
NumServices: 1,
},
GoTypes: file_databaseInfo_proto_goTypes,
DependencyIndexes: file_databaseInfo_proto_depIdxs,
MessageInfos: file_databaseInfo_proto_msgTypes,
}.Build()
File_databaseInfo_proto = out.File
file_databaseInfo_proto_rawDesc = nil
file_databaseInfo_proto_goTypes = nil
file_databaseInfo_proto_depIdxs = nil
}
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
package databaseInfoService
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.32.0 or later.
const _ = grpc.SupportPackageIsVersion7
// DatabaseInfoServiceClient is the client API for DatabaseInfoService service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type DatabaseInfoServiceClient interface {
GetDatabaseInfo(ctx context.Context, in *DatabaseInfoRequest, opts ...grpc.CallOption) (*DatabaseInfoResponse, error)
}
type databaseInfoServiceClient struct {
cc grpc.ClientConnInterface
}
func NewDatabaseInfoServiceClient(cc grpc.ClientConnInterface) DatabaseInfoServiceClient {
return &databaseInfoServiceClient{cc}
}
func (c *databaseInfoServiceClient) GetDatabaseInfo(ctx context.Context, in *DatabaseInfoRequest, opts ...grpc.CallOption) (*DatabaseInfoResponse, error) {
out := new(DatabaseInfoResponse)
err := c.cc.Invoke(ctx, "/DatabaseInfoService/GetDatabaseInfo", in, out, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// DatabaseInfoServiceServer is the server API for DatabaseInfoService service.
// All implementations must embed UnimplementedDatabaseInfoServiceServer
// for forward compatibility
type DatabaseInfoServiceServer interface {
GetDatabaseInfo(context.Context, *DatabaseInfoRequest) (*DatabaseInfoResponse, error)
mustEmbedUnimplementedDatabaseInfoServiceServer()
}
// UnimplementedDatabaseInfoServiceServer must be embedded to have forward compatible implementations.
type UnimplementedDatabaseInfoServiceServer struct {
}
func (UnimplementedDatabaseInfoServiceServer) GetDatabaseInfo(context.Context, *DatabaseInfoRequest) (*DatabaseInfoResponse, error) {
return nil, status.Errorf(codes.Unimplemented, "method GetDatabaseInfo not implemented")
}
func (UnimplementedDatabaseInfoServiceServer) mustEmbedUnimplementedDatabaseInfoServiceServer() {}
// UnsafeDatabaseInfoServiceServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to DatabaseInfoServiceServer will
// result in compilation errors.
type UnsafeDatabaseInfoServiceServer interface {
mustEmbedUnimplementedDatabaseInfoServiceServer()
}
func RegisterDatabaseInfoServiceServer(s grpc.ServiceRegistrar, srv DatabaseInfoServiceServer) {
s.RegisterService(&DatabaseInfoService_ServiceDesc, srv)
}
func _DatabaseInfoService_GetDatabaseInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DatabaseInfoRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(DatabaseInfoServiceServer).GetDatabaseInfo(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/DatabaseInfoService/GetDatabaseInfo",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(DatabaseInfoServiceServer).GetDatabaseInfo(ctx, req.(*DatabaseInfoRequest))
}
return interceptor(ctx, in, info, handler)
}
// DatabaseInfoService_ServiceDesc is the grpc.ServiceDesc for DatabaseInfoService service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var DatabaseInfoService_ServiceDesc = grpc.ServiceDesc{
ServiceName: "DatabaseInfoService",
HandlerType: (*DatabaseInfoServiceServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GetDatabaseInfo",
Handler: _DatabaseInfoService_GetDatabaseInfo_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "databaseInfo.proto",
}
package rpcdriver
// A Driver implements the rpc driver interface
type Driver struct {
}
// New creates a new rpc driver
func New() *Driver {
return &Driver{}
}
package rpcdriver
import "query-service/internal/entity"
// DriverInterface specifies the methods a rpc driver should implement
type DriverInterface interface {
GetDatabaseInfo(clientID *string, databaseName *string) (*entity.DatabaseInfo, error)
}
package entity
// DatabaseInfo contains all data necessary to connect to a database
type DatabaseInfo struct {
URL string
Port int
Username string
Password string
InternalDatabaseName string
}
...@@ -2,9 +2,10 @@ package entity ...@@ -2,9 +2,10 @@ package entity
// QueryParsedJSON is used for JSON conversion of the incoming byte array // QueryParsedJSON is used for JSON conversion of the incoming byte array
type QueryParsedJSON struct { type QueryParsedJSON struct {
Return QueryReturnStruct DatabaseName string
Entities []QueryEntityStruct Return QueryReturnStruct
Relations []QueryRelationStruct Entities []QueryEntityStruct
Relations []QueryRelationStruct
// Limit is for limiting the amount of paths AQL will return in a relation let statement // Limit is for limiting the amount of paths AQL will return in a relation let statement
Limit int Limit int
......
...@@ -3,6 +3,7 @@ package consume ...@@ -3,6 +3,7 @@ package consume
import ( import (
"query-service/internal/drivers/brokerdriver" "query-service/internal/drivers/brokerdriver"
"query-service/internal/usecases/convertquery" "query-service/internal/usecases/convertquery"
"query-service/internal/usecases/databaseinfo"
"query-service/internal/usecases/produce" "query-service/internal/usecases/produce"
"query-service/internal/usecases/request" "query-service/internal/usecases/request"
) )
...@@ -10,19 +11,21 @@ import ( ...@@ -10,19 +11,21 @@ import (
// Service wraps consumer methods // Service wraps consumer methods
// broker is Alice broker created in brockerdriver driver // broker is Alice broker created in brockerdriver driver
type Service struct { type Service struct {
broker brokerdriver.Broker broker brokerdriver.Broker
producer produce.UseCase producer produce.UseCase
queryConverter convertquery.UseCase queryConverter convertquery.UseCase
requestSender request.UseCase requestSender request.UseCase
databaseInfoService databaseinfo.UseCase
} }
// NewService creates a new service // NewService creates a new service
func NewService(broker brokerdriver.Broker, produceService produce.UseCase, convertQueryService convertquery.UseCase, requestSenderService request.UseCase) *Service { func NewService(broker brokerdriver.Broker, produceService produce.UseCase, convertQueryService convertquery.UseCase, requestSenderService request.UseCase, databaseInfoService databaseinfo.UseCase) *Service {
return &Service{ return &Service{
broker: broker, broker: broker,
producer: produceService, producer: produceService,
queryConverter: convertQueryService, queryConverter: convertQueryService,
requestSender: requestSenderService, requestSender: requestSenderService,
databaseInfoService: databaseInfoService,
} }
} }
......
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
mockbrokerdriver "query-service/internal/drivers/brokerdriver/mock" mockbrokerdriver "query-service/internal/drivers/brokerdriver/mock"
mockkeyvaluedriver "query-service/internal/drivers/keyvaluedriver/mock" mockkeyvaluedriver "query-service/internal/drivers/keyvaluedriver/mock"
mockconvertquery "query-service/internal/usecases/convertquery/mock" mockconvertquery "query-service/internal/usecases/convertquery/mock"
mockdatabaseinfo "query-service/internal/usecases/databaseinfo/mock"
"query-service/internal/usecases/produce" "query-service/internal/usecases/produce"
mockrequest "query-service/internal/usecases/request/mock" mockrequest "query-service/internal/usecases/request/mock"
"testing" "testing"
...@@ -44,11 +45,14 @@ func TestHandleCorrectMessage(t *testing.T) { ...@@ -44,11 +45,14 @@ func TestHandleCorrectMessage(t *testing.T) {
convertQueryService := mockconvertquery.NewService() convertQueryService := mockconvertquery.NewService()
// Create new request sender service // Create new request sender service
requestSenderService := mockrequest.NewService() requestSenderService := mockrequest.NewService()
// Create mock databaseinfo service
databaseInfoService := mockdatabaseinfo.NewService()
// Create new service // Create new service
service := NewService(mockBroker, producerService, convertQueryService, requestSenderService) service := NewService(mockBroker, producerService, convertQueryService, requestSenderService, databaseInfoService)
// Create mock session and mock queue // Create mock session and mock queue
mockSession := "mock-session" mockSession := "mock-session"
mockClient := "mock-client"
mockQueue := "mock-queue" mockQueue := "mock-queue"
// Set the test-session sessionID queue to mock-queue in key value store // Set the test-session sessionID queue to mock-queue in key value store
...@@ -57,6 +61,7 @@ func TestHandleCorrectMessage(t *testing.T) { ...@@ -57,6 +61,7 @@ func TestHandleCorrectMessage(t *testing.T) {
// Create headers containing a sessionID // Create headers containing a sessionID
headers := make(map[string]interface{}) headers := make(map[string]interface{})
headers["sessionID"] = mockSession headers["sessionID"] = mockSession
headers["clientID"] = mockClient
mockMessage := brokeradapter.Message{ mockMessage := brokeradapter.Message{
Headers: headers, Headers: headers,
Body: []byte("test message"), Body: []byte("test message"),
...@@ -98,8 +103,10 @@ func TestHandleMessageNoSessionID(t *testing.T) { ...@@ -98,8 +103,10 @@ func TestHandleMessageNoSessionID(t *testing.T) {
convertQueryService := mockconvertquery.NewService() convertQueryService := mockconvertquery.NewService()
// Create new request sender service // Create new request sender service
requestSenderService := mockrequest.NewService() requestSenderService := mockrequest.NewService()
// Create mock databaseinfo service
databaseInfoService := mockdatabaseinfo.NewService()
// Create new service // Create new service
service := NewService(mockBroker, producerService, convertQueryService, requestSenderService) service := NewService(mockBroker, producerService, convertQueryService, requestSenderService, databaseInfoService)
// Create headers containing a sessionID // Create headers containing a sessionID
headers := make(map[string]interface{}) headers := make(map[string]interface{})
...@@ -133,11 +140,14 @@ func TestFailToConvertQuery(t *testing.T) { ...@@ -133,11 +140,14 @@ func TestFailToConvertQuery(t *testing.T) {
convertQueryService := mockconvertquery.NewService() convertQueryService := mockconvertquery.NewService()
// Create new request sender service // Create new request sender service
requestSenderService := mockrequest.NewService() requestSenderService := mockrequest.NewService()
// Create mock databaseinfo service
databaseInfoService := mockdatabaseinfo.NewService()
// Create new service // Create new service
service := NewService(mockBroker, producerService, convertQueryService, requestSenderService) service := NewService(mockBroker, producerService, convertQueryService, requestSenderService, databaseInfoService)
// Create mock session and mock queue // Create mock session and mock queue
mockSession := "mock-session" mockSession := "mock-session"
mockClient := "mock-client"
mockQueue := "mock-queue" mockQueue := "mock-queue"
// Set the test-session sessionID queue to mock-queue in key value store // Set the test-session sessionID queue to mock-queue in key value store
...@@ -146,6 +156,7 @@ func TestFailToConvertQuery(t *testing.T) { ...@@ -146,6 +156,7 @@ func TestFailToConvertQuery(t *testing.T) {
// Create headers containing a sessionID // Create headers containing a sessionID
headers := make(map[string]interface{}) headers := make(map[string]interface{})
headers["sessionID"] = mockSession headers["sessionID"] = mockSession
headers["clientID"] = mockClient
mockMessage := brokeradapter.Message{ mockMessage := brokeradapter.Message{
Headers: headers, Headers: headers,
Body: []byte("test message"), Body: []byte("test message"),
...@@ -181,11 +192,14 @@ func TestArangoError(t *testing.T) { ...@@ -181,11 +192,14 @@ func TestArangoError(t *testing.T) {
convertQueryService := mockconvertquery.NewService() convertQueryService := mockconvertquery.NewService()
// Create new request sender service // Create new request sender service
requestSenderService := mockrequest.NewService() requestSenderService := mockrequest.NewService()
// Create mock databaseinfo service
databaseInfoService := mockdatabaseinfo.NewService()
// Create new service // Create new service
service := NewService(mockBroker, producerService, convertQueryService, requestSenderService) service := NewService(mockBroker, producerService, convertQueryService, requestSenderService, databaseInfoService)
// Create mock session and mock queue // Create mock session and mock queue
mockSession := "mock-session" mockSession := "mock-session"
mockClient := "mock-client"
mockQueue := "mock-queue" mockQueue := "mock-queue"
// Set the test-session sessionID queue to mock-queue in key value store // Set the test-session sessionID queue to mock-queue in key value store
...@@ -194,6 +208,7 @@ func TestArangoError(t *testing.T) { ...@@ -194,6 +208,7 @@ func TestArangoError(t *testing.T) {
// Create headers containing a sessionID // Create headers containing a sessionID
headers := make(map[string]interface{}) headers := make(map[string]interface{})
headers["sessionID"] = mockSession headers["sessionID"] = mockSession
headers["clientID"] = mockClient
mockMessage := brokeradapter.Message{ mockMessage := brokeradapter.Message{
Headers: headers, Headers: headers,
Body: []byte("test message"), Body: []byte("test message"),
......
...@@ -9,14 +9,19 @@ import ( ...@@ -9,14 +9,19 @@ import (
// HandleMessage gets called when a message is received // HandleMessage gets called when a message is received
func (s *Service) HandleMessage(msg *brokeradapter.Message) { func (s *Service) HandleMessage(msg *brokeradapter.Message) {
// Grab sessionID from the headers // Grab sessionID and clientID from the headers
sessionID, ok := msg.Headers["sessionID"].(string) sessionID, ok := msg.Headers["sessionID"].(string)
if !ok { if !ok {
return return
} }
clientID, ok := msg.Headers["clientID"].(string)
if !ok {
return
}
// Convert the json byte msg to a query string // Convert the json byte msg to a query string
query, err := s.queryConverter.ConvertQuery(&msg.Body) query, databaseName, err := s.queryConverter.ConvertQuery(&msg.Body)
if err != nil { if err != nil {
errorMsg := make(map[string]string) errorMsg := make(map[string]string)
errorMsg["type"] = "query_translation_error" errorMsg["type"] = "query_translation_error"
...@@ -26,6 +31,16 @@ func (s *Service) HandleMessage(msg *brokeradapter.Message) { ...@@ -26,6 +31,16 @@ func (s *Service) HandleMessage(msg *brokeradapter.Message) {
return return
} }
// Check if there was a database name
if *databaseName == "" {
errorMsg := make(map[string]string)
errorMsg["type"] = "query_malformed_request_error"
errorMsg["value"] = "no database name supplied"
errorMsgBytes, _ := json.Marshal(errorMsg)
s.producer.PublishMessage(&errorMsgBytes, &sessionID)
return
}
// Remove newlines and tabs from string // Remove newlines and tabs from string
queryNoNewlines := strings.ReplaceAll(*query, "\n", "") queryNoNewlines := strings.ReplaceAll(*query, "\n", "")
queryNoTabs := strings.ReplaceAll(queryNoNewlines, "\t", "") queryNoTabs := strings.ReplaceAll(queryNoNewlines, "\t", "")
...@@ -41,11 +56,12 @@ func (s *Service) HandleMessage(msg *brokeradapter.Message) { ...@@ -41,11 +56,12 @@ func (s *Service) HandleMessage(msg *brokeradapter.Message) {
} }
s.producer.PublishMessage(&msgbyte, &sessionID) // TODO: should this be a go routine? s.producer.PublishMessage(&msgbyte, &sessionID) // TODO: should this be a go routine?
// Make request to database // Fetch database credentials from the user service
// TODO : Generate database seperately databaseInfo, err := s.databaseInfoService.GetDatabaseInfo(&clientID, databaseName)
// execute and retrieve result // execute and retrieve result
// convert result to general (node-link (?)) format // convert result to general (node-link (?)) format
result, err := s.requestSender.SendAQLQuery(*query) result, err := s.requestSender.SendAQLQuery(*query, databaseInfo.Username, databaseInfo.Password, databaseInfo.URL, databaseInfo.Port, databaseInfo.InternalDatabaseName)
if err != nil { if err != nil {
errorMsg := make(map[string]string) errorMsg := make(map[string]string)
errorMsg["type"] = "query_database_error" errorMsg["type"] = "query_database_error"
......
...@@ -12,13 +12,13 @@ ConvertQuery converts a json string to an AQL query ...@@ -12,13 +12,13 @@ ConvertQuery converts a json string to an AQL query
Parameters: jsonMsg is the JSON file directly outputted by the drag and drop query builder in the frontend Parameters: jsonMsg is the JSON file directly outputted by the drag and drop query builder in the frontend
Return: a string containing the corresponding AQL query and an error */ Return: a string containing the corresponding AQL query, a string containing the database name and an error */
func (s *Service) ConvertQuery(jsonMsg *[]byte) (*string, error) { func (s *Service) ConvertQuery(jsonMsg *[]byte) (*string, *string, error) {
jsonStruct, err := convertJSONToStruct(jsonMsg) jsonStruct, err := convertJSONToStruct(jsonMsg)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
return nil, err return nil, nil, err
} }
// Check to make sure all indexes exist // Check to make sure all indexes exist
...@@ -31,26 +31,26 @@ func (s *Service) ConvertQuery(jsonMsg *[]byte) (*string, error) { ...@@ -31,26 +31,26 @@ func (s *Service) ConvertQuery(jsonMsg *[]byte) (*string, error) {
for _, e := range jsonStruct.Return.Entities { for _, e := range jsonStruct.Return.Entities {
// If this entity references an entity that is outside the range // If this entity references an entity that is outside the range
if e > numEntities || e < 0 { if e > numEntities || e < 0 {
return nil, errors.New("non-existing entity referenced in return") return nil, nil, errors.New("non-existing entity referenced in return")
} }
} }
// Make sure that no relation mentions a non-existing entity // Make sure that no relation mentions a non-existing entity
for _, r := range jsonStruct.Relations { for _, r := range jsonStruct.Relations {
if r.EntityFrom > numEntities || r.EntityTo > numEntities { if r.EntityFrom > numEntities || r.EntityTo > numEntities {
return nil, errors.New("non-exisiting entity referenced in relation") return nil, nil, errors.New("non-exisiting entity referenced in relation")
} }
} }
// Make sure no non-existing relation is tried to be returned // Make sure no non-existing relation is tried to be returned
for _, r := range jsonStruct.Return.Relations { for _, r := range jsonStruct.Return.Relations {
if r > numRelations || r < 0 { if r > numRelations || r < 0 {
return nil, errors.New("non-existing relation referenced in return") return nil, nil, errors.New("non-existing relation referenced in return")
} }
} }
result := createQuery(jsonStruct) result := createQuery(jsonStruct)
return result, nil return result, &jsonStruct.DatabaseName, nil
} }
/* convertJSONtoStruct reads a JSON file and sorts the data into the appropriate structs /* convertJSONtoStruct reads a JSON file and sorts the data into the appropriate structs
......
...@@ -23,7 +23,7 @@ func TestEmptyQueryConversion(t *testing.T) { ...@@ -23,7 +23,7 @@ func TestEmptyQueryConversion(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
convertedResult, err := service.ConvertQuery(&query) convertedResult, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.NoError(t, err) assert.NoError(t, err)
...@@ -65,7 +65,7 @@ func TestEntityOneAttributeQuery(t *testing.T) { ...@@ -65,7 +65,7 @@ func TestEntityOneAttributeQuery(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
convertedResult, err := service.ConvertQuery(&query) convertedResult, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.NoError(t, err) assert.NoError(t, err)
...@@ -126,7 +126,7 @@ func TestRelationWithConstraint(t *testing.T) { ...@@ -126,7 +126,7 @@ func TestRelationWithConstraint(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
convertedResult, err := service.ConvertQuery(&query) convertedResult, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.NoError(t, err) assert.NoError(t, err)
...@@ -199,7 +199,7 @@ func TestRelationWithInOutConstraint(t *testing.T) { ...@@ -199,7 +199,7 @@ func TestRelationWithInOutConstraint(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
convertedResult, err := service.ConvertQuery(&query) convertedResult, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.NoError(t, err) assert.NoError(t, err)
...@@ -295,7 +295,7 @@ func TestTwoRelations(t *testing.T) { ...@@ -295,7 +295,7 @@ func TestTwoRelations(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
convertedResult, err := service.ConvertQuery(&query) convertedResult, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.NoError(t, err) assert.NoError(t, err)
...@@ -349,7 +349,7 @@ func TestRelationWithOnlyToNode(t *testing.T) { ...@@ -349,7 +349,7 @@ func TestRelationWithOnlyToNode(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
convertedResult, err := service.ConvertQuery(&query) convertedResult, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.NoError(t, err) assert.NoError(t, err)
...@@ -405,7 +405,7 @@ func TestTooManyReturnEntities(t *testing.T) { ...@@ -405,7 +405,7 @@ func TestTooManyReturnEntities(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
_, err := service.ConvertQuery(&query) _, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.Equal(t, errors.New("non-existing entity referenced in return"), err) assert.Equal(t, errors.New("non-existing entity referenced in return"), err)
...@@ -455,7 +455,7 @@ func TestTooManyReturnRelations(t *testing.T) { ...@@ -455,7 +455,7 @@ func TestTooManyReturnRelations(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
_, err := service.ConvertQuery(&query) _, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.Equal(t, errors.New("non-existing relation referenced in return"), err) assert.Equal(t, errors.New("non-existing relation referenced in return"), err)
...@@ -506,7 +506,7 @@ func TestNegativeReturnEntities(t *testing.T) { ...@@ -506,7 +506,7 @@ func TestNegativeReturnEntities(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
_, err := service.ConvertQuery(&query) _, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.Equal(t, errors.New("non-existing entity referenced in return"), err) assert.Equal(t, errors.New("non-existing entity referenced in return"), err)
...@@ -539,7 +539,7 @@ func TestNoRelationsField(t *testing.T) { ...@@ -539,7 +539,7 @@ func TestNoRelationsField(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
convertedResult, err := service.ConvertQuery(&query) convertedResult, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.NoError(t, err) assert.NoError(t, err)
...@@ -593,7 +593,7 @@ func TestEntityFromLowerThanNegativeOneInRelation(t *testing.T) { ...@@ -593,7 +593,7 @@ func TestEntityFromLowerThanNegativeOneInRelation(t *testing.T) {
"limit": 5000 "limit": 5000
}`) }`)
_, err := service.ConvertQuery(&query) _, _, err := service.ConvertQuery(&query)
// Assert that there is no error // Assert that there is no error
assert.NoError(t, err) assert.NoError(t, err)
......
...@@ -3,5 +3,5 @@ package convertquery ...@@ -3,5 +3,5 @@ package convertquery
// UseCase is an interface describing a function for converting a visual query // UseCase is an interface describing a function for converting a visual query
// to a query of the database language // to a query of the database language
type UseCase interface { type UseCase interface {
ConvertQuery(jsonMsg *[]byte) (*string, error) ConvertQuery(jsonMsg *[]byte) (*string, *string, error)
} }
...@@ -15,13 +15,13 @@ func NewService() *Service { ...@@ -15,13 +15,13 @@ func NewService() *Service {
} }
// ConvertQuery returns a hard coded string message (mock) // ConvertQuery returns a hard coded string message (mock)
func (s *Service) ConvertQuery(jsonMsg *[]byte) (*string, error) { func (s *Service) ConvertQuery(jsonMsg *[]byte) (*string, *string, error) {
mockQuery := "Query converted" mockQuery := "Query converted"
if !s.throwError { if !s.throwError {
return &mockQuery, nil return &mockQuery, nil, nil
} }
return nil, errors.New("Failed to convert query") return nil, nil, errors.New("Failed to convert query")
} }
// ToggleError decides whether the convert function throws an error // ToggleError decides whether the convert function throws an error
......
package databaseinfo
import "query-service/internal/entity"
// GetDatabaseInfo gets the database info from the user service through the RPC driver
func (s *Service) GetDatabaseInfo(clientID *string, databaseName *string) (*entity.DatabaseInfo, error) {
return s.rpcDriver.GetDatabaseInfo(clientID, databaseName)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment